ETH Price: $3,319.65 (+0.54%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw169075212023-03-25 22:43:351029 days ago1679784215IN
0xC76d8342...Fd4A2728d
0 ETH0.0004609815.0225648
Transfer From138984682021-12-29 5:57:561481 days ago1640757476IN
0xC76d8342...Fd4A2728d
0 ETH0.0070713174.07237894
Mint Batch138978742021-12-29 3:50:301481 days ago1640749830IN
0xC76d8342...Fd4A2728d
0.04 ETH0.0108295270.75022615
Mint Batch138976572021-12-29 3:00:231481 days ago1640746823IN
0xC76d8342...Fd4A2728d
0.04 ETH0.0119425779.47572221
Mint Batch138897412021-12-27 21:37:021482 days ago1640641022IN
0xC76d8342...Fd4A2728d
0.04 ETH0.0104417468.21683875
Mint Batch138849842021-12-27 3:58:341483 days ago1640577514IN
0xC76d8342...Fd4A2728d
0.04 ETH0.0097595964.9483645
Mint Batch138691952021-12-24 17:14:431485 days ago1640366083IN
0xC76d8342...Fd4A2728d
0.08 ETH0.0199664375.05359714
Mint Batch138597242021-12-23 6:04:351487 days ago1640239475IN
0xC76d8342...Fd4A2728d
0.08 ETH0.0155995358.02771274
Mint Batch138594422021-12-23 4:59:461487 days ago1640235586IN
0xC76d8342...Fd4A2728d
0.08 ETH0.0194831375.43590629
Mint Batch138594202021-12-23 4:54:051487 days ago1640235245IN
0xC76d8342...Fd4A2728d
0.08 ETH0.015974661.85139363
Mint Batch138593742021-12-23 4:44:321487 days ago1640234672IN
0xC76d8342...Fd4A2728d
0.04 ETH0.0106832169.79439898
Mint Batch138581682021-12-23 0:12:001487 days ago1640218320IN
0xC76d8342...Fd4A2728d
0.04 ETH0.0113632574.2371457
Mint Batch138577342021-12-22 22:42:091487 days ago1640212929IN
0xC76d8342...Fd4A2728d
0.04 ETH0.01730722113.06959142
Mint Batch138574962021-12-22 21:49:511487 days ago1640209791IN
0xC76d8342...Fd4A2728d
0.04 ETH0.02179298145.02843058
Mint Batch138523132021-12-22 2:29:281488 days ago1640140168IN
0xC76d8342...Fd4A2728d
0.16 ETH0.0404506881.29924556
Mint Batch138388602021-12-20 0:40:591490 days ago1639960859IN
0xC76d8342...Fd4A2728d
0.04 ETH0.0099263966.05841254
Transfer From138217172021-12-17 8:56:281493 days ago1639731388IN
0xC76d8342...Fd4A2728d
0 ETH0.0044199151.99287873
Mint Batch138140072021-12-16 4:23:181494 days ago1639628598IN
0xC76d8342...Fd4A2728d
0.04 ETH0.0144061395.87022734
Mint Batch138021392021-12-14 8:15:561496 days ago1639469756IN
0xC76d8342...Fd4A2728d
0.04 ETH0.0092551961.59164995
Mint Batch137898592021-12-12 10:55:041498 days ago1639306504IN
0xC76d8342...Fd4A2728d
0.04 ETH0.0059394838.80316071
Mint Batch137898402021-12-12 10:51:131498 days ago1639306273IN
0xC76d8342...Fd4A2728d
0.04 ETH0.0061347140.82545645
Mint Batch137896522021-12-12 10:07:271498 days ago1639303647IN
0xC76d8342...Fd4A2728d
0.04 ETH0.0055470936.9149017
Mint Batch137894162021-12-12 9:08:281498 days ago1639300108IN
0xC76d8342...Fd4A2728d
0.16 ETH0.0212504342.71091483
Withdraw137892472021-12-12 8:32:431498 days ago1639297963IN
0xC76d8342...Fd4A2728d
0 ETH0.0011035435.96247864
Mint Batch137892292021-12-12 8:29:511498 days ago1639297791IN
0xC76d8342...Fd4A2728d
0.04 ETH0.0062084340.56022498
View all transactions

Latest 2 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer169075212023-03-25 22:43:351029 days ago1679784215
0xC76d8342...Fd4A2728d
1.04 ETH
-137892472021-12-12 8:32:431498 days ago1639297963
0xC76d8342...Fd4A2728d
0.08 ETH
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ChatPunks

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2021-12-16
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// File: common/meta-transactions/Initializable.sol
contract Initializable {
    bool inited = false;

    modifier initializer() {
        require(!inited, "already inited");
        _;
        inited = true;
    }
}

// File: common/meta-transactions/EIP712Base.sol
contract EIP712Base is Initializable {
    struct EIP712Domain {
        string name;
        string version;
        address verifyingContract;
        bytes32 salt;
    }

    string constant public ERC712_VERSION = "1";

    bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(
        bytes(
            "EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)"
        )
    );
    bytes32 internal domainSeperator;

    function _initializeEIP712(
        string memory name
    )
        internal
        initializer
    {
        _setDomainSeperator(name);
    }

    function _setDomainSeperator(string memory name) internal {
        domainSeperator = keccak256(
            abi.encode(
                EIP712_DOMAIN_TYPEHASH,
                keccak256(bytes(name)),
                keccak256(bytes(ERC712_VERSION)),
                address(this),
                bytes32(getChainId())
            )
        );
    }

    function getDomainSeperator() public view returns (bytes32) {
        return domainSeperator;
    }

    function getChainId() public view returns (uint256) {
        uint256 id;
        assembly {
            id := chainid()
        }
        return id;
    }

    function toTypedMessageHash(bytes32 messageHash)
        internal
        view
        returns (bytes32)
    {
        return
            keccak256(
                abi.encodePacked("\x19\x01", getDomainSeperator(), messageHash)
            );
    }
}
// File: common/meta-transactions/ContentMixin.sol
abstract contract ContextMixin {
    function msgSender()
        internal
        view
        returns (address payable sender)
    {
        if (msg.sender == address(this)) {
            bytes memory array = msg.data;
            uint256 index = msg.data.length;
            assembly {
                sender := and(
                    mload(add(array, index)),
                    0xffffffffffffffffffffffffffffffffffffffff
                )
            }
        } else {
            sender = payable(msg.sender);
        }
        return sender;
    }
}

// File: openzeppelin-solidity/contracts/utils/math/SafeMath.sol
library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

// File: common/meta-transactions/NativeMetaTransaction.sol
contract NativeMetaTransaction is EIP712Base {
    using SafeMath for uint256;
    bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(
        bytes(
            "MetaTransaction(uint256 nonce,address from,bytes functionSignature)"
        )
    );
    event MetaTransactionExecuted(
        address userAddress,
        address payable relayerAddress,
        bytes functionSignature
    );
    mapping(address => uint256) nonces;

    struct MetaTransaction {
        uint256 nonce;
        address from;
        bytes functionSignature;
    }

    function executeMetaTransaction(
        address userAddress,
        bytes memory functionSignature,
        bytes32 sigR,
        bytes32 sigS,
        uint8 sigV
    ) public payable returns (bytes memory) {
        MetaTransaction memory metaTx = MetaTransaction({
            nonce: nonces[userAddress],
            from: userAddress,
            functionSignature: functionSignature
        });

        require(
            verify(userAddress, metaTx, sigR, sigS, sigV),
            "Signer and signature do not match"
        );

        nonces[userAddress] = nonces[userAddress].add(1);

        emit MetaTransactionExecuted(
            userAddress,
            payable(msg.sender),
            functionSignature
        );

        (bool success, bytes memory returnData) = address(this).call(
            abi.encodePacked(functionSignature, userAddress)
        );
        require(success, "Function call not successful");

        return returnData;
    }

    function hashMetaTransaction(MetaTransaction memory metaTx)
        internal
        pure
        returns (bytes32)
    {
        return
            keccak256(
                abi.encode(
                    META_TRANSACTION_TYPEHASH,
                    metaTx.nonce,
                    metaTx.from,
                    keccak256(metaTx.functionSignature)
                )
            );
    }

    function getNonce(address user) public view returns (uint256 nonce) {
        nonce = nonces[user];
    }

    function verify(
        address signer,
        MetaTransaction memory metaTx,
        bytes32 sigR,
        bytes32 sigS,
        uint8 sigV
    ) internal view returns (bool) {
        require(signer != address(0), "NativeMetaTransaction: INVALID_SIGNER");
        return
            signer ==
            ecrecover(
                toTypedMessageHash(hashMetaTransaction(metaTx)),
                sigV,
                sigR,
                sigS
            );
    }
}

// File: openzeppelin-solidity/contracts/utils/Strings.sol
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: openzeppelin-solidity/contracts/utils/Context.sol
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: openzeppelin-solidity/contracts/access/Ownable.sol
abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_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 {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: openzeppelin-solidity/contracts/utils/Address.sol
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);
            }
        }
    }
}

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol
interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: openzeppelin-solidity/contracts/utils/introspection/IERC165.sol
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: openzeppelin-solidity/contracts/utils/introspection/ERC165.sol
abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721.sol
interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

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

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

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId) external view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: openzeppelin-solidity/contracts/token/ERC721/extensions/IERC721Enumerable.sol
interface IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);

    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: openzeppelin-solidity/contracts/token/ERC721/extensions/IERC721Metadata.sol
interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);

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

    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: openzeppelin-solidity/contracts/token/ERC721/ERC721.sol
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    string private _name;

    string private _symbol;

    mapping(uint256 => address) private _owners;

    mapping(address => uint256) private _balances;

    mapping(uint256 => address) private _tokenApprovals;

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

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

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

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

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

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

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: openzeppelin-solidity/contracts/token/ERC721/extensions/ERC721Enumerable.sol
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    mapping(uint256 => uint256) private _ownedTokensIndex;

    uint256[] private _allTokens;

    mapping(uint256 => uint256) private _allTokensIndex;

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

    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; 
            _ownedTokensIndex[lastTokenId] = tokenIndex; 
        }

        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId;
        _allTokensIndex[lastTokenId] = tokenIndex;

        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: ERC721Tradable.sol
contract OwnableDelegateProxy {}

contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

abstract contract ERC721Tradable is ContextMixin, ERC721Enumerable, NativeMetaTransaction, Ownable {
    using SafeMath for uint256;

    address proxyRegistryAddress;
    uint256 private _currentTokenId = 0;

    constructor(
        string memory _name,
        string memory _symbol,
        address _proxyRegistryAddress
    ) ERC721(_name, _symbol) {
        proxyRegistryAddress = _proxyRegistryAddress;
        _initializeEIP712(_name);
    }

    function mintTo(address _to) public onlyOwner {
        uint256 newTokenId = _getNextTokenId();
        _mint(_to, newTokenId);
        _incrementTokenId();
    }

    function _getNextTokenId() internal view returns (uint256) {
        return _currentTokenId.add(1);
    }

    function _incrementTokenId() internal {
        _currentTokenId++;
    }

    function baseTokenURI() virtual public pure returns (string memory);

    function tokenURI(uint256 _tokenId) override public pure returns (string memory) {
        return string(abi.encodePacked(baseTokenURI(), Strings.toString(_tokenId)));
    }

    function isApprovedForAll(address owner, address operator)
        override
        public
        view
        returns (bool)
    {
        ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(owner)) == operator) {
            return true;
        }

        return super.isApprovedForAll(owner, operator);
    }

    function _msgSender()
        internal
        override
        view
        returns (address sender)
    {
        return ContextMixin.msgSender();
    }
}

// File: ChatPunks.sol
contract ChatPunks is ERC721Tradable {
    constructor(address _proxyRegistryAddress)
        ERC721Tradable("ChatPunks", "CPK", _proxyRegistryAddress)
    {}

    function baseTokenURI() override public pure returns (string memory) {
        return "https://chatpunks.appspot.com/api/chatpunks-nft/";
    }

    function contractURI() public pure returns (string memory) {
        return "https://chatpunks.appspot.com/api/chatpunks-contract-metadata";
    }

    function mintBatch(uint256 mintCount, address _toAddress) public payable {
        uint256 supply = totalSupply();

        require(supply + mintCount < 10001, "Exceeds maximum supply");
        require(msg.value >= 0.04 ether * mintCount, "Not enough ETH sent, check price");

        for (uint256 i = 0; i < mintCount; i++) {
            uint256 newTokenId = _getNextTokenId();
            _mint(_toAddress, newTokenId);
            _incrementTokenId();
        }
    }

    function withdraw() public onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ERC712_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDomainSeperator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintCount","type":"uint256"},{"internalType":"address","name":"_toAddress","type":"address"}],"name":"mintBatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"mintTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","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":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600a60006101000a81548160ff0219169083151502179055506000600f553480156200003157600080fd5b5060405162004cae38038062004cae833981810160405281019062000057919062000510565b6040518060400160405280600981526020017f4368617450756e6b7300000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f43504b00000000000000000000000000000000000000000000000000000000008152508282828160009080519060200190620000de92919062000449565b508060019080519060200190620000f792919062000449565b5050506200011a6200010e6200017660201b60201c565b6200019260201b60201c565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200016c836200025860201b60201c565b5050505062000706565b60006200018d620002da60201b620016561760201c565b905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600a60009054906101000a900460ff1615620002ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002a290620005e8565b60405180910390fd5b620002bc816200038d60201b60201c565b6001600a60006101000a81548160ff02191690831515021790555050565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156200038657600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff8183015116925050506200038a565b3390505b90565b6040518060800160405280604f815260200162004c5f604f91398051906020012081805190602001206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012030620004046200043c60201b60201c565b60001b6040516020016200041d9594939291906200058b565b60405160208183030381529060405280519060200120600b8190555050565b6000804690508091505090565b828054620004579062000659565b90600052602060002090601f0160209004810192826200047b5760008555620004c7565b82601f106200049657805160ff1916838001178555620004c7565b82800160010185558215620004c7579182015b82811115620004c6578251825591602001919060010190620004a9565b5b509050620004d69190620004da565b5090565b5b80821115620004f5576000816000905550600101620004db565b5090565b6000815190506200050a81620006ec565b92915050565b600060208284031215620005295762000528620006be565b5b60006200053984828501620004f9565b91505092915050565b6200054d816200061b565b82525050565b6200055e816200062f565b82525050565b600062000573600e836200060a565b91506200058082620006c3565b602082019050919050565b600060a082019050620005a2600083018862000553565b620005b1602083018762000553565b620005c0604083018662000553565b620005cf606083018562000542565b620005de608083018462000553565b9695505050505050565b60006020820190508181036000830152620006038162000564565b9050919050565b600082825260208201905092915050565b6000620006288262000639565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200067257607f821691505b602082108114156200068957620006886200068f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f616c726561647920696e69746564000000000000000000000000000000000000600082015250565b620006f7816200061b565b81146200070357600080fd5b50565b61454980620007166000396000f3fe6080604052600436106101c25760003560e01c80634f6ccce7116100f7578063a22cb46511610095578063d547cfb711610064578063d547cfb71461064c578063e8a3d48514610677578063e985e9c5146106a2578063f2fde38b146106df576101c2565b8063a22cb465146105a1578063b88d4fde146105ca578063bc4f1a7e146105f3578063c87b56dd1461060f576101c2565b8063715018a6116100d1578063715018a61461050b578063755edd17146105225780638da5cb5b1461054b57806395d89b4114610576576101c2565b80634f6ccce7146104545780636352211e1461049157806370a08231146104ce576101c2565b806320379ee5116101645780632f745c591161013e5780632f745c59146103ac5780633408e470146103e95780633ccfd60b1461041457806342842e0e1461042b576101c2565b806320379ee51461031b57806323b872dd146103465780632d0335ab1461036f576101c2565b8063095ea7b3116101a0578063095ea7b31461026c5780630c53c51c146102955780630f7e5970146102c557806318160ddd146102f0576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612e45565b610708565b6040516101fb91906134f9565b60405180910390f35b34801561021057600080fd5b50610219610782565b60405161022691906135db565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612ecc565b610814565b6040516102639190613454565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612e05565b610899565b005b6102af60048036038101906102aa9190612d6e565b6109b1565b6040516102bc91906135b9565b60405180910390f35b3480156102d157600080fd5b506102da610c23565b6040516102e791906135db565b60405180910390f35b3480156102fc57600080fd5b50610305610c5c565b60405161031291906138bd565b60405180910390f35b34801561032757600080fd5b50610330610c69565b60405161033d9190613514565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190612c58565b610c73565b005b34801561037b57600080fd5b5061039660048036038101906103919190612beb565b610cd3565b6040516103a391906138bd565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190612e05565b610d1c565b6040516103e091906138bd565b60405180910390f35b3480156103f557600080fd5b506103fe610dc1565b60405161040b91906138bd565b60405180910390f35b34801561042057600080fd5b50610429610dce565b005b34801561043757600080fd5b50610452600480360381019061044d9190612c58565b610e9a565b005b34801561046057600080fd5b5061047b60048036038101906104769190612ecc565b610eba565b60405161048891906138bd565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190612ecc565b610f2b565b6040516104c59190613454565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190612beb565b610fdd565b60405161050291906138bd565b60405180910390f35b34801561051757600080fd5b50610520611095565b005b34801561052e57600080fd5b5061054960048036038101906105449190612beb565b61111d565b005b34801561055757600080fd5b506105606111bb565b60405161056d9190613454565b60405180910390f35b34801561058257600080fd5b5061058b6111e5565b60405161059891906135db565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c39190612d2e565b611277565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190612cab565b61128d565b005b61060d60048036038101906106089190612ef9565b6112ef565b005b34801561061b57600080fd5b5061063660048036038101906106319190612ecc565b6113e2565b60405161064391906135db565b60405180910390f35b34801561065857600080fd5b5061066161141c565b60405161066e91906135db565b60405180910390f35b34801561068357600080fd5b5061068c61143c565b60405161069991906135db565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c49190612c18565b61145c565b6040516106d691906134f9565b60405180910390f35b3480156106eb57600080fd5b5061070660048036038101906107019190612beb565b61155e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061077b575061077a82611707565b5b9050919050565b60606000805461079190613b82565b80601f01602080910402602001604051908101604052809291908181526020018280546107bd90613b82565b801561080a5780601f106107df5761010080835404028352916020019161080a565b820191906000526020600020905b8154815290600101906020018083116107ed57829003601f168201915b5050505050905090565b600061081f826117e9565b61085e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108559061379d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108a482610f2b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090c9061381d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610934611855565b73ffffffffffffffffffffffffffffffffffffffff16148061096357506109628161095d611855565b61145c565b5b6109a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109999061371d565b60405180910390fd5b6109ac8383611864565b505050565b606060006040518060600160405280600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152509050610a34878287878761191d565b610a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6a906137fd565b60405180910390fd5b610ac66001600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a2690919063ffffffff16565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b873388604051610b3c9392919061346f565b60405180910390a16000803073ffffffffffffffffffffffffffffffffffffffff16888a604051602001610b719291906133d1565b604051602081830303815290604052604051610b8d91906133ba565b6000604051808303816000865af19150503d8060008114610bca576040519150601f19603f3d011682016040523d82523d6000602084013e610bcf565b606091505b509150915081610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b9061365d565b60405180910390fd5b80935050505095945050505050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6000600880549050905090565b6000600b54905090565b610c84610c7e611855565b82611a3c565b610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba9061385d565b60405180910390fd5b610cce838383611b1a565b505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610d2783610fdd565b8210610d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5f906135fd565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000804690508091505090565b610dd6611855565b73ffffffffffffffffffffffffffffffffffffffff16610df46111bb565b73ffffffffffffffffffffffffffffffffffffffff1614610e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e41906137bd565b60405180910390fd5b610e526111bb565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e97573d6000803e3d6000fd5b50565b610eb58383836040518060200160405280600081525061128d565b505050565b6000610ec4610c5c565b8210610f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efc9061387d565b60405180910390fd5b60088281548110610f1957610f18613d49565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb9061375d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561104e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110459061373d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61109d611855565b73ffffffffffffffffffffffffffffffffffffffff166110bb6111bb565b73ffffffffffffffffffffffffffffffffffffffff1614611111576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611108906137bd565b60405180910390fd5b61111b6000611d76565b565b611125611855565b73ffffffffffffffffffffffffffffffffffffffff166111436111bb565b73ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611190906137bd565b60405180910390fd5b60006111a3611e3c565b90506111af8282611e59565b6111b7612027565b5050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546111f490613b82565b80601f016020809104026020016040519081016040528092919081815260200182805461122090613b82565b801561126d5780601f106112425761010080835404028352916020019161126d565b820191906000526020600020905b81548152906001019060200180831161125057829003601f168201915b5050505050905090565b611289611282611855565b8383612041565b5050565b61129e611298611855565b83611a3c565b6112dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d49061385d565b60405180910390fd5b6112e9848484846121ae565b50505050565b60006112f9610c5c565b9050612711838261130a919061397c565b1061134a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113419061383d565b60405180910390fd5b82668e1bc9bf04000061135d9190613a03565b34101561139f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113969061389d565b60405180910390fd5b60005b838110156113dc5760006113b4611e3c565b90506113c08482611e59565b6113c8612027565b5080806113d490613be5565b9150506113a2565b50505050565b60606113ec61141c565b6113f58361220a565b6040516020016114069291906133f9565b6040516020818303038152906040529050919050565b60606040518060600160405280603081526020016144e460309139905090565b60606040518060600160405280603d81526020016144a7603d9139905090565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016114d49190613454565b60206040518083038186803b1580156114ec57600080fd5b505afa158015611500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115249190612e9f565b73ffffffffffffffffffffffffffffffffffffffff16141561154a576001915050611558565b611554848461236b565b9150505b92915050565b611566611855565b73ffffffffffffffffffffffffffffffffffffffff166115846111bb565b73ffffffffffffffffffffffffffffffffffffffff16146115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d1906137bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561164a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116419061363d565b60405180910390fd5b61165381611d76565b50565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561170057600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050611704565b3390505b90565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806117d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806117e257506117e1826123ff565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600061185f611656565b905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166118d783610f2b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561198e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611985906136fd565b60405180910390fd5b60016119a161199c87612469565b6124d1565b838686604051600081526020016040526040516119c19493929190613574565b6020604051602081039080840390855afa1580156119e3573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b60008183611a34919061397c565b905092915050565b6000611a47826117e9565b611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d906136dd565b60405180910390fd5b6000611a9183610f2b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b0057508373ffffffffffffffffffffffffffffffffffffffff16611ae884610814565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b115750611b10818561145c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b3a82610f2b565b73ffffffffffffffffffffffffffffffffffffffff1614611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b87906137dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf79061369d565b60405180910390fd5b611c0b83838361250a565b611c16600082611864565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c669190613a5d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cbd919061397c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611e546001600f54611a2690919063ffffffff16565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec09061377d565b60405180910390fd5b611ed2816117e9565b15611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f099061367d565b60405180910390fd5b611f1e6000838361250a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f6e919061397c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600f600081548092919061203a90613be5565b9190505550565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a7906136bd565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121a191906134f9565b60405180910390a3505050565b6121b9848484611b1a565b6121c58484848461261e565b612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb9061361d565b60405180910390fd5b50505050565b60606000821415612252576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612366565b600082905060005b6000821461228457808061226d90613be5565b915050600a8261227d91906139d2565b915061225a565b60008167ffffffffffffffff8111156122a05761229f613d78565b5b6040519080825280601f01601f1916602001820160405280156122d25781602001600182028036833780820191505090505b5090505b6000851461235f576001826122eb9190613a5d565b9150600a856122fa9190613c5c565b6030612306919061397c565b60f81b81838151811061231c5761231b613d49565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561235891906139d2565b94506122d6565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006040518060800160405280604381526020016144646043913980519060200120826000015183602001518460400151805190602001206040516020016124b4949392919061352f565b604051602081830303815290604052805190602001209050919050565b60006124db610c69565b826040516020016124ed92919061341d565b604051602081830303815290604052805190602001209050919050565b6125158383836127b5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561255857612553816127ba565b612597565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612596576125958382612803565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125da576125d581612970565b612619565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612618576126178282612a41565b5b5b505050565b600061263f8473ffffffffffffffffffffffffffffffffffffffff16612ac0565b156127a8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612668611855565b8786866040518563ffffffff1660e01b815260040161268a94939291906134ad565b602060405180830381600087803b1580156126a457600080fd5b505af19250505080156126d557506040513d601f19601f820116820180604052508101906126d29190612e72565b60015b612758573d8060008114612705576040519150601f19603f3d011682016040523d82523d6000602084013e61270a565b606091505b50600081511415612750576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127479061361d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127ad565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161281084610fdd565b61281a9190613a5d565b90506000600760008481526020019081526020016000205490508181146128ff576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129849190613a5d565b90506000600960008481526020019081526020016000205490506000600883815481106129b4576129b3613d49565b5b9060005260206000200154905080600883815481106129d6576129d5613d49565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612a2557612a24613d1a565b5b6001900381819060005260206000200160009055905550505050565b6000612a4c83610fdd565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b6000612ae6612ae1846138fd565b6138d8565b905082815260208101848484011115612b0257612b01613dac565b5b612b0d848285613b40565b509392505050565b600081359050612b24816143c2565b92915050565b600081359050612b39816143d9565b92915050565b600081359050612b4e816143f0565b92915050565b600081359050612b6381614407565b92915050565b600081519050612b7881614407565b92915050565b600082601f830112612b9357612b92613da7565b5b8135612ba3848260208601612ad3565b91505092915050565b600081519050612bbb8161441e565b92915050565b600081359050612bd081614435565b92915050565b600081359050612be58161444c565b92915050565b600060208284031215612c0157612c00613db6565b5b6000612c0f84828501612b15565b91505092915050565b60008060408385031215612c2f57612c2e613db6565b5b6000612c3d85828601612b15565b9250506020612c4e85828601612b15565b9150509250929050565b600080600060608486031215612c7157612c70613db6565b5b6000612c7f86828701612b15565b9350506020612c9086828701612b15565b9250506040612ca186828701612bc1565b9150509250925092565b60008060008060808587031215612cc557612cc4613db6565b5b6000612cd387828801612b15565b9450506020612ce487828801612b15565b9350506040612cf587828801612bc1565b925050606085013567ffffffffffffffff811115612d1657612d15613db1565b5b612d2287828801612b7e565b91505092959194509250565b60008060408385031215612d4557612d44613db6565b5b6000612d5385828601612b15565b9250506020612d6485828601612b2a565b9150509250929050565b600080600080600060a08688031215612d8a57612d89613db6565b5b6000612d9888828901612b15565b955050602086013567ffffffffffffffff811115612db957612db8613db1565b5b612dc588828901612b7e565b9450506040612dd688828901612b3f565b9350506060612de788828901612b3f565b9250506080612df888828901612bd6565b9150509295509295909350565b60008060408385031215612e1c57612e1b613db6565b5b6000612e2a85828601612b15565b9250506020612e3b85828601612bc1565b9150509250929050565b600060208284031215612e5b57612e5a613db6565b5b6000612e6984828501612b54565b91505092915050565b600060208284031215612e8857612e87613db6565b5b6000612e9684828501612b69565b91505092915050565b600060208284031215612eb557612eb4613db6565b5b6000612ec384828501612bac565b91505092915050565b600060208284031215612ee257612ee1613db6565b5b6000612ef084828501612bc1565b91505092915050565b60008060408385031215612f1057612f0f613db6565b5b6000612f1e85828601612bc1565b9250506020612f2f85828601612b15565b9150509250929050565b612f4281613aa3565b82525050565b612f5181613a91565b82525050565b612f68612f6382613a91565b613c2e565b82525050565b612f7781613ab5565b82525050565b612f8681613ac1565b82525050565b612f9d612f9882613ac1565b613c40565b82525050565b6000612fae8261392e565b612fb88185613944565b9350612fc8818560208601613b4f565b612fd181613dbb565b840191505092915050565b6000612fe78261392e565b612ff18185613955565b9350613001818560208601613b4f565b80840191505092915050565b600061301882613939565b6130228185613960565b9350613032818560208601613b4f565b61303b81613dbb565b840191505092915050565b600061305182613939565b61305b8185613971565b935061306b818560208601613b4f565b80840191505092915050565b6000613084602b83613960565b915061308f82613dd9565b604082019050919050565b60006130a7603283613960565b91506130b282613e28565b604082019050919050565b60006130ca602683613960565b91506130d582613e77565b604082019050919050565b60006130ed601c83613960565b91506130f882613ec6565b602082019050919050565b6000613110601c83613960565b915061311b82613eef565b602082019050919050565b6000613133600283613971565b915061313e82613f18565b600282019050919050565b6000613156602483613960565b915061316182613f41565b604082019050919050565b6000613179601983613960565b915061318482613f90565b602082019050919050565b600061319c602c83613960565b91506131a782613fb9565b604082019050919050565b60006131bf602583613960565b91506131ca82614008565b604082019050919050565b60006131e2603883613960565b91506131ed82614057565b604082019050919050565b6000613205602a83613960565b9150613210826140a6565b604082019050919050565b6000613228602983613960565b9150613233826140f5565b604082019050919050565b600061324b602083613960565b915061325682614144565b602082019050919050565b600061326e602c83613960565b91506132798261416d565b604082019050919050565b6000613291602083613960565b915061329c826141bc565b602082019050919050565b60006132b4602983613960565b91506132bf826141e5565b604082019050919050565b60006132d7602183613960565b91506132e282614234565b604082019050919050565b60006132fa602183613960565b915061330582614283565b604082019050919050565b600061331d601683613960565b9150613328826142d2565b602082019050919050565b6000613340603183613960565b915061334b826142fb565b604082019050919050565b6000613363602c83613960565b915061336e8261434a565b604082019050919050565b6000613386602083613960565b915061339182614399565b602082019050919050565b6133a581613b29565b82525050565b6133b481613b33565b82525050565b60006133c68284612fdc565b915081905092915050565b60006133dd8285612fdc565b91506133e98284612f57565b6014820191508190509392505050565b60006134058285613046565b91506134118284613046565b91508190509392505050565b600061342882613126565b91506134348285612f8c565b6020820191506134448284612f8c565b6020820191508190509392505050565b60006020820190506134696000830184612f48565b92915050565b60006060820190506134846000830186612f48565b6134916020830185612f39565b81810360408301526134a38184612fa3565b9050949350505050565b60006080820190506134c26000830187612f48565b6134cf6020830186612f48565b6134dc604083018561339c565b81810360608301526134ee8184612fa3565b905095945050505050565b600060208201905061350e6000830184612f6e565b92915050565b60006020820190506135296000830184612f7d565b92915050565b60006080820190506135446000830187612f7d565b613551602083018661339c565b61355e6040830185612f48565b61356b6060830184612f7d565b95945050505050565b60006080820190506135896000830187612f7d565b61359660208301866133ab565b6135a36040830185612f7d565b6135b06060830184612f7d565b95945050505050565b600060208201905081810360008301526135d38184612fa3565b905092915050565b600060208201905081810360008301526135f5818461300d565b905092915050565b6000602082019050818103600083015261361681613077565b9050919050565b600060208201905081810360008301526136368161309a565b9050919050565b60006020820190508181036000830152613656816130bd565b9050919050565b60006020820190508181036000830152613676816130e0565b9050919050565b6000602082019050818103600083015261369681613103565b9050919050565b600060208201905081810360008301526136b681613149565b9050919050565b600060208201905081810360008301526136d68161316c565b9050919050565b600060208201905081810360008301526136f68161318f565b9050919050565b60006020820190508181036000830152613716816131b2565b9050919050565b60006020820190508181036000830152613736816131d5565b9050919050565b60006020820190508181036000830152613756816131f8565b9050919050565b600060208201905081810360008301526137768161321b565b9050919050565b600060208201905081810360008301526137968161323e565b9050919050565b600060208201905081810360008301526137b681613261565b9050919050565b600060208201905081810360008301526137d681613284565b9050919050565b600060208201905081810360008301526137f6816132a7565b9050919050565b60006020820190508181036000830152613816816132ca565b9050919050565b60006020820190508181036000830152613836816132ed565b9050919050565b6000602082019050818103600083015261385681613310565b9050919050565b6000602082019050818103600083015261387681613333565b9050919050565b6000602082019050818103600083015261389681613356565b9050919050565b600060208201905081810360008301526138b681613379565b9050919050565b60006020820190506138d2600083018461339c565b92915050565b60006138e26138f3565b90506138ee8282613bb4565b919050565b6000604051905090565b600067ffffffffffffffff82111561391857613917613d78565b5b61392182613dbb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061398782613b29565b915061399283613b29565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139c7576139c6613c8d565b5b828201905092915050565b60006139dd82613b29565b91506139e883613b29565b9250826139f8576139f7613cbc565b5b828204905092915050565b6000613a0e82613b29565b9150613a1983613b29565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a5257613a51613c8d565b5b828202905092915050565b6000613a6882613b29565b9150613a7383613b29565b925082821015613a8657613a85613c8d565b5b828203905092915050565b6000613a9c82613b09565b9050919050565b6000613aae82613b09565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613b0282613a91565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613b6d578082015181840152602081019050613b52565b83811115613b7c576000848401525b50505050565b60006002820490506001821680613b9a57607f821691505b60208210811415613bae57613bad613ceb565b5b50919050565b613bbd82613dbb565b810181811067ffffffffffffffff82111715613bdc57613bdb613d78565b5b80604052505050565b6000613bf082613b29565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c2357613c22613c8d565b5b600182019050919050565b6000613c3982613c4a565b9050919050565b6000819050919050565b6000613c5582613dcc565b9050919050565b6000613c6782613b29565b9150613c7283613b29565b925082613c8257613c81613cbc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360008201527f49474e4552000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204554482073656e742c20636865636b207072696365600082015250565b6143cb81613a91565b81146143d657600080fd5b50565b6143e281613ab5565b81146143ed57600080fd5b50565b6143f981613ac1565b811461440457600080fd5b50565b61441081613acb565b811461441b57600080fd5b50565b61442781613af7565b811461443257600080fd5b50565b61443e81613b29565b811461444957600080fd5b50565b61445581613b33565b811461446057600080fd5b5056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e61747572652968747470733a2f2f6368617470756e6b732e61707073706f742e636f6d2f6170692f6368617470756e6b732d636f6e74726163742d6d6574616461746168747470733a2f2f6368617470756e6b732e61707073706f742e636f6d2f6170692f6368617470756e6b732d6e66742fa26469706673582212205b3313e5f31943a8cfb99276d5faaa7a0cc143c4001f20169bb1e77344c3e6c164736f6c63430008070033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c6164647265737320766572696679696e67436f6e74726163742c627974657333322073616c7429000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1

Deployed Bytecode

0x6080604052600436106101c25760003560e01c80634f6ccce7116100f7578063a22cb46511610095578063d547cfb711610064578063d547cfb71461064c578063e8a3d48514610677578063e985e9c5146106a2578063f2fde38b146106df576101c2565b8063a22cb465146105a1578063b88d4fde146105ca578063bc4f1a7e146105f3578063c87b56dd1461060f576101c2565b8063715018a6116100d1578063715018a61461050b578063755edd17146105225780638da5cb5b1461054b57806395d89b4114610576576101c2565b80634f6ccce7146104545780636352211e1461049157806370a08231146104ce576101c2565b806320379ee5116101645780632f745c591161013e5780632f745c59146103ac5780633408e470146103e95780633ccfd60b1461041457806342842e0e1461042b576101c2565b806320379ee51461031b57806323b872dd146103465780632d0335ab1461036f576101c2565b8063095ea7b3116101a0578063095ea7b31461026c5780630c53c51c146102955780630f7e5970146102c557806318160ddd146102f0576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612e45565b610708565b6040516101fb91906134f9565b60405180910390f35b34801561021057600080fd5b50610219610782565b60405161022691906135db565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612ecc565b610814565b6040516102639190613454565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612e05565b610899565b005b6102af60048036038101906102aa9190612d6e565b6109b1565b6040516102bc91906135b9565b60405180910390f35b3480156102d157600080fd5b506102da610c23565b6040516102e791906135db565b60405180910390f35b3480156102fc57600080fd5b50610305610c5c565b60405161031291906138bd565b60405180910390f35b34801561032757600080fd5b50610330610c69565b60405161033d9190613514565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190612c58565b610c73565b005b34801561037b57600080fd5b5061039660048036038101906103919190612beb565b610cd3565b6040516103a391906138bd565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190612e05565b610d1c565b6040516103e091906138bd565b60405180910390f35b3480156103f557600080fd5b506103fe610dc1565b60405161040b91906138bd565b60405180910390f35b34801561042057600080fd5b50610429610dce565b005b34801561043757600080fd5b50610452600480360381019061044d9190612c58565b610e9a565b005b34801561046057600080fd5b5061047b60048036038101906104769190612ecc565b610eba565b60405161048891906138bd565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190612ecc565b610f2b565b6040516104c59190613454565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190612beb565b610fdd565b60405161050291906138bd565b60405180910390f35b34801561051757600080fd5b50610520611095565b005b34801561052e57600080fd5b5061054960048036038101906105449190612beb565b61111d565b005b34801561055757600080fd5b506105606111bb565b60405161056d9190613454565b60405180910390f35b34801561058257600080fd5b5061058b6111e5565b60405161059891906135db565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c39190612d2e565b611277565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190612cab565b61128d565b005b61060d60048036038101906106089190612ef9565b6112ef565b005b34801561061b57600080fd5b5061063660048036038101906106319190612ecc565b6113e2565b60405161064391906135db565b60405180910390f35b34801561065857600080fd5b5061066161141c565b60405161066e91906135db565b60405180910390f35b34801561068357600080fd5b5061068c61143c565b60405161069991906135db565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c49190612c18565b61145c565b6040516106d691906134f9565b60405180910390f35b3480156106eb57600080fd5b5061070660048036038101906107019190612beb565b61155e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061077b575061077a82611707565b5b9050919050565b60606000805461079190613b82565b80601f01602080910402602001604051908101604052809291908181526020018280546107bd90613b82565b801561080a5780601f106107df5761010080835404028352916020019161080a565b820191906000526020600020905b8154815290600101906020018083116107ed57829003601f168201915b5050505050905090565b600061081f826117e9565b61085e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108559061379d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108a482610f2b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090c9061381d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610934611855565b73ffffffffffffffffffffffffffffffffffffffff16148061096357506109628161095d611855565b61145c565b5b6109a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109999061371d565b60405180910390fd5b6109ac8383611864565b505050565b606060006040518060600160405280600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152509050610a34878287878761191d565b610a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6a906137fd565b60405180910390fd5b610ac66001600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a2690919063ffffffff16565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b873388604051610b3c9392919061346f565b60405180910390a16000803073ffffffffffffffffffffffffffffffffffffffff16888a604051602001610b719291906133d1565b604051602081830303815290604052604051610b8d91906133ba565b6000604051808303816000865af19150503d8060008114610bca576040519150601f19603f3d011682016040523d82523d6000602084013e610bcf565b606091505b509150915081610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b9061365d565b60405180910390fd5b80935050505095945050505050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6000600880549050905090565b6000600b54905090565b610c84610c7e611855565b82611a3c565b610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba9061385d565b60405180910390fd5b610cce838383611b1a565b505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610d2783610fdd565b8210610d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5f906135fd565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000804690508091505090565b610dd6611855565b73ffffffffffffffffffffffffffffffffffffffff16610df46111bb565b73ffffffffffffffffffffffffffffffffffffffff1614610e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e41906137bd565b60405180910390fd5b610e526111bb565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e97573d6000803e3d6000fd5b50565b610eb58383836040518060200160405280600081525061128d565b505050565b6000610ec4610c5c565b8210610f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efc9061387d565b60405180910390fd5b60088281548110610f1957610f18613d49565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb9061375d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561104e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110459061373d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61109d611855565b73ffffffffffffffffffffffffffffffffffffffff166110bb6111bb565b73ffffffffffffffffffffffffffffffffffffffff1614611111576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611108906137bd565b60405180910390fd5b61111b6000611d76565b565b611125611855565b73ffffffffffffffffffffffffffffffffffffffff166111436111bb565b73ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611190906137bd565b60405180910390fd5b60006111a3611e3c565b90506111af8282611e59565b6111b7612027565b5050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546111f490613b82565b80601f016020809104026020016040519081016040528092919081815260200182805461122090613b82565b801561126d5780601f106112425761010080835404028352916020019161126d565b820191906000526020600020905b81548152906001019060200180831161125057829003601f168201915b5050505050905090565b611289611282611855565b8383612041565b5050565b61129e611298611855565b83611a3c565b6112dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d49061385d565b60405180910390fd5b6112e9848484846121ae565b50505050565b60006112f9610c5c565b9050612711838261130a919061397c565b1061134a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113419061383d565b60405180910390fd5b82668e1bc9bf04000061135d9190613a03565b34101561139f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113969061389d565b60405180910390fd5b60005b838110156113dc5760006113b4611e3c565b90506113c08482611e59565b6113c8612027565b5080806113d490613be5565b9150506113a2565b50505050565b60606113ec61141c565b6113f58361220a565b6040516020016114069291906133f9565b6040516020818303038152906040529050919050565b60606040518060600160405280603081526020016144e460309139905090565b60606040518060600160405280603d81526020016144a7603d9139905090565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016114d49190613454565b60206040518083038186803b1580156114ec57600080fd5b505afa158015611500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115249190612e9f565b73ffffffffffffffffffffffffffffffffffffffff16141561154a576001915050611558565b611554848461236b565b9150505b92915050565b611566611855565b73ffffffffffffffffffffffffffffffffffffffff166115846111bb565b73ffffffffffffffffffffffffffffffffffffffff16146115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d1906137bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561164a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116419061363d565b60405180910390fd5b61165381611d76565b50565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561170057600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050611704565b3390505b90565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806117d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806117e257506117e1826123ff565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600061185f611656565b905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166118d783610f2b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561198e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611985906136fd565b60405180910390fd5b60016119a161199c87612469565b6124d1565b838686604051600081526020016040526040516119c19493929190613574565b6020604051602081039080840390855afa1580156119e3573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b60008183611a34919061397c565b905092915050565b6000611a47826117e9565b611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d906136dd565b60405180910390fd5b6000611a9183610f2b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b0057508373ffffffffffffffffffffffffffffffffffffffff16611ae884610814565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b115750611b10818561145c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b3a82610f2b565b73ffffffffffffffffffffffffffffffffffffffff1614611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b87906137dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf79061369d565b60405180910390fd5b611c0b83838361250a565b611c16600082611864565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c669190613a5d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cbd919061397c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611e546001600f54611a2690919063ffffffff16565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec09061377d565b60405180910390fd5b611ed2816117e9565b15611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f099061367d565b60405180910390fd5b611f1e6000838361250a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f6e919061397c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600f600081548092919061203a90613be5565b9190505550565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a7906136bd565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121a191906134f9565b60405180910390a3505050565b6121b9848484611b1a565b6121c58484848461261e565b612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb9061361d565b60405180910390fd5b50505050565b60606000821415612252576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612366565b600082905060005b6000821461228457808061226d90613be5565b915050600a8261227d91906139d2565b915061225a565b60008167ffffffffffffffff8111156122a05761229f613d78565b5b6040519080825280601f01601f1916602001820160405280156122d25781602001600182028036833780820191505090505b5090505b6000851461235f576001826122eb9190613a5d565b9150600a856122fa9190613c5c565b6030612306919061397c565b60f81b81838151811061231c5761231b613d49565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561235891906139d2565b94506122d6565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006040518060800160405280604381526020016144646043913980519060200120826000015183602001518460400151805190602001206040516020016124b4949392919061352f565b604051602081830303815290604052805190602001209050919050565b60006124db610c69565b826040516020016124ed92919061341d565b604051602081830303815290604052805190602001209050919050565b6125158383836127b5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561255857612553816127ba565b612597565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612596576125958382612803565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125da576125d581612970565b612619565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612618576126178282612a41565b5b5b505050565b600061263f8473ffffffffffffffffffffffffffffffffffffffff16612ac0565b156127a8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612668611855565b8786866040518563ffffffff1660e01b815260040161268a94939291906134ad565b602060405180830381600087803b1580156126a457600080fd5b505af19250505080156126d557506040513d601f19601f820116820180604052508101906126d29190612e72565b60015b612758573d8060008114612705576040519150601f19603f3d011682016040523d82523d6000602084013e61270a565b606091505b50600081511415612750576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127479061361d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127ad565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161281084610fdd565b61281a9190613a5d565b90506000600760008481526020019081526020016000205490508181146128ff576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129849190613a5d565b90506000600960008481526020019081526020016000205490506000600883815481106129b4576129b3613d49565b5b9060005260206000200154905080600883815481106129d6576129d5613d49565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612a2557612a24613d1a565b5b6001900381819060005260206000200160009055905550505050565b6000612a4c83610fdd565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b6000612ae6612ae1846138fd565b6138d8565b905082815260208101848484011115612b0257612b01613dac565b5b612b0d848285613b40565b509392505050565b600081359050612b24816143c2565b92915050565b600081359050612b39816143d9565b92915050565b600081359050612b4e816143f0565b92915050565b600081359050612b6381614407565b92915050565b600081519050612b7881614407565b92915050565b600082601f830112612b9357612b92613da7565b5b8135612ba3848260208601612ad3565b91505092915050565b600081519050612bbb8161441e565b92915050565b600081359050612bd081614435565b92915050565b600081359050612be58161444c565b92915050565b600060208284031215612c0157612c00613db6565b5b6000612c0f84828501612b15565b91505092915050565b60008060408385031215612c2f57612c2e613db6565b5b6000612c3d85828601612b15565b9250506020612c4e85828601612b15565b9150509250929050565b600080600060608486031215612c7157612c70613db6565b5b6000612c7f86828701612b15565b9350506020612c9086828701612b15565b9250506040612ca186828701612bc1565b9150509250925092565b60008060008060808587031215612cc557612cc4613db6565b5b6000612cd387828801612b15565b9450506020612ce487828801612b15565b9350506040612cf587828801612bc1565b925050606085013567ffffffffffffffff811115612d1657612d15613db1565b5b612d2287828801612b7e565b91505092959194509250565b60008060408385031215612d4557612d44613db6565b5b6000612d5385828601612b15565b9250506020612d6485828601612b2a565b9150509250929050565b600080600080600060a08688031215612d8a57612d89613db6565b5b6000612d9888828901612b15565b955050602086013567ffffffffffffffff811115612db957612db8613db1565b5b612dc588828901612b7e565b9450506040612dd688828901612b3f565b9350506060612de788828901612b3f565b9250506080612df888828901612bd6565b9150509295509295909350565b60008060408385031215612e1c57612e1b613db6565b5b6000612e2a85828601612b15565b9250506020612e3b85828601612bc1565b9150509250929050565b600060208284031215612e5b57612e5a613db6565b5b6000612e6984828501612b54565b91505092915050565b600060208284031215612e8857612e87613db6565b5b6000612e9684828501612b69565b91505092915050565b600060208284031215612eb557612eb4613db6565b5b6000612ec384828501612bac565b91505092915050565b600060208284031215612ee257612ee1613db6565b5b6000612ef084828501612bc1565b91505092915050565b60008060408385031215612f1057612f0f613db6565b5b6000612f1e85828601612bc1565b9250506020612f2f85828601612b15565b9150509250929050565b612f4281613aa3565b82525050565b612f5181613a91565b82525050565b612f68612f6382613a91565b613c2e565b82525050565b612f7781613ab5565b82525050565b612f8681613ac1565b82525050565b612f9d612f9882613ac1565b613c40565b82525050565b6000612fae8261392e565b612fb88185613944565b9350612fc8818560208601613b4f565b612fd181613dbb565b840191505092915050565b6000612fe78261392e565b612ff18185613955565b9350613001818560208601613b4f565b80840191505092915050565b600061301882613939565b6130228185613960565b9350613032818560208601613b4f565b61303b81613dbb565b840191505092915050565b600061305182613939565b61305b8185613971565b935061306b818560208601613b4f565b80840191505092915050565b6000613084602b83613960565b915061308f82613dd9565b604082019050919050565b60006130a7603283613960565b91506130b282613e28565b604082019050919050565b60006130ca602683613960565b91506130d582613e77565b604082019050919050565b60006130ed601c83613960565b91506130f882613ec6565b602082019050919050565b6000613110601c83613960565b915061311b82613eef565b602082019050919050565b6000613133600283613971565b915061313e82613f18565b600282019050919050565b6000613156602483613960565b915061316182613f41565b604082019050919050565b6000613179601983613960565b915061318482613f90565b602082019050919050565b600061319c602c83613960565b91506131a782613fb9565b604082019050919050565b60006131bf602583613960565b91506131ca82614008565b604082019050919050565b60006131e2603883613960565b91506131ed82614057565b604082019050919050565b6000613205602a83613960565b9150613210826140a6565b604082019050919050565b6000613228602983613960565b9150613233826140f5565b604082019050919050565b600061324b602083613960565b915061325682614144565b602082019050919050565b600061326e602c83613960565b91506132798261416d565b604082019050919050565b6000613291602083613960565b915061329c826141bc565b602082019050919050565b60006132b4602983613960565b91506132bf826141e5565b604082019050919050565b60006132d7602183613960565b91506132e282614234565b604082019050919050565b60006132fa602183613960565b915061330582614283565b604082019050919050565b600061331d601683613960565b9150613328826142d2565b602082019050919050565b6000613340603183613960565b915061334b826142fb565b604082019050919050565b6000613363602c83613960565b915061336e8261434a565b604082019050919050565b6000613386602083613960565b915061339182614399565b602082019050919050565b6133a581613b29565b82525050565b6133b481613b33565b82525050565b60006133c68284612fdc565b915081905092915050565b60006133dd8285612fdc565b91506133e98284612f57565b6014820191508190509392505050565b60006134058285613046565b91506134118284613046565b91508190509392505050565b600061342882613126565b91506134348285612f8c565b6020820191506134448284612f8c565b6020820191508190509392505050565b60006020820190506134696000830184612f48565b92915050565b60006060820190506134846000830186612f48565b6134916020830185612f39565b81810360408301526134a38184612fa3565b9050949350505050565b60006080820190506134c26000830187612f48565b6134cf6020830186612f48565b6134dc604083018561339c565b81810360608301526134ee8184612fa3565b905095945050505050565b600060208201905061350e6000830184612f6e565b92915050565b60006020820190506135296000830184612f7d565b92915050565b60006080820190506135446000830187612f7d565b613551602083018661339c565b61355e6040830185612f48565b61356b6060830184612f7d565b95945050505050565b60006080820190506135896000830187612f7d565b61359660208301866133ab565b6135a36040830185612f7d565b6135b06060830184612f7d565b95945050505050565b600060208201905081810360008301526135d38184612fa3565b905092915050565b600060208201905081810360008301526135f5818461300d565b905092915050565b6000602082019050818103600083015261361681613077565b9050919050565b600060208201905081810360008301526136368161309a565b9050919050565b60006020820190508181036000830152613656816130bd565b9050919050565b60006020820190508181036000830152613676816130e0565b9050919050565b6000602082019050818103600083015261369681613103565b9050919050565b600060208201905081810360008301526136b681613149565b9050919050565b600060208201905081810360008301526136d68161316c565b9050919050565b600060208201905081810360008301526136f68161318f565b9050919050565b60006020820190508181036000830152613716816131b2565b9050919050565b60006020820190508181036000830152613736816131d5565b9050919050565b60006020820190508181036000830152613756816131f8565b9050919050565b600060208201905081810360008301526137768161321b565b9050919050565b600060208201905081810360008301526137968161323e565b9050919050565b600060208201905081810360008301526137b681613261565b9050919050565b600060208201905081810360008301526137d681613284565b9050919050565b600060208201905081810360008301526137f6816132a7565b9050919050565b60006020820190508181036000830152613816816132ca565b9050919050565b60006020820190508181036000830152613836816132ed565b9050919050565b6000602082019050818103600083015261385681613310565b9050919050565b6000602082019050818103600083015261387681613333565b9050919050565b6000602082019050818103600083015261389681613356565b9050919050565b600060208201905081810360008301526138b681613379565b9050919050565b60006020820190506138d2600083018461339c565b92915050565b60006138e26138f3565b90506138ee8282613bb4565b919050565b6000604051905090565b600067ffffffffffffffff82111561391857613917613d78565b5b61392182613dbb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061398782613b29565b915061399283613b29565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139c7576139c6613c8d565b5b828201905092915050565b60006139dd82613b29565b91506139e883613b29565b9250826139f8576139f7613cbc565b5b828204905092915050565b6000613a0e82613b29565b9150613a1983613b29565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a5257613a51613c8d565b5b828202905092915050565b6000613a6882613b29565b9150613a7383613b29565b925082821015613a8657613a85613c8d565b5b828203905092915050565b6000613a9c82613b09565b9050919050565b6000613aae82613b09565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613b0282613a91565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613b6d578082015181840152602081019050613b52565b83811115613b7c576000848401525b50505050565b60006002820490506001821680613b9a57607f821691505b60208210811415613bae57613bad613ceb565b5b50919050565b613bbd82613dbb565b810181811067ffffffffffffffff82111715613bdc57613bdb613d78565b5b80604052505050565b6000613bf082613b29565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c2357613c22613c8d565b5b600182019050919050565b6000613c3982613c4a565b9050919050565b6000819050919050565b6000613c5582613dcc565b9050919050565b6000613c6782613b29565b9150613c7283613b29565b925082613c8257613c81613cbc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360008201527f49474e4552000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204554482073656e742c20636865636b207072696365600082015250565b6143cb81613a91565b81146143d657600080fd5b50565b6143e281613ab5565b81146143ed57600080fd5b50565b6143f981613ac1565b811461440457600080fd5b50565b61441081613acb565b811461441b57600080fd5b50565b61442781613af7565b811461443257600080fd5b50565b61443e81613b29565b811461444957600080fd5b50565b61445581613b33565b811461446057600080fd5b5056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e61747572652968747470733a2f2f6368617470756e6b732e61707073706f742e636f6d2f6170692f6368617470756e6b732d636f6e74726163742d6d6574616461746168747470733a2f2f6368617470756e6b732e61707073706f742e636f6d2f6170692f6368617470756e6b732d6e66742fa26469706673582212205b3313e5f31943a8cfb99276d5faaa7a0cc143c4001f20169bb1e77344c3e6c164736f6c63430008070033

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

000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1

-----Decoded View---------------
Arg [0] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1


Deployed Bytecode Sourcemap

29784:1075:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25091:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18257:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19340:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18921:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5643:1000;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;528:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25587:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1345:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19904:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7069:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25323:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1454:161;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30752:104;;;;;;;;;;;;;:::i;:::-;;20198:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25708:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18010:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17794:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10004:103;;;;;;;;;;;;;:::i;:::-;;28572:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9781:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18365:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19569:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20391:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30262:482;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29019:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29953:145;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30106:148;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29202:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10115:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25091:224;25193:4;25232:35;25217:50;;;:11;:50;;;;:90;;;;25271:36;25295:11;25271:23;:36::i;:::-;25217:90;25210:97;;25091:224;;;:::o;18257:100::-;18311:13;18344:5;18337:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18257:100;:::o;19340:221::-;19416:7;19444:16;19452:7;19444;:16::i;:::-;19436:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19529:15;:24;19545:7;19529:24;;;;;;;;;;;;;;;;;;;;;19522:31;;19340:221;;;:::o;18921:411::-;19002:13;19018:23;19033:7;19018:14;:23::i;:::-;19002:39;;19066:5;19060:11;;:2;:11;;;;19052:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;19160:5;19144:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;19169:37;19186:5;19193:12;:10;:12::i;:::-;19169:16;:37::i;:::-;19144:62;19122:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;19303:21;19312:2;19316:7;19303:8;:21::i;:::-;18991:341;18921:411;;:::o;5643:1000::-;5844:12;5869:29;5901:152;;;;;;;;5939:6;:19;5946:11;5939:19;;;;;;;;;;;;;;;;5901:152;;;;5979:11;5901:152;;;;;;6024:17;5901:152;;;5869:184;;6088:45;6095:11;6108:6;6116:4;6122;6128;6088:6;:45::i;:::-;6066:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;6229:26;6253:1;6229:6;:19;6236:11;6229:19;;;;;;;;;;;;;;;;:23;;:26;;;;:::i;:::-;6207:6;:19;6214:11;6207:19;;;;;;;;;;;;;;;:48;;;;6273:126;6311:11;6345:10;6371:17;6273:126;;;;;;;;:::i;:::-;;;;;;;;6413:12;6427:23;6462:4;6454:18;;6504:17;6523:11;6487:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6454:92;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6412:134;;;;6565:7;6557:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;6625:10;6618:17;;;;;5643:1000;;;;;;;:::o;528:43::-;;;;;;;;;;;;;;;;;;;:::o;25587:113::-;25648:7;25675:10;:17;;;;25668:24;;25587:113;:::o;1345:101::-;1396:7;1423:15;;1416:22;;1345:101;:::o;19904:286::-;20046:41;20065:12;:10;:12::i;:::-;20079:7;20046:18;:41::i;:::-;20038:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;20154:28;20164:4;20170:2;20174:7;20154:9;:28::i;:::-;19904:286;;;:::o;7069:107::-;7122:13;7156:6;:12;7163:4;7156:12;;;;;;;;;;;;;;;;7148:20;;7069:107;;;:::o;25323:256::-;25420:7;25456:23;25473:5;25456:16;:23::i;:::-;25448:5;:31;25440:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;25545:12;:19;25558:5;25545:19;;;;;;;;;;;;;;;:26;25565:5;25545:26;;;;;;;;;;;;25538:33;;25323:256;;;;:::o;1454:161::-;1497:7;1517:10;1568:9;1562:15;;1605:2;1598:9;;;1454:161;:::o;30752:104::-;9927:12;:10;:12::i;:::-;9916:23;;:7;:5;:7::i;:::-;:23;;;9908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30808:7:::1;:5;:7::i;:::-;30800:25;;:48;30826:21;30800:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30752:104::o:0;20198:185::-;20336:39;20353:4;20359:2;20363:7;20336:39;;;;;;;;;;;;:16;:39::i;:::-;20198:185;;;:::o;25708:233::-;25783:7;25819:30;:28;:30::i;:::-;25811:5;:38;25803:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;25916:10;25927:5;25916:17;;;;;;;;:::i;:::-;;;;;;;;;;25909:24;;25708:233;;;:::o;18010:239::-;18082:7;18102:13;18118:7;:16;18126:7;18118:16;;;;;;;;;;;;;;;;;;;;;18102:32;;18170:1;18153:19;;:5;:19;;;;18145:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18236:5;18229:12;;;18010:239;;;:::o;17794:208::-;17866:7;17911:1;17894:19;;:5;:19;;;;17886:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;17978:9;:16;17988:5;17978:16;;;;;;;;;;;;;;;;17971:23;;17794:208;;;:::o;10004:103::-;9927:12;:10;:12::i;:::-;9916:23;;:7;:5;:7::i;:::-;:23;;;9908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10069:30:::1;10096:1;10069:18;:30::i;:::-;10004:103::o:0;28572:166::-;9927:12;:10;:12::i;:::-;9916:23;;:7;:5;:7::i;:::-;:23;;;9908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28629:18:::1;28650:17;:15;:17::i;:::-;28629:38;;28678:22;28684:3;28689:10;28678:5;:22::i;:::-;28711:19;:17;:19::i;:::-;28618:120;28572:166:::0;:::o;9781:87::-;9827:7;9854:6;;;;;;;;;;;9847:13;;9781:87;:::o;18365:104::-;18421:13;18454:7;18447:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18365:104;:::o;19569:155::-;19664:52;19683:12;:10;:12::i;:::-;19697:8;19707;19664:18;:52::i;:::-;19569:155;;:::o;20391:328::-;20566:41;20585:12;:10;:12::i;:::-;20599:7;20566:18;:41::i;:::-;20558:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;20672:39;20686:4;20692:2;20696:7;20705:5;20672:13;:39::i;:::-;20391:328;;;;:::o;30262:482::-;30346:14;30363:13;:11;:13::i;:::-;30346:30;;30418:5;30406:9;30397:6;:18;;;;:::i;:::-;:26;30389:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30495:9;30482:10;:22;;;;:::i;:::-;30469:9;:35;;30461:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;30559:9;30554:183;30578:9;30574:1;:13;30554:183;;;30609:18;30630:17;:15;:17::i;:::-;30609:38;;30662:29;30668:10;30680;30662:5;:29::i;:::-;30706:19;:17;:19::i;:::-;30594:143;30589:3;;;;;:::i;:::-;;;;30554:183;;;;30335:409;30262:482;;:::o;29019:175::-;29085:13;29142:14;:12;:14::i;:::-;29158:26;29175:8;29158:16;:26::i;:::-;29125:60;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29111:75;;29019:175;;;:::o;29953:145::-;30007:13;30033:57;;;;;;;;;;;;;;;;;;;29953:145;:::o;30106:148::-;30150:13;30176:70;;;;;;;;;;;;;;;;;;;30106:148;:::o;29202:382::-;29327:4;29349:27;29393:20;;;;;;;;;;;29349:65;;29470:8;29429:49;;29437:13;:21;;;29459:5;29437:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29429:49;;;29425:93;;;29502:4;29495:11;;;;;29425:93;29537:39;29560:5;29567:8;29537:22;:39::i;:::-;29530:46;;;29202:382;;;;;:::o;10115:201::-;9927:12;:10;:12::i;:::-;9916:23;;:7;:5;:7::i;:::-;:23;;;9908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10224:1:::1;10204:22;;:8;:22;;;;10196:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10280:28;10299:8;10280:18;:28::i;:::-;10115:201:::0;:::o;1976:539::-;2047:22;2113:4;2091:27;;:10;:27;;;2087:397;;;2135:18;2156:8;;2135:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2179:13;2195:8;;:15;;2179:31;;2336:42;2306:5;2299;2295:17;2289:24;2263:134;2253:144;;2234:178;;2087:397;;;2461:10;2444:28;;2087:397;1976:539;:::o;17481:305::-;17583:4;17635:25;17620:40;;;:11;:40;;;;:105;;;;17692:33;17677:48;;;:11;:48;;;;17620:105;:158;;;;17742:36;17766:11;17742:23;:36::i;:::-;17620:158;17600:178;;17481:305;;;:::o;21050:127::-;21115:4;21167:1;21139:30;;:7;:16;21147:7;21139:16;;;;;;;;;;;;;;;;;;;;;:30;;;;21132:37;;21050:127;;;:::o;29592:161::-;29682:14;29721:24;:22;:24::i;:::-;29714:31;;29592:161;:::o;23252:174::-;23354:2;23327:15;:24;23343:7;23327:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;23410:7;23406:2;23372:46;;23381:23;23396:7;23381:14;:23::i;:::-;23372:46;;;;;;;;;;;;23252:174;;:::o;7184:486::-;7362:4;7405:1;7387:20;;:6;:20;;;;7379:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7503:159;7531:47;7550:27;7570:6;7550:19;:27::i;:::-;7531:18;:47::i;:::-;7597:4;7620;7643;7503:159;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7480:182;;:6;:182;;;7460:202;;7184:486;;;;;;;:::o;3728:98::-;3786:7;3817:1;3813;:5;;;;:::i;:::-;3806:12;;3728:98;;;;:::o;21185:348::-;21278:4;21303:16;21311:7;21303;:16::i;:::-;21295:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21379:13;21395:23;21410:7;21395:14;:23::i;:::-;21379:39;;21448:5;21437:16;;:7;:16;;;:51;;;;21481:7;21457:31;;:20;21469:7;21457:11;:20::i;:::-;:31;;;21437:51;:87;;;;21492:32;21509:5;21516:7;21492:16;:32::i;:::-;21437:87;21429:96;;;21185:348;;;;:::o;22718:526::-;22877:4;22850:31;;:23;22865:7;22850:14;:23::i;:::-;:31;;;22842:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;22960:1;22946:16;;:2;:16;;;;22938:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23016:39;23037:4;23043:2;23047:7;23016:20;:39::i;:::-;23068:29;23085:1;23089:7;23068:8;:29::i;:::-;23129:1;23110:9;:15;23120:4;23110:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;23158:1;23141:9;:13;23151:2;23141:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;23189:2;23170:7;:16;23178:7;23170:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;23228:7;23224:2;23209:27;;23218:4;23209:27;;;;;;;;;;;;22718:526;;;:::o;10324:191::-;10398:16;10417:6;;;;;;;;;;;10398:25;;10443:8;10434:6;;:17;;;;;;;;;;;;;;;;;;10498:8;10467:40;;10488:8;10467:40;;;;;;;;;;;;10387:128;10324:191;:::o;28746:107::-;28796:7;28823:22;28843:1;28823:15;;:19;;:22;;;;:::i;:::-;28816:29;;28746:107;:::o;21988:382::-;22082:1;22068:16;;:2;:16;;;;22060:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22141:16;22149:7;22141;:16::i;:::-;22140:17;22132:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;22203:45;22232:1;22236:2;22240:7;22203:20;:45::i;:::-;22278:1;22261:9;:13;22271:2;22261:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;22309:2;22290:7;:16;22298:7;22290:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;22354:7;22350:2;22329:33;;22346:1;22329:33;;;;;;;;;;;;21988:382;;:::o;28861:74::-;28910:15;;:17;;;;;;;;;:::i;:::-;;;;;;28861:74::o;23434:315::-;23589:8;23580:17;;:5;:17;;;;23572:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;23676:8;23638:18;:25;23657:5;23638:25;;;;;;;;;;;;;;;:35;23664:8;23638:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23722:8;23700:41;;23715:5;23700:41;;;23732:8;23700:41;;;;;;:::i;:::-;;;;;;;;23434:315;;;:::o;20727:::-;20884:28;20894:4;20900:2;20904:7;20884:9;:28::i;:::-;20931:48;20954:4;20960:2;20964:7;20973:5;20931:22;:48::i;:::-;20923:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;20727:315;;;;:::o;7827:532::-;7883:13;7922:1;7913:5;:10;7909:53;;;7940:10;;;;;;;;;;;;;;;;;;;;;7909:53;7972:12;7987:5;7972:20;;8003:14;8028:78;8043:1;8035:4;:9;8028:78;;8061:8;;;;;:::i;:::-;;;;8092:2;8084:10;;;;;:::i;:::-;;;8028:78;;;8116:19;8148:6;8138:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8116:39;;8166:154;8182:1;8173:5;:10;8166:154;;8210:1;8200:11;;;;;:::i;:::-;;;8277:2;8269:5;:10;;;;:::i;:::-;8256:2;:24;;;;:::i;:::-;8243:39;;8226:6;8233;8226:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8306:2;8297:11;;;;;:::i;:::-;;;8166:154;;;8344:6;8330:21;;;;;7827:532;;;;:::o;19732:164::-;19829:4;19853:18;:25;19872:5;19853:25;;;;;;;;;;;;;;;:35;19879:8;19853:35;;;;;;;;;;;;;;;;;;;;;;;;;19846:42;;19732:164;;;;:::o;14717:157::-;14802:4;14841:25;14826:40;;;:11;:40;;;;14819:47;;14717:157;;;:::o;6651:410::-;6761:7;5218:100;;;;;;;;;;;;;;;;;5198:127;;;;;;6915:6;:12;;;6950:6;:11;;;6994:6;:24;;;6984:35;;;;;;6834:204;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6806:247;;;;;;6786:267;;6651:410;;;:::o;1623:258::-;1722:7;1824:20;:18;:20::i;:::-;1846:11;1795:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1767:106;;;;;;1747:126;;1623:258;;;:::o;25949:589::-;26093:45;26120:4;26126:2;26130:7;26093:26;:45::i;:::-;26171:1;26155:18;;:4;:18;;;26151:187;;;26190:40;26222:7;26190:31;:40::i;:::-;26151:187;;;26260:2;26252:10;;:4;:10;;;26248:90;;26279:47;26312:4;26318:7;26279:32;:47::i;:::-;26248:90;26151:187;26366:1;26352:16;;:2;:16;;;26348:183;;;26385:45;26422:7;26385:36;:45::i;:::-;26348:183;;;26458:4;26452:10;;:2;:10;;;26448:83;;26479:40;26507:2;26511:7;26479:27;:40::i;:::-;26448:83;26348:183;25949:589;;;:::o;23757:799::-;23912:4;23933:15;:2;:13;;;:15::i;:::-;23929:620;;;23985:2;23969:36;;;24006:12;:10;:12::i;:::-;24020:4;24026:7;24035:5;23969:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;23965:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24228:1;24211:6;:13;:18;24207:272;;;24254:60;;;;;;;;;;:::i;:::-;;;;;;;;24207:272;24429:6;24423:13;24414:6;24410:2;24406:15;24399:38;23965:529;24102:41;;;24092:51;;;:6;:51;;;;24085:58;;;;;23929:620;24533:4;24526:11;;23757:799;;;;;;;:::o;24564:126::-;;;;:::o;26775:164::-;26879:10;:17;;;;26852:15;:24;26868:7;26852:24;;;;;;;;;;;:44;;;;26907:10;26923:7;26907:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26775:164;:::o;26947:557::-;27039:22;27089:1;27064:22;27081:4;27064:16;:22::i;:::-;:26;;;;:::i;:::-;27039:51;;27101:18;27122:17;:26;27140:7;27122:26;;;;;;;;;;;;27101:47;;27179:14;27165:10;:28;27161:238;;27210:19;27232:12;:18;27245:4;27232:18;;;;;;;;;;;;;;;:34;27251:14;27232:34;;;;;;;;;;;;27210:56;;27316:11;27283:12;:18;27296:4;27283:18;;;;;;;;;;;;;;;:30;27302:10;27283:30;;;;;;;;;;;:44;;;;27376:10;27343:17;:30;27361:11;27343:30;;;;;;;;;;;:43;;;;27195:204;27161:238;27418:17;:26;27436:7;27418:26;;;;;;;;;;;27411:33;;;27462:12;:18;27475:4;27462:18;;;;;;;;;;;;;;;:34;27481:14;27462:34;;;;;;;;;;;27455:41;;;27028:476;;26947:557;;:::o;27512:425::-;27594:22;27639:1;27619:10;:17;;;;:21;;;;:::i;:::-;27594:46;;27651:18;27672:15;:24;27688:7;27672:24;;;;;;;;;;;;27651:45;;27709:19;27731:10;27742:14;27731:26;;;;;;;;:::i;:::-;;;;;;;;;;27709:48;;27795:11;27770:10;27781;27770:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;27848:10;27817:15;:28;27833:11;27817:28;;;;;;;;;;;:41;;;;27878:15;:24;27894:7;27878:24;;;;;;;;;;;27871:31;;;27913:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27583:354;;;27512:425;:::o;26546:221::-;26631:14;26648:20;26665:2;26648:16;:20::i;:::-;26631:37;;26706:7;26679:12;:16;26692:2;26679:16;;;;;;;;;;;;;;;:24;26696:6;26679:24;;;;;;;;;;;:34;;;;26753:6;26724:17;:26;26742:7;26724:26;;;;;;;;;;;:35;;;;26620:147;26546:221;;:::o;10605:198::-;10665:4;10684:12;10751:7;10739:20;10731:28;;10794:1;10787:4;:8;10780:15;;;10605:198;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;707:139;;;;:::o;852:137::-;897:5;935:6;922:20;913:29;;951:32;977:5;951:32;:::i;:::-;852:137;;;;:::o;995:141::-;1051:5;1082:6;1076:13;1067:22;;1098:32;1124:5;1098:32;:::i;:::-;995:141;;;;:::o;1155:338::-;1210:5;1259:3;1252:4;1244:6;1240:17;1236:27;1226:122;;1267:79;;:::i;:::-;1226:122;1384:6;1371:20;1409:78;1483:3;1475:6;1468:4;1460:6;1456:17;1409:78;:::i;:::-;1400:87;;1216:277;1155:338;;;;:::o;1499:201::-;1585:5;1616:6;1610:13;1601:22;;1632:62;1688:5;1632:62;:::i;:::-;1499:201;;;;:::o;1706:139::-;1752:5;1790:6;1777:20;1768:29;;1806:33;1833:5;1806:33;:::i;:::-;1706:139;;;;:::o;1851:135::-;1895:5;1933:6;1920:20;1911:29;;1949:31;1974:5;1949:31;:::i;:::-;1851:135;;;;:::o;1992:329::-;2051:6;2100:2;2088:9;2079:7;2075:23;2071:32;2068:119;;;2106:79;;:::i;:::-;2068:119;2226:1;2251:53;2296:7;2287:6;2276:9;2272:22;2251:53;:::i;:::-;2241:63;;2197:117;1992:329;;;;:::o;2327:474::-;2395:6;2403;2452:2;2440:9;2431:7;2427:23;2423:32;2420:119;;;2458:79;;:::i;:::-;2420:119;2578:1;2603:53;2648:7;2639:6;2628:9;2624:22;2603:53;:::i;:::-;2593:63;;2549:117;2705:2;2731:53;2776:7;2767:6;2756:9;2752:22;2731:53;:::i;:::-;2721:63;;2676:118;2327:474;;;;;:::o;2807:619::-;2884:6;2892;2900;2949:2;2937:9;2928:7;2924:23;2920:32;2917:119;;;2955:79;;:::i;:::-;2917:119;3075:1;3100:53;3145:7;3136:6;3125:9;3121:22;3100:53;:::i;:::-;3090:63;;3046:117;3202:2;3228:53;3273:7;3264:6;3253:9;3249:22;3228:53;:::i;:::-;3218:63;;3173:118;3330:2;3356:53;3401:7;3392:6;3381:9;3377:22;3356:53;:::i;:::-;3346:63;;3301:118;2807:619;;;;;:::o;3432:943::-;3527:6;3535;3543;3551;3600:3;3588:9;3579:7;3575:23;3571:33;3568:120;;;3607:79;;:::i;:::-;3568:120;3727:1;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3698:117;3854:2;3880:53;3925:7;3916:6;3905:9;3901:22;3880:53;:::i;:::-;3870:63;;3825:118;3982:2;4008:53;4053:7;4044:6;4033:9;4029:22;4008:53;:::i;:::-;3998:63;;3953:118;4138:2;4127:9;4123:18;4110:32;4169:18;4161:6;4158:30;4155:117;;;4191:79;;:::i;:::-;4155:117;4296:62;4350:7;4341:6;4330:9;4326:22;4296:62;:::i;:::-;4286:72;;4081:287;3432:943;;;;;;;:::o;4381:468::-;4446:6;4454;4503:2;4491:9;4482:7;4478:23;4474:32;4471:119;;;4509:79;;:::i;:::-;4471:119;4629:1;4654:53;4699:7;4690:6;4679:9;4675:22;4654:53;:::i;:::-;4644:63;;4600:117;4756:2;4782:50;4824:7;4815:6;4804:9;4800:22;4782:50;:::i;:::-;4772:60;;4727:115;4381:468;;;;;:::o;4855:1085::-;4957:6;4965;4973;4981;4989;5038:3;5026:9;5017:7;5013:23;5009:33;5006:120;;;5045:79;;:::i;:::-;5006:120;5165:1;5190:53;5235:7;5226:6;5215:9;5211:22;5190:53;:::i;:::-;5180:63;;5136:117;5320:2;5309:9;5305:18;5292:32;5351:18;5343:6;5340:30;5337:117;;;5373:79;;:::i;:::-;5337:117;5478:62;5532:7;5523:6;5512:9;5508:22;5478:62;:::i;:::-;5468:72;;5263:287;5589:2;5615:53;5660:7;5651:6;5640:9;5636:22;5615:53;:::i;:::-;5605:63;;5560:118;5717:2;5743:53;5788:7;5779:6;5768:9;5764:22;5743:53;:::i;:::-;5733:63;;5688:118;5845:3;5872:51;5915:7;5906:6;5895:9;5891:22;5872:51;:::i;:::-;5862:61;;5816:117;4855:1085;;;;;;;;:::o;5946:474::-;6014:6;6022;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:53;6267:7;6258:6;6247:9;6243:22;6222:53;:::i;:::-;6212:63;;6168:117;6324:2;6350:53;6395:7;6386:6;6375:9;6371:22;6350:53;:::i;:::-;6340:63;;6295:118;5946:474;;;;;:::o;6426:327::-;6484:6;6533:2;6521:9;6512:7;6508:23;6504:32;6501:119;;;6539:79;;:::i;:::-;6501:119;6659:1;6684:52;6728:7;6719:6;6708:9;6704:22;6684:52;:::i;:::-;6674:62;;6630:116;6426:327;;;;:::o;6759:349::-;6828:6;6877:2;6865:9;6856:7;6852:23;6848:32;6845:119;;;6883:79;;:::i;:::-;6845:119;7003:1;7028:63;7083:7;7074:6;7063:9;7059:22;7028:63;:::i;:::-;7018:73;;6974:127;6759:349;;;;:::o;7114:409::-;7213:6;7262:2;7250:9;7241:7;7237:23;7233:32;7230:119;;;7268:79;;:::i;:::-;7230:119;7388:1;7413:93;7498:7;7489:6;7478:9;7474:22;7413:93;:::i;:::-;7403:103;;7359:157;7114:409;;;;:::o;7529:329::-;7588:6;7637:2;7625:9;7616:7;7612:23;7608:32;7605:119;;;7643:79;;:::i;:::-;7605:119;7763:1;7788:53;7833:7;7824:6;7813:9;7809:22;7788:53;:::i;:::-;7778:63;;7734:117;7529:329;;;;:::o;7864:474::-;7932:6;7940;7989:2;7977:9;7968:7;7964:23;7960:32;7957:119;;;7995:79;;:::i;:::-;7957:119;8115:1;8140:53;8185:7;8176:6;8165:9;8161:22;8140:53;:::i;:::-;8130:63;;8086:117;8242:2;8268:53;8313:7;8304:6;8293:9;8289:22;8268:53;:::i;:::-;8258:63;;8213:118;7864:474;;;;;:::o;8344:142::-;8447:32;8473:5;8447:32;:::i;:::-;8442:3;8435:45;8344:142;;:::o;8492:118::-;8579:24;8597:5;8579:24;:::i;:::-;8574:3;8567:37;8492:118;;:::o;8616:157::-;8721:45;8741:24;8759:5;8741:24;:::i;:::-;8721:45;:::i;:::-;8716:3;8709:58;8616:157;;:::o;8779:109::-;8860:21;8875:5;8860:21;:::i;:::-;8855:3;8848:34;8779:109;;:::o;8894:118::-;8981:24;8999:5;8981:24;:::i;:::-;8976:3;8969:37;8894:118;;:::o;9018:157::-;9123:45;9143:24;9161:5;9143:24;:::i;:::-;9123:45;:::i;:::-;9118:3;9111:58;9018:157;;:::o;9181:360::-;9267:3;9295:38;9327:5;9295:38;:::i;:::-;9349:70;9412:6;9407:3;9349:70;:::i;:::-;9342:77;;9428:52;9473:6;9468:3;9461:4;9454:5;9450:16;9428:52;:::i;:::-;9505:29;9527:6;9505:29;:::i;:::-;9500:3;9496:39;9489:46;;9271:270;9181:360;;;;:::o;9547:373::-;9651:3;9679:38;9711:5;9679:38;:::i;:::-;9733:88;9814:6;9809:3;9733:88;:::i;:::-;9726:95;;9830:52;9875:6;9870:3;9863:4;9856:5;9852:16;9830:52;:::i;:::-;9907:6;9902:3;9898:16;9891:23;;9655:265;9547:373;;;;:::o;9926:364::-;10014:3;10042:39;10075:5;10042:39;:::i;:::-;10097:71;10161:6;10156:3;10097:71;:::i;:::-;10090:78;;10177:52;10222:6;10217:3;10210:4;10203:5;10199:16;10177:52;:::i;:::-;10254:29;10276:6;10254:29;:::i;:::-;10249:3;10245:39;10238:46;;10018:272;9926:364;;;;:::o;10296:377::-;10402:3;10430:39;10463:5;10430:39;:::i;:::-;10485:89;10567:6;10562:3;10485:89;:::i;:::-;10478:96;;10583:52;10628:6;10623:3;10616:4;10609:5;10605:16;10583:52;:::i;:::-;10660:6;10655:3;10651:16;10644:23;;10406:267;10296:377;;;;:::o;10679:366::-;10821:3;10842:67;10906:2;10901:3;10842:67;:::i;:::-;10835:74;;10918:93;11007:3;10918:93;:::i;:::-;11036:2;11031:3;11027:12;11020:19;;10679:366;;;:::o;11051:::-;11193:3;11214:67;11278:2;11273:3;11214:67;:::i;:::-;11207:74;;11290:93;11379:3;11290:93;:::i;:::-;11408:2;11403:3;11399:12;11392:19;;11051:366;;;:::o;11423:::-;11565:3;11586:67;11650:2;11645:3;11586:67;:::i;:::-;11579:74;;11662:93;11751:3;11662:93;:::i;:::-;11780:2;11775:3;11771:12;11764:19;;11423:366;;;:::o;11795:::-;11937:3;11958:67;12022:2;12017:3;11958:67;:::i;:::-;11951:74;;12034:93;12123:3;12034:93;:::i;:::-;12152:2;12147:3;12143:12;12136:19;;11795:366;;;:::o;12167:::-;12309:3;12330:67;12394:2;12389:3;12330:67;:::i;:::-;12323:74;;12406:93;12495:3;12406:93;:::i;:::-;12524:2;12519:3;12515:12;12508:19;;12167:366;;;:::o;12539:400::-;12699:3;12720:84;12802:1;12797:3;12720:84;:::i;:::-;12713:91;;12813:93;12902:3;12813:93;:::i;:::-;12931:1;12926:3;12922:11;12915:18;;12539:400;;;:::o;12945:366::-;13087:3;13108:67;13172:2;13167:3;13108:67;:::i;:::-;13101:74;;13184:93;13273:3;13184:93;:::i;:::-;13302:2;13297:3;13293:12;13286:19;;12945:366;;;:::o;13317:::-;13459:3;13480:67;13544:2;13539:3;13480:67;:::i;:::-;13473:74;;13556:93;13645:3;13556:93;:::i;:::-;13674:2;13669:3;13665:12;13658:19;;13317:366;;;:::o;13689:::-;13831:3;13852:67;13916:2;13911:3;13852:67;:::i;:::-;13845:74;;13928:93;14017:3;13928:93;:::i;:::-;14046:2;14041:3;14037:12;14030:19;;13689:366;;;:::o;14061:::-;14203:3;14224:67;14288:2;14283:3;14224:67;:::i;:::-;14217:74;;14300:93;14389:3;14300:93;:::i;:::-;14418:2;14413:3;14409:12;14402:19;;14061:366;;;:::o;14433:::-;14575:3;14596:67;14660:2;14655:3;14596:67;:::i;:::-;14589:74;;14672:93;14761:3;14672:93;:::i;:::-;14790:2;14785:3;14781:12;14774:19;;14433:366;;;:::o;14805:::-;14947:3;14968:67;15032:2;15027:3;14968:67;:::i;:::-;14961:74;;15044:93;15133:3;15044:93;:::i;:::-;15162:2;15157:3;15153:12;15146:19;;14805:366;;;:::o;15177:::-;15319:3;15340:67;15404:2;15399:3;15340:67;:::i;:::-;15333:74;;15416:93;15505:3;15416:93;:::i;:::-;15534:2;15529:3;15525:12;15518:19;;15177:366;;;:::o;15549:::-;15691:3;15712:67;15776:2;15771:3;15712:67;:::i;:::-;15705:74;;15788:93;15877:3;15788:93;:::i;:::-;15906:2;15901:3;15897:12;15890:19;;15549:366;;;:::o;15921:::-;16063:3;16084:67;16148:2;16143:3;16084:67;:::i;:::-;16077:74;;16160:93;16249:3;16160:93;:::i;:::-;16278:2;16273:3;16269:12;16262:19;;15921:366;;;:::o;16293:::-;16435:3;16456:67;16520:2;16515:3;16456:67;:::i;:::-;16449:74;;16532:93;16621:3;16532:93;:::i;:::-;16650:2;16645:3;16641:12;16634:19;;16293:366;;;:::o;16665:::-;16807:3;16828:67;16892:2;16887:3;16828:67;:::i;:::-;16821:74;;16904:93;16993:3;16904:93;:::i;:::-;17022:2;17017:3;17013:12;17006:19;;16665:366;;;:::o;17037:::-;17179:3;17200:67;17264:2;17259:3;17200:67;:::i;:::-;17193:74;;17276:93;17365:3;17276:93;:::i;:::-;17394:2;17389:3;17385:12;17378:19;;17037:366;;;:::o;17409:::-;17551:3;17572:67;17636:2;17631:3;17572:67;:::i;:::-;17565:74;;17648:93;17737:3;17648:93;:::i;:::-;17766:2;17761:3;17757:12;17750:19;;17409:366;;;:::o;17781:::-;17923:3;17944:67;18008:2;18003:3;17944:67;:::i;:::-;17937:74;;18020:93;18109:3;18020:93;:::i;:::-;18138:2;18133:3;18129:12;18122:19;;17781:366;;;:::o;18153:::-;18295:3;18316:67;18380:2;18375:3;18316:67;:::i;:::-;18309:74;;18392:93;18481:3;18392:93;:::i;:::-;18510:2;18505:3;18501:12;18494:19;;18153:366;;;:::o;18525:::-;18667:3;18688:67;18752:2;18747:3;18688:67;:::i;:::-;18681:74;;18764:93;18853:3;18764:93;:::i;:::-;18882:2;18877:3;18873:12;18866:19;;18525:366;;;:::o;18897:::-;19039:3;19060:67;19124:2;19119:3;19060:67;:::i;:::-;19053:74;;19136:93;19225:3;19136:93;:::i;:::-;19254:2;19249:3;19245:12;19238:19;;18897:366;;;:::o;19269:118::-;19356:24;19374:5;19356:24;:::i;:::-;19351:3;19344:37;19269:118;;:::o;19393:112::-;19476:22;19492:5;19476:22;:::i;:::-;19471:3;19464:35;19393:112;;:::o;19511:271::-;19641:3;19663:93;19752:3;19743:6;19663:93;:::i;:::-;19656:100;;19773:3;19766:10;;19511:271;;;;:::o;19788:412::-;19946:3;19968:93;20057:3;20048:6;19968:93;:::i;:::-;19961:100;;20071:75;20142:3;20133:6;20071:75;:::i;:::-;20171:2;20166:3;20162:12;20155:19;;20191:3;20184:10;;19788:412;;;;;:::o;20206:435::-;20386:3;20408:95;20499:3;20490:6;20408:95;:::i;:::-;20401:102;;20520:95;20611:3;20602:6;20520:95;:::i;:::-;20513:102;;20632:3;20625:10;;20206:435;;;;;:::o;20647:663::-;20888:3;20910:148;21054:3;20910:148;:::i;:::-;20903:155;;21068:75;21139:3;21130:6;21068:75;:::i;:::-;21168:2;21163:3;21159:12;21152:19;;21181:75;21252:3;21243:6;21181:75;:::i;:::-;21281:2;21276:3;21272:12;21265:19;;21301:3;21294:10;;20647:663;;;;;:::o;21316:222::-;21409:4;21447:2;21436:9;21432:18;21424:26;;21460:71;21528:1;21517:9;21513:17;21504:6;21460:71;:::i;:::-;21316:222;;;;:::o;21544:561::-;21727:4;21765:2;21754:9;21750:18;21742:26;;21778:71;21846:1;21835:9;21831:17;21822:6;21778:71;:::i;:::-;21859:88;21943:2;21932:9;21928:18;21919:6;21859:88;:::i;:::-;21994:9;21988:4;21984:20;21979:2;21968:9;21964:18;21957:48;22022:76;22093:4;22084:6;22022:76;:::i;:::-;22014:84;;21544:561;;;;;;:::o;22111:640::-;22306:4;22344:3;22333:9;22329:19;22321:27;;22358:71;22426:1;22415:9;22411:17;22402:6;22358:71;:::i;:::-;22439:72;22507:2;22496:9;22492:18;22483:6;22439:72;:::i;:::-;22521;22589:2;22578:9;22574:18;22565:6;22521:72;:::i;:::-;22640:9;22634:4;22630:20;22625:2;22614:9;22610:18;22603:48;22668:76;22739:4;22730:6;22668:76;:::i;:::-;22660:84;;22111:640;;;;;;;:::o;22757:210::-;22844:4;22882:2;22871:9;22867:18;22859:26;;22895:65;22957:1;22946:9;22942:17;22933:6;22895:65;:::i;:::-;22757:210;;;;:::o;22973:222::-;23066:4;23104:2;23093:9;23089:18;23081:26;;23117:71;23185:1;23174:9;23170:17;23161:6;23117:71;:::i;:::-;22973:222;;;;:::o;23201:553::-;23378:4;23416:3;23405:9;23401:19;23393:27;;23430:71;23498:1;23487:9;23483:17;23474:6;23430:71;:::i;:::-;23511:72;23579:2;23568:9;23564:18;23555:6;23511:72;:::i;:::-;23593;23661:2;23650:9;23646:18;23637:6;23593:72;:::i;:::-;23675;23743:2;23732:9;23728:18;23719:6;23675:72;:::i;:::-;23201:553;;;;;;;:::o;23760:545::-;23933:4;23971:3;23960:9;23956:19;23948:27;;23985:71;24053:1;24042:9;24038:17;24029:6;23985:71;:::i;:::-;24066:68;24130:2;24119:9;24115:18;24106:6;24066:68;:::i;:::-;24144:72;24212:2;24201:9;24197:18;24188:6;24144:72;:::i;:::-;24226;24294:2;24283:9;24279:18;24270:6;24226:72;:::i;:::-;23760:545;;;;;;;:::o;24311:309::-;24422:4;24460:2;24449:9;24445:18;24437:26;;24509:9;24503:4;24499:20;24495:1;24484:9;24480:17;24473:47;24537:76;24608:4;24599:6;24537:76;:::i;:::-;24529:84;;24311:309;;;;:::o;24626:313::-;24739:4;24777:2;24766:9;24762:18;24754:26;;24826:9;24820:4;24816:20;24812:1;24801:9;24797:17;24790:47;24854:78;24927:4;24918:6;24854:78;:::i;:::-;24846:86;;24626:313;;;;:::o;24945:419::-;25111:4;25149:2;25138:9;25134:18;25126:26;;25198:9;25192:4;25188:20;25184:1;25173:9;25169:17;25162:47;25226:131;25352:4;25226:131;:::i;:::-;25218:139;;24945:419;;;:::o;25370:::-;25536:4;25574:2;25563:9;25559:18;25551:26;;25623:9;25617:4;25613:20;25609:1;25598:9;25594:17;25587:47;25651:131;25777:4;25651:131;:::i;:::-;25643:139;;25370:419;;;:::o;25795:::-;25961:4;25999:2;25988:9;25984:18;25976:26;;26048:9;26042:4;26038:20;26034:1;26023:9;26019:17;26012:47;26076:131;26202:4;26076:131;:::i;:::-;26068:139;;25795:419;;;:::o;26220:::-;26386:4;26424:2;26413:9;26409:18;26401:26;;26473:9;26467:4;26463:20;26459:1;26448:9;26444:17;26437:47;26501:131;26627:4;26501:131;:::i;:::-;26493:139;;26220:419;;;:::o;26645:::-;26811:4;26849:2;26838:9;26834:18;26826:26;;26898:9;26892:4;26888:20;26884:1;26873:9;26869:17;26862:47;26926:131;27052:4;26926:131;:::i;:::-;26918:139;;26645:419;;;:::o;27070:::-;27236:4;27274:2;27263:9;27259:18;27251:26;;27323:9;27317:4;27313:20;27309:1;27298:9;27294:17;27287:47;27351:131;27477:4;27351:131;:::i;:::-;27343:139;;27070:419;;;:::o;27495:::-;27661:4;27699:2;27688:9;27684:18;27676:26;;27748:9;27742:4;27738:20;27734:1;27723:9;27719:17;27712:47;27776:131;27902:4;27776:131;:::i;:::-;27768:139;;27495:419;;;:::o;27920:::-;28086:4;28124:2;28113:9;28109:18;28101:26;;28173:9;28167:4;28163:20;28159:1;28148:9;28144:17;28137:47;28201:131;28327:4;28201:131;:::i;:::-;28193:139;;27920:419;;;:::o;28345:::-;28511:4;28549:2;28538:9;28534:18;28526:26;;28598:9;28592:4;28588:20;28584:1;28573:9;28569:17;28562:47;28626:131;28752:4;28626:131;:::i;:::-;28618:139;;28345:419;;;:::o;28770:::-;28936:4;28974:2;28963:9;28959:18;28951:26;;29023:9;29017:4;29013:20;29009:1;28998:9;28994:17;28987:47;29051:131;29177:4;29051:131;:::i;:::-;29043:139;;28770:419;;;:::o;29195:::-;29361:4;29399:2;29388:9;29384:18;29376:26;;29448:9;29442:4;29438:20;29434:1;29423:9;29419:17;29412:47;29476:131;29602:4;29476:131;:::i;:::-;29468:139;;29195:419;;;:::o;29620:::-;29786:4;29824:2;29813:9;29809:18;29801:26;;29873:9;29867:4;29863:20;29859:1;29848:9;29844:17;29837:47;29901:131;30027:4;29901:131;:::i;:::-;29893:139;;29620:419;;;:::o;30045:::-;30211:4;30249:2;30238:9;30234:18;30226:26;;30298:9;30292:4;30288:20;30284:1;30273:9;30269:17;30262:47;30326:131;30452:4;30326:131;:::i;:::-;30318:139;;30045:419;;;:::o;30470:::-;30636:4;30674:2;30663:9;30659:18;30651:26;;30723:9;30717:4;30713:20;30709:1;30698:9;30694:17;30687:47;30751:131;30877:4;30751:131;:::i;:::-;30743:139;;30470:419;;;:::o;30895:::-;31061:4;31099:2;31088:9;31084:18;31076:26;;31148:9;31142:4;31138:20;31134:1;31123:9;31119:17;31112:47;31176:131;31302:4;31176:131;:::i;:::-;31168:139;;30895:419;;;:::o;31320:::-;31486:4;31524:2;31513:9;31509:18;31501:26;;31573:9;31567:4;31563:20;31559:1;31548:9;31544:17;31537:47;31601:131;31727:4;31601:131;:::i;:::-;31593:139;;31320:419;;;:::o;31745:::-;31911:4;31949:2;31938:9;31934:18;31926:26;;31998:9;31992:4;31988:20;31984:1;31973:9;31969:17;31962:47;32026:131;32152:4;32026:131;:::i;:::-;32018:139;;31745:419;;;:::o;32170:::-;32336:4;32374:2;32363:9;32359:18;32351:26;;32423:9;32417:4;32413:20;32409:1;32398:9;32394:17;32387:47;32451:131;32577:4;32451:131;:::i;:::-;32443:139;;32170:419;;;:::o;32595:::-;32761:4;32799:2;32788:9;32784:18;32776:26;;32848:9;32842:4;32838:20;32834:1;32823:9;32819:17;32812:47;32876:131;33002:4;32876:131;:::i;:::-;32868:139;;32595:419;;;:::o;33020:::-;33186:4;33224:2;33213:9;33209:18;33201:26;;33273:9;33267:4;33263:20;33259:1;33248:9;33244:17;33237:47;33301:131;33427:4;33301:131;:::i;:::-;33293:139;;33020:419;;;:::o;33445:::-;33611:4;33649:2;33638:9;33634:18;33626:26;;33698:9;33692:4;33688:20;33684:1;33673:9;33669:17;33662:47;33726:131;33852:4;33726:131;:::i;:::-;33718:139;;33445:419;;;:::o;33870:::-;34036:4;34074:2;34063:9;34059:18;34051:26;;34123:9;34117:4;34113:20;34109:1;34098:9;34094:17;34087:47;34151:131;34277:4;34151:131;:::i;:::-;34143:139;;33870:419;;;:::o;34295:222::-;34388:4;34426:2;34415:9;34411:18;34403:26;;34439:71;34507:1;34496:9;34492:17;34483:6;34439:71;:::i;:::-;34295:222;;;;:::o;34523:129::-;34557:6;34584:20;;:::i;:::-;34574:30;;34613:33;34641:4;34633:6;34613:33;:::i;:::-;34523:129;;;:::o;34658:75::-;34691:6;34724:2;34718:9;34708:19;;34658:75;:::o;34739:307::-;34800:4;34890:18;34882:6;34879:30;34876:56;;;34912:18;;:::i;:::-;34876:56;34950:29;34972:6;34950:29;:::i;:::-;34942:37;;35034:4;35028;35024:15;35016:23;;34739:307;;;:::o;35052:98::-;35103:6;35137:5;35131:12;35121:22;;35052:98;;;:::o;35156:99::-;35208:6;35242:5;35236:12;35226:22;;35156:99;;;:::o;35261:168::-;35344:11;35378:6;35373:3;35366:19;35418:4;35413:3;35409:14;35394:29;;35261:168;;;;:::o;35435:147::-;35536:11;35573:3;35558:18;;35435:147;;;;:::o;35588:169::-;35672:11;35706:6;35701:3;35694:19;35746:4;35741:3;35737:14;35722:29;;35588:169;;;;:::o;35763:148::-;35865:11;35902:3;35887:18;;35763:148;;;;:::o;35917:305::-;35957:3;35976:20;35994:1;35976:20;:::i;:::-;35971:25;;36010:20;36028:1;36010:20;:::i;:::-;36005:25;;36164:1;36096:66;36092:74;36089:1;36086:81;36083:107;;;36170:18;;:::i;:::-;36083:107;36214:1;36211;36207:9;36200:16;;35917:305;;;;:::o;36228:185::-;36268:1;36285:20;36303:1;36285:20;:::i;:::-;36280:25;;36319:20;36337:1;36319:20;:::i;:::-;36314:25;;36358:1;36348:35;;36363:18;;:::i;:::-;36348:35;36405:1;36402;36398:9;36393:14;;36228:185;;;;:::o;36419:348::-;36459:7;36482:20;36500:1;36482:20;:::i;:::-;36477:25;;36516:20;36534:1;36516:20;:::i;:::-;36511:25;;36704:1;36636:66;36632:74;36629:1;36626:81;36621:1;36614:9;36607:17;36603:105;36600:131;;;36711:18;;:::i;:::-;36600:131;36759:1;36756;36752:9;36741:20;;36419:348;;;;:::o;36773:191::-;36813:4;36833:20;36851:1;36833:20;:::i;:::-;36828:25;;36867:20;36885:1;36867:20;:::i;:::-;36862:25;;36906:1;36903;36900:8;36897:34;;;36911:18;;:::i;:::-;36897:34;36956:1;36953;36949:9;36941:17;;36773:191;;;;:::o;36970:96::-;37007:7;37036:24;37054:5;37036:24;:::i;:::-;37025:35;;36970:96;;;:::o;37072:104::-;37117:7;37146:24;37164:5;37146:24;:::i;:::-;37135:35;;37072:104;;;:::o;37182:90::-;37216:7;37259:5;37252:13;37245:21;37234:32;;37182:90;;;:::o;37278:77::-;37315:7;37344:5;37333:16;;37278:77;;;:::o;37361:149::-;37397:7;37437:66;37430:5;37426:78;37415:89;;37361:149;;;:::o;37516:125::-;37582:7;37611:24;37629:5;37611:24;:::i;:::-;37600:35;;37516:125;;;:::o;37647:126::-;37684:7;37724:42;37717:5;37713:54;37702:65;;37647:126;;;:::o;37779:77::-;37816:7;37845:5;37834:16;;37779:77;;;:::o;37862:86::-;37897:7;37937:4;37930:5;37926:16;37915:27;;37862:86;;;:::o;37954:154::-;38038:6;38033:3;38028;38015:30;38100:1;38091:6;38086:3;38082:16;38075:27;37954:154;;;:::o;38114:307::-;38182:1;38192:113;38206:6;38203:1;38200:13;38192:113;;;38291:1;38286:3;38282:11;38276:18;38272:1;38267:3;38263:11;38256:39;38228:2;38225:1;38221:10;38216:15;;38192:113;;;38323:6;38320:1;38317:13;38314:101;;;38403:1;38394:6;38389:3;38385:16;38378:27;38314:101;38163:258;38114:307;;;:::o;38427:320::-;38471:6;38508:1;38502:4;38498:12;38488:22;;38555:1;38549:4;38545:12;38576:18;38566:81;;38632:4;38624:6;38620:17;38610:27;;38566:81;38694:2;38686:6;38683:14;38663:18;38660:38;38657:84;;;38713:18;;:::i;:::-;38657:84;38478:269;38427:320;;;:::o;38753:281::-;38836:27;38858:4;38836:27;:::i;:::-;38828:6;38824:40;38966:6;38954:10;38951:22;38930:18;38918:10;38915:34;38912:62;38909:88;;;38977:18;;:::i;:::-;38909:88;39017:10;39013:2;39006:22;38796:238;38753:281;;:::o;39040:233::-;39079:3;39102:24;39120:5;39102:24;:::i;:::-;39093:33;;39148:66;39141:5;39138:77;39135:103;;;39218:18;;:::i;:::-;39135:103;39265:1;39258:5;39254:13;39247:20;;39040:233;;;:::o;39279:100::-;39318:7;39347:26;39367:5;39347:26;:::i;:::-;39336:37;;39279:100;;;:::o;39385:79::-;39424:7;39453:5;39442:16;;39385:79;;;:::o;39470:94::-;39509:7;39538:20;39552:5;39538:20;:::i;:::-;39527:31;;39470:94;;;:::o;39570:176::-;39602:1;39619:20;39637:1;39619:20;:::i;:::-;39614:25;;39653:20;39671:1;39653:20;:::i;:::-;39648:25;;39692:1;39682:35;;39697:18;;:::i;:::-;39682:35;39738:1;39735;39731:9;39726:14;;39570:176;;;;:::o;39752:180::-;39800:77;39797:1;39790:88;39897:4;39894:1;39887:15;39921:4;39918:1;39911:15;39938:180;39986:77;39983:1;39976:88;40083:4;40080:1;40073:15;40107:4;40104:1;40097:15;40124:180;40172:77;40169:1;40162:88;40269:4;40266:1;40259:15;40293:4;40290:1;40283:15;40310:180;40358:77;40355:1;40348:88;40455:4;40452:1;40445:15;40479:4;40476:1;40469:15;40496:180;40544:77;40541:1;40534:88;40641:4;40638:1;40631:15;40665:4;40662:1;40655:15;40682:180;40730:77;40727:1;40720:88;40827:4;40824:1;40817:15;40851:4;40848:1;40841:15;40868:117;40977:1;40974;40967:12;40991:117;41100:1;41097;41090:12;41114:117;41223:1;41220;41213:12;41237:117;41346:1;41343;41336:12;41360:102;41401:6;41452:2;41448:7;41443:2;41436:5;41432:14;41428:28;41418:38;;41360:102;;;:::o;41468:94::-;41501:8;41549:5;41545:2;41541:14;41520:35;;41468:94;;;:::o;41568:230::-;41708:34;41704:1;41696:6;41692:14;41685:58;41777:13;41772:2;41764:6;41760:15;41753:38;41568:230;:::o;41804:237::-;41944:34;41940:1;41932:6;41928:14;41921:58;42013:20;42008:2;42000:6;41996:15;41989:45;41804:237;:::o;42047:225::-;42187:34;42183:1;42175:6;42171:14;42164:58;42256:8;42251:2;42243:6;42239:15;42232:33;42047:225;:::o;42278:178::-;42418:30;42414:1;42406:6;42402:14;42395:54;42278:178;:::o;42462:::-;42602:30;42598:1;42590:6;42586:14;42579:54;42462:178;:::o;42646:214::-;42786:66;42782:1;42774:6;42770:14;42763:90;42646:214;:::o;42866:223::-;43006:34;43002:1;42994:6;42990:14;42983:58;43075:6;43070:2;43062:6;43058:15;43051:31;42866:223;:::o;43095:175::-;43235:27;43231:1;43223:6;43219:14;43212:51;43095:175;:::o;43276:231::-;43416:34;43412:1;43404:6;43400:14;43393:58;43485:14;43480:2;43472:6;43468:15;43461:39;43276:231;:::o;43513:224::-;43653:34;43649:1;43641:6;43637:14;43630:58;43722:7;43717:2;43709:6;43705:15;43698:32;43513:224;:::o;43743:243::-;43883:34;43879:1;43871:6;43867:14;43860:58;43952:26;43947:2;43939:6;43935:15;43928:51;43743:243;:::o;43992:229::-;44132:34;44128:1;44120:6;44116:14;44109:58;44201:12;44196:2;44188:6;44184:15;44177:37;43992:229;:::o;44227:228::-;44367:34;44363:1;44355:6;44351:14;44344:58;44436:11;44431:2;44423:6;44419:15;44412:36;44227:228;:::o;44461:182::-;44601:34;44597:1;44589:6;44585:14;44578:58;44461:182;:::o;44649:231::-;44789:34;44785:1;44777:6;44773:14;44766:58;44858:14;44853:2;44845:6;44841:15;44834:39;44649:231;:::o;44886:182::-;45026:34;45022:1;45014:6;45010:14;45003:58;44886:182;:::o;45074:228::-;45214:34;45210:1;45202:6;45198:14;45191:58;45283:11;45278:2;45270:6;45266:15;45259:36;45074:228;:::o;45308:220::-;45448:34;45444:1;45436:6;45432:14;45425:58;45517:3;45512:2;45504:6;45500:15;45493:28;45308:220;:::o;45534:::-;45674:34;45670:1;45662:6;45658:14;45651:58;45743:3;45738:2;45730:6;45726:15;45719:28;45534:220;:::o;45760:172::-;45900:24;45896:1;45888:6;45884:14;45877:48;45760:172;:::o;45938:236::-;46078:34;46074:1;46066:6;46062:14;46055:58;46147:19;46142:2;46134:6;46130:15;46123:44;45938:236;:::o;46180:231::-;46320:34;46316:1;46308:6;46304:14;46297:58;46389:14;46384:2;46376:6;46372:15;46365:39;46180:231;:::o;46417:182::-;46557:34;46553:1;46545:6;46541:14;46534:58;46417:182;:::o;46605:122::-;46678:24;46696:5;46678:24;:::i;:::-;46671:5;46668:35;46658:63;;46717:1;46714;46707:12;46658:63;46605:122;:::o;46733:116::-;46803:21;46818:5;46803:21;:::i;:::-;46796:5;46793:32;46783:60;;46839:1;46836;46829:12;46783:60;46733:116;:::o;46855:122::-;46928:24;46946:5;46928:24;:::i;:::-;46921:5;46918:35;46908:63;;46967:1;46964;46957:12;46908:63;46855:122;:::o;46983:120::-;47055:23;47072:5;47055:23;:::i;:::-;47048:5;47045:34;47035:62;;47093:1;47090;47083:12;47035:62;46983:120;:::o;47109:180::-;47211:53;47258:5;47211:53;:::i;:::-;47204:5;47201:64;47191:92;;47279:1;47276;47269:12;47191:92;47109:180;:::o;47295:122::-;47368:24;47386:5;47368:24;:::i;:::-;47361:5;47358:35;47348:63;;47407:1;47404;47397:12;47348:63;47295:122;:::o;47423:118::-;47494:22;47510:5;47494:22;:::i;:::-;47487:5;47484:33;47474:61;;47531:1;47528;47521:12;47474:61;47423:118;:::o

Swarm Source

ipfs://5b3313e5f31943a8cfb99276d5faaa7a0cc143c4001f20169bb1e77344c3e6c1

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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