ERC-721
NFT
Overview
Max Total Supply
2,500 CBLXPUMA
Holders
1,627
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 CBLXPUMALoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CatBloxPUMACapsule
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-04 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/interfaces/IERC20.sol // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol) pragma solidity ^0.8.0; // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol 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); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ 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); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed 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/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ 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; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ 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())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ 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); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ 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); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ 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"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ 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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ 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" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ 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); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ 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); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ 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; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/catbloxpuma.sol //SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; contract CatBloxPUMACapsule is ERC721, Ownable { using Counters for Counters.Counter; using Strings for uint256; Counters.Counter private tokenCounter; string public baseURI; string public provenanceHash; bool public isClaimingActive; bytes32 public claimListMerkleRoot; uint256 public price = 0.2 ether; uint256 public immutable maxPumas; mapping(address => uint256) public claimListMintCounts; // ============ ACCESS CONTROL/SANITY MODIFIERS ============ modifier claimListActive() { require(isClaimingActive, "Claim list not active"); _; } modifier totalNotExceeded(uint256 numberOfTokens) { require( tokenCounter.current() + numberOfTokens <= maxPumas, "Not enough pumas remaining to claim" ); _; } modifier isValidMerkleProof( bytes32[] calldata merkleProof, bytes32 root, uint256 maxClaimable ) { require( MerkleProof.verify( merkleProof, root, keccak256(abi.encodePacked(msg.sender, maxClaimable)) ), "Proof does not exist in tree" ); _; } modifier isCorrectPayment(uint256 numberOfTokens) { require( price * numberOfTokens == msg.value, "Incorrect ETH value sent" ); _; } constructor(string memory defaultBaseURI, uint256 _maxPumas) ERC721("CatBloxPUMACapsule", "CBLXPUMA") { baseURI = defaultBaseURI; maxPumas = _maxPumas; } // ============ PUBLIC FUNCTION FOR CLAIMING ============ function claim( uint256 numberOfTokens, uint256 maxClaimable, bytes32[] calldata merkleProof ) external payable claimListActive totalNotExceeded(numberOfTokens) isValidMerkleProof(merkleProof, claimListMerkleRoot, maxClaimable) isCorrectPayment(numberOfTokens) { uint256 numAlreadyMinted = claimListMintCounts[msg.sender]; require( numAlreadyMinted + numberOfTokens <= maxClaimable, "Exceeds max claimable" ); claimListMintCounts[msg.sender] = numAlreadyMinted + numberOfTokens; for (uint256 i = 0; i < numberOfTokens; i++) { _safeMint(msg.sender, nextTokenId()); } } // ============ PUBLIC READ-ONLY FUNCTIONS ============ function totalSupply() external view returns (uint256) { return tokenCounter.current(); } // ============ OWNER-ONLY ADMIN FUNCTIONS ============ function setBaseURI(string memory newBaseURI) external onlyOwner { baseURI = newBaseURI; } function setProvenanceHash(string memory _hash) external onlyOwner { provenanceHash = _hash; } // Toggle Claiming Active / Inactive function setClaimingActive(bool _isClaimingActive) external onlyOwner { isClaimingActive = _isClaimingActive; } // Set Merkle Roots function setClaimListMerkleRoot(bytes32 _merkleRoot) external onlyOwner { claimListMerkleRoot = _merkleRoot; } // Set Price function setPrice(uint256 _price) external onlyOwner { price = _price; } // ============ SUPPORTING FUNCTIONS ============ function nextTokenId() private returns (uint256) { tokenCounter.increment(); return tokenCounter.current(); } // ============ OVERRIDES ============ function _baseURI() internal view override returns (string memory) { return baseURI; } // Withdrawal function withdraw() public onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } function withdrawTokens(IERC20 token) public onlyOwner { uint256 balance = token.balanceOf(address(this)); token.transfer(msg.sender, balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"defaultBaseURI","type":"string"},{"internalType":"uint256","name":"_maxPumas","type":"uint256"}],"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":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":[{"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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"uint256","name":"maxClaimable","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claimListMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimListMintCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"isClaimingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPumas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"provenanceHash","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setClaimListMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isClaimingActive","type":"bool"}],"name":"setClaimingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hash","type":"string"}],"name":"setProvenanceHash","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040526702c68af0bb140000600c553480156200001d57600080fd5b50604051620047203803806200472083398181016040528101906200004391906200033f565b6040518060400160405280601281526020017f436174426c6f7850554d4143617073756c6500000000000000000000000000008152506040518060400160405280600881526020017f43424c5850554d410000000000000000000000000000000000000000000000008152508160009080519060200190620000c7929190620001fa565b508060019080519060200190620000e0929190620001fa565b50505062000103620000f76200012c60201b60201c565b6200013460201b60201c565b81600890805190602001906200011b929190620001fa565b50806080818152505050506200054d565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002089062000444565b90600052602060002090601f0160209004810192826200022c576000855562000278565b82601f106200024757805160ff191683800117855562000278565b8280016001018555821562000278579182015b82811115620002775782518255916020019190600101906200025a565b5b5090506200028791906200028b565b5090565b5b80821115620002a65760008160009055506001016200028c565b5090565b6000620002c1620002bb84620003ce565b620003a5565b905082815260208101848484011115620002e057620002df62000513565b5b620002ed8482856200040e565b509392505050565b600082601f8301126200030d576200030c6200050e565b5b81516200031f848260208601620002aa565b91505092915050565b600081519050620003398162000533565b92915050565b600080604083850312156200035957620003586200051d565b5b600083015167ffffffffffffffff8111156200037a576200037962000518565b5b6200038885828601620002f5565b92505060206200039b8582860162000328565b9150509250929050565b6000620003b1620003c4565b9050620003bf82826200047a565b919050565b6000604051905090565b600067ffffffffffffffff821115620003ec57620003eb620004df565b5b620003f78262000522565b9050602081019050919050565b6000819050919050565b60005b838110156200042e57808201518184015260208101905062000411565b838111156200043e576000848401525b50505050565b600060028204905060018216806200045d57607f821691505b60208210811415620004745762000473620004b0565b5b50919050565b620004858262000522565b810181811067ffffffffffffffff82111715620004a757620004a6620004df565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200053e8162000404565b81146200054a57600080fd5b50565b6080516141b06200057060003960008181611125015261143701526141b06000f3fe6080604052600436106101e35760003560e01c80636c0360eb11610102578063a22cb46511610095578063c6ab67a311610064578063c6ab67a3146106a9578063c87b56dd146106d4578063e985e9c514610711578063f2fde38b1461074e576101e3565b8063a22cb465146105fe578063ae0b51df14610627578063b88d4fde14610643578063c503b18a1461066c576101e3565b80638da5cb5b116100d15780638da5cb5b1461055457806391b7f5ed1461057f57806395d89b41146105a8578063a035b1fe146105d3576101e3565b80636c0360eb146104aa5780636d9f48a3146104d557806370a0823114610500578063715018a61461053d576101e3565b806330ea41991161017a57806342842e0e1161014957806342842e0e146103f257806349df728c1461041b57806355f804b3146104445780636352211e1461046d576101e3565b806330ea41991461035c578063326f9ad3146103855780633732ad1c146103b05780633ccfd60b146103db576101e3565b806310969523116101b657806310969523146102b657806315bdebe2146102df57806318160ddd1461030857806323b872dd14610333576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612d45565b610777565b60405161021c91906133af565b60405180910390f35b34801561023157600080fd5b5061023a610859565b60405161024791906133e5565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190612e15565b6108eb565b604051610284919061331f565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190612c7e565b610970565b005b3480156102c257600080fd5b506102dd60048036038101906102d89190612dcc565b610a88565b005b3480156102eb57600080fd5b5061030660048036038101906103019190612d18565b610b1e565b005b34801561031457600080fd5b5061031d610ba4565b60405161032a91906136a7565b60405180910390f35b34801561033f57600080fd5b5061035a60048036038101906103559190612b68565b610bb5565b005b34801561036857600080fd5b50610383600480360381019061037e9190612cbe565b610c15565b005b34801561039157600080fd5b5061039a610cae565b6040516103a791906133ca565b60405180910390f35b3480156103bc57600080fd5b506103c5610cb4565b6040516103d291906133af565b60405180910390f35b3480156103e757600080fd5b506103f0610cc7565b005b3480156103fe57600080fd5b5061041960048036038101906104149190612b68565b610d92565b005b34801561042757600080fd5b50610442600480360381019061043d9190612d9f565b610db2565b005b34801561045057600080fd5b5061046b60048036038101906104669190612dcc565b610f4d565b005b34801561047957600080fd5b50610494600480360381019061048f9190612e15565b610fe3565b6040516104a1919061331f565b60405180910390f35b3480156104b657600080fd5b506104bf611095565b6040516104cc91906133e5565b60405180910390f35b3480156104e157600080fd5b506104ea611123565b6040516104f791906136a7565b60405180910390f35b34801561050c57600080fd5b5061052760048036038101906105229190612afb565b611147565b60405161053491906136a7565b60405180910390f35b34801561054957600080fd5b506105526111ff565b005b34801561056057600080fd5b50610569611287565b604051610576919061331f565b60405180910390f35b34801561058b57600080fd5b506105a660048036038101906105a19190612e15565b6112b1565b005b3480156105b457600080fd5b506105bd611337565b6040516105ca91906133e5565b60405180910390f35b3480156105df57600080fd5b506105e86113c9565b6040516105f591906136a7565b60405180910390f35b34801561060a57600080fd5b5061062560048036038101906106209190612c3e565b6113cf565b005b610641600480360381019061063c9190612e6f565b6113e5565b005b34801561064f57600080fd5b5061066a60048036038101906106659190612bbb565b6116d3565b005b34801561067857600080fd5b50610693600480360381019061068e9190612afb565b611735565b6040516106a091906136a7565b60405180910390f35b3480156106b557600080fd5b506106be61174d565b6040516106cb91906133e5565b60405180910390f35b3480156106e057600080fd5b506106fb60048036038101906106f69190612e15565b6117db565b60405161070891906133e5565b60405180910390f35b34801561071d57600080fd5b5061073860048036038101906107339190612b28565b611882565b60405161074591906133af565b60405180910390f35b34801561075a57600080fd5b5061077560048036038101906107709190612afb565b611916565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610852575061085182611a0e565b5b9050919050565b60606000805461086890613973565b80601f016020809104026020016040519081016040528092919081815260200182805461089490613973565b80156108e15780601f106108b6576101008083540402835291602001916108e1565b820191906000526020600020905b8154815290600101906020018083116108c457829003601f168201915b5050505050905090565b60006108f682611a78565b610935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092c906135a7565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061097b82610fe3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e390613607565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a0b611ae4565b73ffffffffffffffffffffffffffffffffffffffff161480610a3a5750610a3981610a34611ae4565b611882565b5b610a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7090613527565b60405180910390fd5b610a838383611aec565b505050565b610a90611ae4565b73ffffffffffffffffffffffffffffffffffffffff16610aae611287565b73ffffffffffffffffffffffffffffffffffffffff1614610b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afb906135c7565b60405180910390fd5b8060099080519060200190610b1a929190612865565b5050565b610b26611ae4565b73ffffffffffffffffffffffffffffffffffffffff16610b44611287565b73ffffffffffffffffffffffffffffffffffffffff1614610b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b91906135c7565b60405180910390fd5b80600b8190555050565b6000610bb06007611ba5565b905090565b610bc6610bc0611ae4565b82611bb3565b610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc90613627565b60405180910390fd5b610c10838383611c91565b505050565b610c1d611ae4565b73ffffffffffffffffffffffffffffffffffffffff16610c3b611287565b73ffffffffffffffffffffffffffffffffffffffff1614610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c88906135c7565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b600b5481565b600a60009054906101000a900460ff1681565b610ccf611ae4565b73ffffffffffffffffffffffffffffffffffffffff16610ced611287565b73ffffffffffffffffffffffffffffffffffffffff1614610d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3a906135c7565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d8e573d6000803e3d6000fd5b5050565b610dad838383604051806020016040528060008152506116d3565b505050565b610dba611ae4565b73ffffffffffffffffffffffffffffffffffffffff16610dd8611287565b73ffffffffffffffffffffffffffffffffffffffff1614610e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e25906135c7565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e69919061331f565b60206040518083038186803b158015610e8157600080fd5b505afa158015610e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb99190612e42565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610ef6929190613386565b602060405180830381600087803b158015610f1057600080fd5b505af1158015610f24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f489190612ceb565b505050565b610f55611ae4565b73ffffffffffffffffffffffffffffffffffffffff16610f73611287565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc0906135c7565b60405180910390fd5b8060089080519060200190610fdf929190612865565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561108c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108390613567565b60405180910390fd5b80915050919050565b600880546110a290613973565b80601f01602080910402602001604051908101604052809291908181526020018280546110ce90613973565b801561111b5780601f106110f05761010080835404028352916020019161111b565b820191906000526020600020905b8154815290600101906020018083116110fe57829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111af90613547565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611207611ae4565b73ffffffffffffffffffffffffffffffffffffffff16611225611287565b73ffffffffffffffffffffffffffffffffffffffff161461127b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611272906135c7565b60405180910390fd5b6112856000611ef8565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112b9611ae4565b73ffffffffffffffffffffffffffffffffffffffff166112d7611287565b73ffffffffffffffffffffffffffffffffffffffff161461132d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611324906135c7565b60405180910390fd5b80600c8190555050565b60606001805461134690613973565b80601f016020809104026020016040519081016040528092919081815260200182805461137290613973565b80156113bf5780601f10611394576101008083540402835291602001916113bf565b820191906000526020600020905b8154815290600101906020018083116113a257829003601f168201915b5050505050905090565b600c5481565b6113e16113da611ae4565b8383611fbe565b5050565b600a60009054906101000a900460ff16611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b90613687565b60405180910390fd5b837f0000000000000000000000000000000000000000000000000000000000000000816114616007611ba5565b61146b919061378c565b11156114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a390613407565b60405180910390fd5b8282600b5486611526848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505083338460405160200161150b9291906132cf565b6040516020818303038152906040528051906020012061212b565b611565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155c906134e7565b60405180910390fd5b883481600c546115759190613813565b146115b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ac90613667565b60405180910390fd5b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050898b82611606919061378c565b1115611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e90613647565b60405180910390fd5b8a81611653919061378c565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b8b8110156116c5576116b2336116ad612142565b61215d565b80806116bd906139d6565b915050611699565b505050505050505050505050565b6116e46116de611ae4565b83611bb3565b611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a90613627565b60405180910390fd5b61172f8484848461217b565b50505050565b600d6020528060005260406000206000915090505481565b6009805461175a90613973565b80601f016020809104026020016040519081016040528092919081815260200182805461178690613973565b80156117d35780601f106117a8576101008083540402835291602001916117d3565b820191906000526020600020905b8154815290600101906020018083116117b657829003601f168201915b505050505081565b60606117e682611a78565b611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c906135e7565b60405180910390fd5b600061182f6121d7565b9050600081511161184f576040518060200160405280600081525061187a565b8061185984612269565b60405160200161186a9291906132fb565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61191e611ae4565b73ffffffffffffffffffffffffffffffffffffffff1661193c611287565b73ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611989906135c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f990613447565b60405180910390fd5b611a0b81611ef8565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b5f83610fe3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000611bbe82611a78565b611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf490613507565b60405180910390fd5b6000611c0883610fe3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c4a5750611c498185611882565b5b80611c8857508373ffffffffffffffffffffffffffffffffffffffff16611c70846108eb565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cb182610fe3565b73ffffffffffffffffffffffffffffffffffffffff1614611d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfe90613467565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6e906134a7565b60405180910390fd5b611d828383836123ca565b611d8d600082611aec565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ddd919061386d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e34919061378c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611ef38383836123cf565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561202d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612024906134c7565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161211e91906133af565b60405180910390a3505050565b60008261213885846123d4565b1490509392505050565b600061214e6007612449565b6121586007611ba5565b905090565b61217782826040518060200160405280600081525061245f565b5050565b612186848484611c91565b612192848484846124ba565b6121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c890613427565b60405180910390fd5b50505050565b6060600880546121e690613973565b80601f016020809104026020016040519081016040528092919081815260200182805461221290613973565b801561225f5780601f106122345761010080835404028352916020019161225f565b820191906000526020600020905b81548152906001019060200180831161224257829003601f168201915b5050505050905090565b606060008214156122b1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123c5565b600082905060005b600082146122e35780806122cc906139d6565b915050600a826122dc91906137e2565b91506122b9565b60008167ffffffffffffffff8111156122ff576122fe613b3a565b5b6040519080825280601f01601f1916602001820160405280156123315781602001600182028036833780820191505090505b5090505b600085146123be5760018261234a919061386d565b9150600a856123599190613a4d565b6030612365919061378c565b60f81b81838151811061237b5761237a613b0b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123b791906137e2565b9450612335565b8093505050505b919050565b505050565b505050565b60008082905060005b845181101561243e5760008582815181106123fb576123fa613b0b565b5b6020026020010151905080831161241d576124168382612651565b925061242a565b6124278184612651565b92505b508080612436906139d6565b9150506123dd565b508091505092915050565b6001816000016000828254019250508190555050565b6124698383612668565b61247660008484846124ba565b6124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac90613427565b60405180910390fd5b505050565b60006124db8473ffffffffffffffffffffffffffffffffffffffff16612842565b15612644578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612504611ae4565b8786866040518563ffffffff1660e01b8152600401612526949392919061333a565b602060405180830381600087803b15801561254057600080fd5b505af192505050801561257157506040513d601f19601f8201168201806040525081019061256e9190612d72565b60015b6125f4573d80600081146125a1576040519150601f19603f3d011682016040523d82523d6000602084013e6125a6565b606091505b506000815114156125ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e390613427565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612649565b600190505b949350505050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cf90613587565b60405180910390fd5b6126e181611a78565b15612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271890613487565b60405180910390fd5b61272d600083836123ca565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461277d919061378c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461283e600083836123cf565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461287190613973565b90600052602060002090601f01602090048101928261289357600085556128da565b82601f106128ac57805160ff19168380011785556128da565b828001600101855582156128da579182015b828111156128d95782518255916020019190600101906128be565b5b5090506128e791906128eb565b5090565b5b808211156129045760008160009055506001016128ec565b5090565b600061291b612916846136e7565b6136c2565b90508281526020810184848401111561293757612936613b78565b5b612942848285613931565b509392505050565b600061295d61295884613718565b6136c2565b90508281526020810184848401111561297957612978613b78565b5b612984848285613931565b509392505050565b60008135905061299b816140f0565b92915050565b60008083601f8401126129b7576129b6613b6e565b5b8235905067ffffffffffffffff8111156129d4576129d3613b69565b5b6020830191508360208202830111156129f0576129ef613b73565b5b9250929050565b600081359050612a0681614107565b92915050565b600081519050612a1b81614107565b92915050565b600081359050612a308161411e565b92915050565b600081359050612a4581614135565b92915050565b600081519050612a5a81614135565b92915050565b600082601f830112612a7557612a74613b6e565b5b8135612a85848260208601612908565b91505092915050565b600081359050612a9d8161414c565b92915050565b600082601f830112612ab857612ab7613b6e565b5b8135612ac884826020860161294a565b91505092915050565b600081359050612ae081614163565b92915050565b600081519050612af581614163565b92915050565b600060208284031215612b1157612b10613b82565b5b6000612b1f8482850161298c565b91505092915050565b60008060408385031215612b3f57612b3e613b82565b5b6000612b4d8582860161298c565b9250506020612b5e8582860161298c565b9150509250929050565b600080600060608486031215612b8157612b80613b82565b5b6000612b8f8682870161298c565b9350506020612ba08682870161298c565b9250506040612bb186828701612ad1565b9150509250925092565b60008060008060808587031215612bd557612bd4613b82565b5b6000612be38782880161298c565b9450506020612bf48782880161298c565b9350506040612c0587828801612ad1565b925050606085013567ffffffffffffffff811115612c2657612c25613b7d565b5b612c3287828801612a60565b91505092959194509250565b60008060408385031215612c5557612c54613b82565b5b6000612c638582860161298c565b9250506020612c74858286016129f7565b9150509250929050565b60008060408385031215612c9557612c94613b82565b5b6000612ca38582860161298c565b9250506020612cb485828601612ad1565b9150509250929050565b600060208284031215612cd457612cd3613b82565b5b6000612ce2848285016129f7565b91505092915050565b600060208284031215612d0157612d00613b82565b5b6000612d0f84828501612a0c565b91505092915050565b600060208284031215612d2e57612d2d613b82565b5b6000612d3c84828501612a21565b91505092915050565b600060208284031215612d5b57612d5a613b82565b5b6000612d6984828501612a36565b91505092915050565b600060208284031215612d8857612d87613b82565b5b6000612d9684828501612a4b565b91505092915050565b600060208284031215612db557612db4613b82565b5b6000612dc384828501612a8e565b91505092915050565b600060208284031215612de257612de1613b82565b5b600082013567ffffffffffffffff811115612e0057612dff613b7d565b5b612e0c84828501612aa3565b91505092915050565b600060208284031215612e2b57612e2a613b82565b5b6000612e3984828501612ad1565b91505092915050565b600060208284031215612e5857612e57613b82565b5b6000612e6684828501612ae6565b91505092915050565b60008060008060608587031215612e8957612e88613b82565b5b6000612e9787828801612ad1565b9450506020612ea887828801612ad1565b935050604085013567ffffffffffffffff811115612ec957612ec8613b7d565b5b612ed5878288016129a1565b925092505092959194509250565b612eec816138a1565b82525050565b612f03612efe826138a1565b613a1f565b82525050565b612f12816138b3565b82525050565b612f21816138bf565b82525050565b6000612f3282613749565b612f3c818561375f565b9350612f4c818560208601613940565b612f5581613b87565b840191505092915050565b6000612f6b82613754565b612f758185613770565b9350612f85818560208601613940565b612f8e81613b87565b840191505092915050565b6000612fa482613754565b612fae8185613781565b9350612fbe818560208601613940565b80840191505092915050565b6000612fd7602383613770565b9150612fe282613ba5565b604082019050919050565b6000612ffa603283613770565b915061300582613bf4565b604082019050919050565b600061301d602683613770565b915061302882613c43565b604082019050919050565b6000613040602583613770565b915061304b82613c92565b604082019050919050565b6000613063601c83613770565b915061306e82613ce1565b602082019050919050565b6000613086602483613770565b915061309182613d0a565b604082019050919050565b60006130a9601983613770565b91506130b482613d59565b602082019050919050565b60006130cc601c83613770565b91506130d782613d82565b602082019050919050565b60006130ef602c83613770565b91506130fa82613dab565b604082019050919050565b6000613112603883613770565b915061311d82613dfa565b604082019050919050565b6000613135602a83613770565b915061314082613e49565b604082019050919050565b6000613158602983613770565b915061316382613e98565b604082019050919050565b600061317b602083613770565b915061318682613ee7565b602082019050919050565b600061319e602c83613770565b91506131a982613f10565b604082019050919050565b60006131c1602083613770565b91506131cc82613f5f565b602082019050919050565b60006131e4602f83613770565b91506131ef82613f88565b604082019050919050565b6000613207602183613770565b915061321282613fd7565b604082019050919050565b600061322a603183613770565b915061323582614026565b604082019050919050565b600061324d601583613770565b915061325882614075565b602082019050919050565b6000613270601883613770565b915061327b8261409e565b602082019050919050565b6000613293601583613770565b915061329e826140c7565b602082019050919050565b6132b281613927565b82525050565b6132c96132c482613927565b613a43565b82525050565b60006132db8285612ef2565b6014820191506132eb82846132b8565b6020820191508190509392505050565b60006133078285612f99565b91506133138284612f99565b91508190509392505050565b60006020820190506133346000830184612ee3565b92915050565b600060808201905061334f6000830187612ee3565b61335c6020830186612ee3565b61336960408301856132a9565b818103606083015261337b8184612f27565b905095945050505050565b600060408201905061339b6000830185612ee3565b6133a860208301846132a9565b9392505050565b60006020820190506133c46000830184612f09565b92915050565b60006020820190506133df6000830184612f18565b92915050565b600060208201905081810360008301526133ff8184612f60565b905092915050565b6000602082019050818103600083015261342081612fca565b9050919050565b6000602082019050818103600083015261344081612fed565b9050919050565b6000602082019050818103600083015261346081613010565b9050919050565b6000602082019050818103600083015261348081613033565b9050919050565b600060208201905081810360008301526134a081613056565b9050919050565b600060208201905081810360008301526134c081613079565b9050919050565b600060208201905081810360008301526134e08161309c565b9050919050565b60006020820190508181036000830152613500816130bf565b9050919050565b60006020820190508181036000830152613520816130e2565b9050919050565b6000602082019050818103600083015261354081613105565b9050919050565b6000602082019050818103600083015261356081613128565b9050919050565b600060208201905081810360008301526135808161314b565b9050919050565b600060208201905081810360008301526135a08161316e565b9050919050565b600060208201905081810360008301526135c081613191565b9050919050565b600060208201905081810360008301526135e0816131b4565b9050919050565b60006020820190508181036000830152613600816131d7565b9050919050565b60006020820190508181036000830152613620816131fa565b9050919050565b600060208201905081810360008301526136408161321d565b9050919050565b6000602082019050818103600083015261366081613240565b9050919050565b6000602082019050818103600083015261368081613263565b9050919050565b600060208201905081810360008301526136a081613286565b9050919050565b60006020820190506136bc60008301846132a9565b92915050565b60006136cc6136dd565b90506136d882826139a5565b919050565b6000604051905090565b600067ffffffffffffffff82111561370257613701613b3a565b5b61370b82613b87565b9050602081019050919050565b600067ffffffffffffffff82111561373357613732613b3a565b5b61373c82613b87565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061379782613927565b91506137a283613927565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137d7576137d6613a7e565b5b828201905092915050565b60006137ed82613927565b91506137f883613927565b92508261380857613807613aad565b5b828204905092915050565b600061381e82613927565b915061382983613927565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561386257613861613a7e565b5b828202905092915050565b600061387882613927565b915061388383613927565b92508282101561389657613895613a7e565b5b828203905092915050565b60006138ac82613907565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613900826138a1565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561395e578082015181840152602081019050613943565b8381111561396d576000848401525b50505050565b6000600282049050600182168061398b57607f821691505b6020821081141561399f5761399e613adc565b5b50919050565b6139ae82613b87565b810181811067ffffffffffffffff821117156139cd576139cc613b3a565b5b80604052505050565b60006139e182613927565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a1457613a13613a7e565b5b600182019050919050565b6000613a2a82613a31565b9050919050565b6000613a3c82613b98565b9050919050565b6000819050919050565b6000613a5882613927565b9150613a6383613927565b925082613a7357613a72613aad565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4e6f7420656e6f7567682070756d61732072656d61696e696e6720746f20636c60008201527f61696d0000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f50726f6f6620646f6573206e6f7420657869737420696e207472656500000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f45786365656473206d617820636c61696d61626c650000000000000000000000600082015250565b7f496e636f7272656374204554482076616c75652073656e740000000000000000600082015250565b7f436c61696d206c697374206e6f74206163746976650000000000000000000000600082015250565b6140f9816138a1565b811461410457600080fd5b50565b614110816138b3565b811461411b57600080fd5b50565b614127816138bf565b811461413257600080fd5b50565b61413e816138c9565b811461414957600080fd5b50565b614155816138f5565b811461416057600080fd5b50565b61416c81613927565b811461417757600080fd5b5056fea26469706673582212202ddd30f678b86db79a1f4bee3c8a37c32f428fdfd19e48bca68fd09343265e6464736f6c63430008070033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000009c4000000000000000000000000000000000000000000000000000000000000003d68747470733a2f2f656575776838317978642e657865637574652d6170692e75732d656173742d312e616d617a6f6e6177732e636f6d2f746f6b656e2f000000
Deployed Bytecode
0x6080604052600436106101e35760003560e01c80636c0360eb11610102578063a22cb46511610095578063c6ab67a311610064578063c6ab67a3146106a9578063c87b56dd146106d4578063e985e9c514610711578063f2fde38b1461074e576101e3565b8063a22cb465146105fe578063ae0b51df14610627578063b88d4fde14610643578063c503b18a1461066c576101e3565b80638da5cb5b116100d15780638da5cb5b1461055457806391b7f5ed1461057f57806395d89b41146105a8578063a035b1fe146105d3576101e3565b80636c0360eb146104aa5780636d9f48a3146104d557806370a0823114610500578063715018a61461053d576101e3565b806330ea41991161017a57806342842e0e1161014957806342842e0e146103f257806349df728c1461041b57806355f804b3146104445780636352211e1461046d576101e3565b806330ea41991461035c578063326f9ad3146103855780633732ad1c146103b05780633ccfd60b146103db576101e3565b806310969523116101b657806310969523146102b657806315bdebe2146102df57806318160ddd1461030857806323b872dd14610333576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612d45565b610777565b60405161021c91906133af565b60405180910390f35b34801561023157600080fd5b5061023a610859565b60405161024791906133e5565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190612e15565b6108eb565b604051610284919061331f565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190612c7e565b610970565b005b3480156102c257600080fd5b506102dd60048036038101906102d89190612dcc565b610a88565b005b3480156102eb57600080fd5b5061030660048036038101906103019190612d18565b610b1e565b005b34801561031457600080fd5b5061031d610ba4565b60405161032a91906136a7565b60405180910390f35b34801561033f57600080fd5b5061035a60048036038101906103559190612b68565b610bb5565b005b34801561036857600080fd5b50610383600480360381019061037e9190612cbe565b610c15565b005b34801561039157600080fd5b5061039a610cae565b6040516103a791906133ca565b60405180910390f35b3480156103bc57600080fd5b506103c5610cb4565b6040516103d291906133af565b60405180910390f35b3480156103e757600080fd5b506103f0610cc7565b005b3480156103fe57600080fd5b5061041960048036038101906104149190612b68565b610d92565b005b34801561042757600080fd5b50610442600480360381019061043d9190612d9f565b610db2565b005b34801561045057600080fd5b5061046b60048036038101906104669190612dcc565b610f4d565b005b34801561047957600080fd5b50610494600480360381019061048f9190612e15565b610fe3565b6040516104a1919061331f565b60405180910390f35b3480156104b657600080fd5b506104bf611095565b6040516104cc91906133e5565b60405180910390f35b3480156104e157600080fd5b506104ea611123565b6040516104f791906136a7565b60405180910390f35b34801561050c57600080fd5b5061052760048036038101906105229190612afb565b611147565b60405161053491906136a7565b60405180910390f35b34801561054957600080fd5b506105526111ff565b005b34801561056057600080fd5b50610569611287565b604051610576919061331f565b60405180910390f35b34801561058b57600080fd5b506105a660048036038101906105a19190612e15565b6112b1565b005b3480156105b457600080fd5b506105bd611337565b6040516105ca91906133e5565b60405180910390f35b3480156105df57600080fd5b506105e86113c9565b6040516105f591906136a7565b60405180910390f35b34801561060a57600080fd5b5061062560048036038101906106209190612c3e565b6113cf565b005b610641600480360381019061063c9190612e6f565b6113e5565b005b34801561064f57600080fd5b5061066a60048036038101906106659190612bbb565b6116d3565b005b34801561067857600080fd5b50610693600480360381019061068e9190612afb565b611735565b6040516106a091906136a7565b60405180910390f35b3480156106b557600080fd5b506106be61174d565b6040516106cb91906133e5565b60405180910390f35b3480156106e057600080fd5b506106fb60048036038101906106f69190612e15565b6117db565b60405161070891906133e5565b60405180910390f35b34801561071d57600080fd5b5061073860048036038101906107339190612b28565b611882565b60405161074591906133af565b60405180910390f35b34801561075a57600080fd5b5061077560048036038101906107709190612afb565b611916565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610852575061085182611a0e565b5b9050919050565b60606000805461086890613973565b80601f016020809104026020016040519081016040528092919081815260200182805461089490613973565b80156108e15780601f106108b6576101008083540402835291602001916108e1565b820191906000526020600020905b8154815290600101906020018083116108c457829003601f168201915b5050505050905090565b60006108f682611a78565b610935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092c906135a7565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061097b82610fe3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e390613607565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a0b611ae4565b73ffffffffffffffffffffffffffffffffffffffff161480610a3a5750610a3981610a34611ae4565b611882565b5b610a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7090613527565b60405180910390fd5b610a838383611aec565b505050565b610a90611ae4565b73ffffffffffffffffffffffffffffffffffffffff16610aae611287565b73ffffffffffffffffffffffffffffffffffffffff1614610b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afb906135c7565b60405180910390fd5b8060099080519060200190610b1a929190612865565b5050565b610b26611ae4565b73ffffffffffffffffffffffffffffffffffffffff16610b44611287565b73ffffffffffffffffffffffffffffffffffffffff1614610b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b91906135c7565b60405180910390fd5b80600b8190555050565b6000610bb06007611ba5565b905090565b610bc6610bc0611ae4565b82611bb3565b610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc90613627565b60405180910390fd5b610c10838383611c91565b505050565b610c1d611ae4565b73ffffffffffffffffffffffffffffffffffffffff16610c3b611287565b73ffffffffffffffffffffffffffffffffffffffff1614610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c88906135c7565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b600b5481565b600a60009054906101000a900460ff1681565b610ccf611ae4565b73ffffffffffffffffffffffffffffffffffffffff16610ced611287565b73ffffffffffffffffffffffffffffffffffffffff1614610d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3a906135c7565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d8e573d6000803e3d6000fd5b5050565b610dad838383604051806020016040528060008152506116d3565b505050565b610dba611ae4565b73ffffffffffffffffffffffffffffffffffffffff16610dd8611287565b73ffffffffffffffffffffffffffffffffffffffff1614610e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e25906135c7565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e69919061331f565b60206040518083038186803b158015610e8157600080fd5b505afa158015610e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb99190612e42565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610ef6929190613386565b602060405180830381600087803b158015610f1057600080fd5b505af1158015610f24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f489190612ceb565b505050565b610f55611ae4565b73ffffffffffffffffffffffffffffffffffffffff16610f73611287565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc0906135c7565b60405180910390fd5b8060089080519060200190610fdf929190612865565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561108c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108390613567565b60405180910390fd5b80915050919050565b600880546110a290613973565b80601f01602080910402602001604051908101604052809291908181526020018280546110ce90613973565b801561111b5780601f106110f05761010080835404028352916020019161111b565b820191906000526020600020905b8154815290600101906020018083116110fe57829003601f168201915b505050505081565b7f00000000000000000000000000000000000000000000000000000000000009c481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111af90613547565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611207611ae4565b73ffffffffffffffffffffffffffffffffffffffff16611225611287565b73ffffffffffffffffffffffffffffffffffffffff161461127b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611272906135c7565b60405180910390fd5b6112856000611ef8565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112b9611ae4565b73ffffffffffffffffffffffffffffffffffffffff166112d7611287565b73ffffffffffffffffffffffffffffffffffffffff161461132d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611324906135c7565b60405180910390fd5b80600c8190555050565b60606001805461134690613973565b80601f016020809104026020016040519081016040528092919081815260200182805461137290613973565b80156113bf5780601f10611394576101008083540402835291602001916113bf565b820191906000526020600020905b8154815290600101906020018083116113a257829003601f168201915b5050505050905090565b600c5481565b6113e16113da611ae4565b8383611fbe565b5050565b600a60009054906101000a900460ff16611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b90613687565b60405180910390fd5b837f00000000000000000000000000000000000000000000000000000000000009c4816114616007611ba5565b61146b919061378c565b11156114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a390613407565b60405180910390fd5b8282600b5486611526848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505083338460405160200161150b9291906132cf565b6040516020818303038152906040528051906020012061212b565b611565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155c906134e7565b60405180910390fd5b883481600c546115759190613813565b146115b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ac90613667565b60405180910390fd5b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050898b82611606919061378c565b1115611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e90613647565b60405180910390fd5b8a81611653919061378c565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b8b8110156116c5576116b2336116ad612142565b61215d565b80806116bd906139d6565b915050611699565b505050505050505050505050565b6116e46116de611ae4565b83611bb3565b611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a90613627565b60405180910390fd5b61172f8484848461217b565b50505050565b600d6020528060005260406000206000915090505481565b6009805461175a90613973565b80601f016020809104026020016040519081016040528092919081815260200182805461178690613973565b80156117d35780601f106117a8576101008083540402835291602001916117d3565b820191906000526020600020905b8154815290600101906020018083116117b657829003601f168201915b505050505081565b60606117e682611a78565b611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c906135e7565b60405180910390fd5b600061182f6121d7565b9050600081511161184f576040518060200160405280600081525061187a565b8061185984612269565b60405160200161186a9291906132fb565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61191e611ae4565b73ffffffffffffffffffffffffffffffffffffffff1661193c611287565b73ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611989906135c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f990613447565b60405180910390fd5b611a0b81611ef8565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b5f83610fe3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000611bbe82611a78565b611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf490613507565b60405180910390fd5b6000611c0883610fe3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c4a5750611c498185611882565b5b80611c8857508373ffffffffffffffffffffffffffffffffffffffff16611c70846108eb565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cb182610fe3565b73ffffffffffffffffffffffffffffffffffffffff1614611d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfe90613467565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6e906134a7565b60405180910390fd5b611d828383836123ca565b611d8d600082611aec565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ddd919061386d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e34919061378c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611ef38383836123cf565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561202d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612024906134c7565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161211e91906133af565b60405180910390a3505050565b60008261213885846123d4565b1490509392505050565b600061214e6007612449565b6121586007611ba5565b905090565b61217782826040518060200160405280600081525061245f565b5050565b612186848484611c91565b612192848484846124ba565b6121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c890613427565b60405180910390fd5b50505050565b6060600880546121e690613973565b80601f016020809104026020016040519081016040528092919081815260200182805461221290613973565b801561225f5780601f106122345761010080835404028352916020019161225f565b820191906000526020600020905b81548152906001019060200180831161224257829003601f168201915b5050505050905090565b606060008214156122b1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123c5565b600082905060005b600082146122e35780806122cc906139d6565b915050600a826122dc91906137e2565b91506122b9565b60008167ffffffffffffffff8111156122ff576122fe613b3a565b5b6040519080825280601f01601f1916602001820160405280156123315781602001600182028036833780820191505090505b5090505b600085146123be5760018261234a919061386d565b9150600a856123599190613a4d565b6030612365919061378c565b60f81b81838151811061237b5761237a613b0b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123b791906137e2565b9450612335565b8093505050505b919050565b505050565b505050565b60008082905060005b845181101561243e5760008582815181106123fb576123fa613b0b565b5b6020026020010151905080831161241d576124168382612651565b925061242a565b6124278184612651565b92505b508080612436906139d6565b9150506123dd565b508091505092915050565b6001816000016000828254019250508190555050565b6124698383612668565b61247660008484846124ba565b6124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac90613427565b60405180910390fd5b505050565b60006124db8473ffffffffffffffffffffffffffffffffffffffff16612842565b15612644578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612504611ae4565b8786866040518563ffffffff1660e01b8152600401612526949392919061333a565b602060405180830381600087803b15801561254057600080fd5b505af192505050801561257157506040513d601f19601f8201168201806040525081019061256e9190612d72565b60015b6125f4573d80600081146125a1576040519150601f19603f3d011682016040523d82523d6000602084013e6125a6565b606091505b506000815114156125ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e390613427565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612649565b600190505b949350505050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cf90613587565b60405180910390fd5b6126e181611a78565b15612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271890613487565b60405180910390fd5b61272d600083836123ca565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461277d919061378c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461283e600083836123cf565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461287190613973565b90600052602060002090601f01602090048101928261289357600085556128da565b82601f106128ac57805160ff19168380011785556128da565b828001600101855582156128da579182015b828111156128d95782518255916020019190600101906128be565b5b5090506128e791906128eb565b5090565b5b808211156129045760008160009055506001016128ec565b5090565b600061291b612916846136e7565b6136c2565b90508281526020810184848401111561293757612936613b78565b5b612942848285613931565b509392505050565b600061295d61295884613718565b6136c2565b90508281526020810184848401111561297957612978613b78565b5b612984848285613931565b509392505050565b60008135905061299b816140f0565b92915050565b60008083601f8401126129b7576129b6613b6e565b5b8235905067ffffffffffffffff8111156129d4576129d3613b69565b5b6020830191508360208202830111156129f0576129ef613b73565b5b9250929050565b600081359050612a0681614107565b92915050565b600081519050612a1b81614107565b92915050565b600081359050612a308161411e565b92915050565b600081359050612a4581614135565b92915050565b600081519050612a5a81614135565b92915050565b600082601f830112612a7557612a74613b6e565b5b8135612a85848260208601612908565b91505092915050565b600081359050612a9d8161414c565b92915050565b600082601f830112612ab857612ab7613b6e565b5b8135612ac884826020860161294a565b91505092915050565b600081359050612ae081614163565b92915050565b600081519050612af581614163565b92915050565b600060208284031215612b1157612b10613b82565b5b6000612b1f8482850161298c565b91505092915050565b60008060408385031215612b3f57612b3e613b82565b5b6000612b4d8582860161298c565b9250506020612b5e8582860161298c565b9150509250929050565b600080600060608486031215612b8157612b80613b82565b5b6000612b8f8682870161298c565b9350506020612ba08682870161298c565b9250506040612bb186828701612ad1565b9150509250925092565b60008060008060808587031215612bd557612bd4613b82565b5b6000612be38782880161298c565b9450506020612bf48782880161298c565b9350506040612c0587828801612ad1565b925050606085013567ffffffffffffffff811115612c2657612c25613b7d565b5b612c3287828801612a60565b91505092959194509250565b60008060408385031215612c5557612c54613b82565b5b6000612c638582860161298c565b9250506020612c74858286016129f7565b9150509250929050565b60008060408385031215612c9557612c94613b82565b5b6000612ca38582860161298c565b9250506020612cb485828601612ad1565b9150509250929050565b600060208284031215612cd457612cd3613b82565b5b6000612ce2848285016129f7565b91505092915050565b600060208284031215612d0157612d00613b82565b5b6000612d0f84828501612a0c565b91505092915050565b600060208284031215612d2e57612d2d613b82565b5b6000612d3c84828501612a21565b91505092915050565b600060208284031215612d5b57612d5a613b82565b5b6000612d6984828501612a36565b91505092915050565b600060208284031215612d8857612d87613b82565b5b6000612d9684828501612a4b565b91505092915050565b600060208284031215612db557612db4613b82565b5b6000612dc384828501612a8e565b91505092915050565b600060208284031215612de257612de1613b82565b5b600082013567ffffffffffffffff811115612e0057612dff613b7d565b5b612e0c84828501612aa3565b91505092915050565b600060208284031215612e2b57612e2a613b82565b5b6000612e3984828501612ad1565b91505092915050565b600060208284031215612e5857612e57613b82565b5b6000612e6684828501612ae6565b91505092915050565b60008060008060608587031215612e8957612e88613b82565b5b6000612e9787828801612ad1565b9450506020612ea887828801612ad1565b935050604085013567ffffffffffffffff811115612ec957612ec8613b7d565b5b612ed5878288016129a1565b925092505092959194509250565b612eec816138a1565b82525050565b612f03612efe826138a1565b613a1f565b82525050565b612f12816138b3565b82525050565b612f21816138bf565b82525050565b6000612f3282613749565b612f3c818561375f565b9350612f4c818560208601613940565b612f5581613b87565b840191505092915050565b6000612f6b82613754565b612f758185613770565b9350612f85818560208601613940565b612f8e81613b87565b840191505092915050565b6000612fa482613754565b612fae8185613781565b9350612fbe818560208601613940565b80840191505092915050565b6000612fd7602383613770565b9150612fe282613ba5565b604082019050919050565b6000612ffa603283613770565b915061300582613bf4565b604082019050919050565b600061301d602683613770565b915061302882613c43565b604082019050919050565b6000613040602583613770565b915061304b82613c92565b604082019050919050565b6000613063601c83613770565b915061306e82613ce1565b602082019050919050565b6000613086602483613770565b915061309182613d0a565b604082019050919050565b60006130a9601983613770565b91506130b482613d59565b602082019050919050565b60006130cc601c83613770565b91506130d782613d82565b602082019050919050565b60006130ef602c83613770565b91506130fa82613dab565b604082019050919050565b6000613112603883613770565b915061311d82613dfa565b604082019050919050565b6000613135602a83613770565b915061314082613e49565b604082019050919050565b6000613158602983613770565b915061316382613e98565b604082019050919050565b600061317b602083613770565b915061318682613ee7565b602082019050919050565b600061319e602c83613770565b91506131a982613f10565b604082019050919050565b60006131c1602083613770565b91506131cc82613f5f565b602082019050919050565b60006131e4602f83613770565b91506131ef82613f88565b604082019050919050565b6000613207602183613770565b915061321282613fd7565b604082019050919050565b600061322a603183613770565b915061323582614026565b604082019050919050565b600061324d601583613770565b915061325882614075565b602082019050919050565b6000613270601883613770565b915061327b8261409e565b602082019050919050565b6000613293601583613770565b915061329e826140c7565b602082019050919050565b6132b281613927565b82525050565b6132c96132c482613927565b613a43565b82525050565b60006132db8285612ef2565b6014820191506132eb82846132b8565b6020820191508190509392505050565b60006133078285612f99565b91506133138284612f99565b91508190509392505050565b60006020820190506133346000830184612ee3565b92915050565b600060808201905061334f6000830187612ee3565b61335c6020830186612ee3565b61336960408301856132a9565b818103606083015261337b8184612f27565b905095945050505050565b600060408201905061339b6000830185612ee3565b6133a860208301846132a9565b9392505050565b60006020820190506133c46000830184612f09565b92915050565b60006020820190506133df6000830184612f18565b92915050565b600060208201905081810360008301526133ff8184612f60565b905092915050565b6000602082019050818103600083015261342081612fca565b9050919050565b6000602082019050818103600083015261344081612fed565b9050919050565b6000602082019050818103600083015261346081613010565b9050919050565b6000602082019050818103600083015261348081613033565b9050919050565b600060208201905081810360008301526134a081613056565b9050919050565b600060208201905081810360008301526134c081613079565b9050919050565b600060208201905081810360008301526134e08161309c565b9050919050565b60006020820190508181036000830152613500816130bf565b9050919050565b60006020820190508181036000830152613520816130e2565b9050919050565b6000602082019050818103600083015261354081613105565b9050919050565b6000602082019050818103600083015261356081613128565b9050919050565b600060208201905081810360008301526135808161314b565b9050919050565b600060208201905081810360008301526135a08161316e565b9050919050565b600060208201905081810360008301526135c081613191565b9050919050565b600060208201905081810360008301526135e0816131b4565b9050919050565b60006020820190508181036000830152613600816131d7565b9050919050565b60006020820190508181036000830152613620816131fa565b9050919050565b600060208201905081810360008301526136408161321d565b9050919050565b6000602082019050818103600083015261366081613240565b9050919050565b6000602082019050818103600083015261368081613263565b9050919050565b600060208201905081810360008301526136a081613286565b9050919050565b60006020820190506136bc60008301846132a9565b92915050565b60006136cc6136dd565b90506136d882826139a5565b919050565b6000604051905090565b600067ffffffffffffffff82111561370257613701613b3a565b5b61370b82613b87565b9050602081019050919050565b600067ffffffffffffffff82111561373357613732613b3a565b5b61373c82613b87565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061379782613927565b91506137a283613927565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137d7576137d6613a7e565b5b828201905092915050565b60006137ed82613927565b91506137f883613927565b92508261380857613807613aad565b5b828204905092915050565b600061381e82613927565b915061382983613927565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561386257613861613a7e565b5b828202905092915050565b600061387882613927565b915061388383613927565b92508282101561389657613895613a7e565b5b828203905092915050565b60006138ac82613907565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613900826138a1565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561395e578082015181840152602081019050613943565b8381111561396d576000848401525b50505050565b6000600282049050600182168061398b57607f821691505b6020821081141561399f5761399e613adc565b5b50919050565b6139ae82613b87565b810181811067ffffffffffffffff821117156139cd576139cc613b3a565b5b80604052505050565b60006139e182613927565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a1457613a13613a7e565b5b600182019050919050565b6000613a2a82613a31565b9050919050565b6000613a3c82613b98565b9050919050565b6000819050919050565b6000613a5882613927565b9150613a6383613927565b925082613a7357613a72613aad565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4e6f7420656e6f7567682070756d61732072656d61696e696e6720746f20636c60008201527f61696d0000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f50726f6f6620646f6573206e6f7420657869737420696e207472656500000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f45786365656473206d617820636c61696d61626c650000000000000000000000600082015250565b7f496e636f7272656374204554482076616c75652073656e740000000000000000600082015250565b7f436c61696d206c697374206e6f74206163746976650000000000000000000000600082015250565b6140f9816138a1565b811461410457600080fd5b50565b614110816138b3565b811461411b57600080fd5b50565b614127816138bf565b811461413257600080fd5b50565b61413e816138c9565b811461414957600080fd5b50565b614155816138f5565b811461416057600080fd5b50565b61416c81613927565b811461417757600080fd5b5056fea26469706673582212202ddd30f678b86db79a1f4bee3c8a37c32f428fdfd19e48bca68fd09343265e6464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000009c4000000000000000000000000000000000000000000000000000000000000003d68747470733a2f2f656575776838317978642e657865637574652d6170692e75732d656173742d312e616d617a6f6e6177732e636f6d2f746f6b656e2f000000
-----Decoded View---------------
Arg [0] : defaultBaseURI (string): https://eeuwh81yxd.execute-api.us-east-1.amazonaws.com/token/
Arg [1] : _maxPumas (uint256): 2500
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000009c4
Arg [2] : 000000000000000000000000000000000000000000000000000000000000003d
Arg [3] : 68747470733a2f2f656575776838317978642e657865637574652d6170692e75
Arg [4] : 732d656173742d312e616d617a6f6e6177732e636f6d2f746f6b656e2f000000
Deployed Bytecode Sourcemap
44553:4107:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31325:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32270:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33830:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33353:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47404:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47724:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47118:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34580:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47564:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44827:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44792:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48338:143;;;;;;;;;;;;;:::i;:::-;;34990:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48489:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47292:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31964:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44729:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44909:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31694:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11908:103;;;;;;;;;;;;;:::i;:::-;;11257:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47876:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32439:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44868:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34123:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46289:758;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35246:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44951:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44757:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32614:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34349:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12166:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31325:305;31427:4;31479:25;31464:40;;;:11;:40;;;;:105;;;;31536:33;31521:48;;;:11;:48;;;;31464:105;:158;;;;31586:36;31610:11;31586:23;:36::i;:::-;31464:158;31444:178;;31325:305;;;:::o;32270:100::-;32324:13;32357:5;32350:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32270:100;:::o;33830:221::-;33906:7;33934:16;33942:7;33934;:16::i;:::-;33926:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34019:15;:24;34035:7;34019:24;;;;;;;;;;;;;;;;;;;;;34012:31;;33830:221;;;:::o;33353:411::-;33434:13;33450:23;33465:7;33450:14;:23::i;:::-;33434:39;;33498:5;33492:11;;:2;:11;;;;33484:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;33592:5;33576:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33601:37;33618:5;33625:12;:10;:12::i;:::-;33601:16;:37::i;:::-;33576:62;33554:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;33735:21;33744:2;33748:7;33735:8;:21::i;:::-;33423:341;33353:411;;:::o;47404:108::-;11488:12;:10;:12::i;:::-;11477:23;;:7;:5;:7::i;:::-;:23;;;11469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47499:5:::1;47482:14;:22;;;;;;;;;;;;:::i;:::-;;47404:108:::0;:::o;47724:124::-;11488:12;:10;:12::i;:::-;11477:23;;:7;:5;:7::i;:::-;:23;;;11469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47829:11:::1;47807:19;:33;;;;47724:124:::0;:::o;47118:103::-;47164:7;47191:22;:12;:20;:22::i;:::-;47184:29;;47118:103;:::o;34580:339::-;34775:41;34794:12;:10;:12::i;:::-;34808:7;34775:18;:41::i;:::-;34767:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34883:28;34893:4;34899:2;34903:7;34883:9;:28::i;:::-;34580:339;;;:::o;47564:125::-;11488:12;:10;:12::i;:::-;11477:23;;:7;:5;:7::i;:::-;:23;;;11469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47664:17:::1;47645:16;;:36;;;;;;;;;;;;;;;;;;47564:125:::0;:::o;44827:34::-;;;;:::o;44792:28::-;;;;;;;;;;;;;:::o;48338:143::-;11488:12;:10;:12::i;:::-;11477:23;;:7;:5;:7::i;:::-;:23;;;11469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48386:15:::1;48404:21;48386:39;;48444:10;48436:28;;:37;48465:7;48436:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;48375:106;48338:143::o:0;34990:185::-;35128:39;35145:4;35151:2;35155:7;35128:39;;;;;;;;;;;;:16;:39::i;:::-;34990:185;;;:::o;48489:168::-;11488:12;:10;:12::i;:::-;11477:23;;:7;:5;:7::i;:::-;:23;;;11469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48555:15:::1;48573:5;:15;;;48597:4;48573:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48555:48;;48614:5;:14;;;48629:10;48641:7;48614:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;48544:113;48489:168:::0;:::o;47292:104::-;11488:12;:10;:12::i;:::-;11477:23;;:7;:5;:7::i;:::-;:23;;;11469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47378:10:::1;47368:7;:20;;;;;;;;;;;;:::i;:::-;;47292:104:::0;:::o;31964:239::-;32036:7;32056:13;32072:7;:16;32080:7;32072:16;;;;;;;;;;;;;;;;;;;;;32056:32;;32124:1;32107:19;;:5;:19;;;;32099:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32190:5;32183:12;;;31964:239;;;:::o;44729:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44909:33::-;;;:::o;31694:208::-;31766:7;31811:1;31794:19;;:5;:19;;;;31786:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31878:9;:16;31888:5;31878:16;;;;;;;;;;;;;;;;31871:23;;31694:208;;;:::o;11908:103::-;11488:12;:10;:12::i;:::-;11477:23;;:7;:5;:7::i;:::-;:23;;;11469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11973:30:::1;12000:1;11973:18;:30::i;:::-;11908:103::o:0;11257:87::-;11303:7;11330:6;;;;;;;;;;;11323:13;;11257:87;:::o;47876:86::-;11488:12;:10;:12::i;:::-;11477:23;;:7;:5;:7::i;:::-;:23;;;11469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47948:6:::1;47940:5;:14;;;;47876:86:::0;:::o;32439:104::-;32495:13;32528:7;32521:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32439:104;:::o;44868:32::-;;;;:::o;34123:155::-;34218:52;34237:12;:10;:12::i;:::-;34251:8;34261;34218:18;:52::i;:::-;34123:155;;:::o;46289:758::-;45128:16;;;;;;;;;;;45120:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;46502:14:::1;45324:8;45306:14;45281:22;:12;:20;:22::i;:::-;:39;;;;:::i;:::-;:51;;45259:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;46546:11:::2;;46559:19;;46580:12;45586:158;45623:11;;45586:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45653:4;45703:10;45715:12;45686:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45676:53;;;;;;45586:18;:158::i;:::-;45564:236;;;;;;;;;;;;:::i;:::-;;;;;;;;;46620:14:::3;45937:9;45919:14;45911:5;;:22;;;;:::i;:::-;:35;45889:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;46652:24:::4;46679:19;:31;46699:10;46679:31;;;;;;;;;;;;;;;;46652:58;;46780:12;46762:14;46743:16;:33;;;;:::i;:::-;:49;;46721:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;46905:14;46886:16;:33;;;;:::i;:::-;46852:19;:31;46872:10;46852:31;;;;;;;;;;;;;;;:67;;;;46937:9;46932:108;46956:14;46952:1;:18;46932:108;;;46992:36;47002:10;47014:13;:11;:13::i;:::-;46992:9;:36::i;:::-;46972:3;;;;;:::i;:::-;;;;46932:108;;;;46641:406;45811:1:::3;45406::::2;;;;45181::::1;46289:758:::0;;;;:::o;35246:328::-;35421:41;35440:12;:10;:12::i;:::-;35454:7;35421:18;:41::i;:::-;35413:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35527:39;35541:4;35547:2;35551:7;35560:5;35527:13;:39::i;:::-;35246:328;;;;:::o;44951:54::-;;;;;;;;;;;;;;;;;:::o;44757:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32614:334::-;32687:13;32721:16;32729:7;32721;:16::i;:::-;32713:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32802:21;32826:10;:8;:10::i;:::-;32802:34;;32878:1;32860:7;32854:21;:25;:86;;;;;;;;;;;;;;;;;32906:7;32915:18;:7;:16;:18::i;:::-;32889:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32854:86;32847:93;;;32614:334;;;:::o;34349:164::-;34446:4;34470:18;:25;34489:5;34470:25;;;;;;;;;;;;;;;:35;34496:8;34470:35;;;;;;;;;;;;;;;;;;;;;;;;;34463:42;;34349:164;;;;:::o;12166:201::-;11488:12;:10;:12::i;:::-;11477:23;;:7;:5;:7::i;:::-;:23;;;11469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12275:1:::1;12255:22;;:8;:22;;;;12247:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12331:28;12350:8;12331:18;:28::i;:::-;12166:201:::0;:::o;24064:157::-;24149:4;24188:25;24173:40;;;:11;:40;;;;24166:47;;24064:157;;;:::o;37084:127::-;37149:4;37201:1;37173:30;;:7;:16;37181:7;37173:16;;;;;;;;;;;;;;;;;;;;;:30;;;;37166:37;;37084:127;;;:::o;9981:98::-;10034:7;10061:10;10054:17;;9981:98;:::o;41230:174::-;41332:2;41305:15;:24;41321:7;41305:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41388:7;41384:2;41350:46;;41359:23;41374:7;41359:14;:23::i;:::-;41350:46;;;;;;;;;;;;41230:174;;:::o;6585:114::-;6650:7;6677;:14;;;6670:21;;6585:114;;;:::o;37378:348::-;37471:4;37496:16;37504:7;37496;:16::i;:::-;37488:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37572:13;37588:23;37603:7;37588:14;:23::i;:::-;37572:39;;37641:5;37630:16;;:7;:16;;;:52;;;;37650:32;37667:5;37674:7;37650:16;:32::i;:::-;37630:52;:87;;;;37710:7;37686:31;;:20;37698:7;37686:11;:20::i;:::-;:31;;;37630:87;37622:96;;;37378:348;;;;:::o;40487:625::-;40646:4;40619:31;;:23;40634:7;40619:14;:23::i;:::-;:31;;;40611:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;40725:1;40711:16;;:2;:16;;;;40703:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40781:39;40802:4;40808:2;40812:7;40781:20;:39::i;:::-;40885:29;40902:1;40906:7;40885:8;:29::i;:::-;40946:1;40927:9;:15;40937:4;40927:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;40975:1;40958:9;:13;40968:2;40958:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41006:2;40987:7;:16;40995:7;40987:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41045:7;41041:2;41026:27;;41035:4;41026:27;;;;;;;;;;;;41066:38;41086:4;41092:2;41096:7;41066:19;:38::i;:::-;40487:625;;;:::o;12527:191::-;12601:16;12620:6;;;;;;;;;;;12601:25;;12646:8;12637:6;;:17;;;;;;;;;;;;;;;;;;12701:8;12670:40;;12691:8;12670:40;;;;;;;;;;;;12590:128;12527:191;:::o;41546:315::-;41701:8;41692:17;;:5;:17;;;;41684:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;41788:8;41750:18;:25;41769:5;41750:25;;;;;;;;;;;;;;;:35;41776:8;41750:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;41834:8;41812:41;;41827:5;41812:41;;;41844:8;41812:41;;;;;;:::i;:::-;;;;;;;;41546:315;;;:::o;4248:190::-;4373:4;4426;4397:25;4410:5;4417:4;4397:12;:25::i;:::-;:33;4390:40;;4248:190;;;;;:::o;48027:132::-;48067:7;48087:24;:12;:22;:24::i;:::-;48129:22;:12;:20;:22::i;:::-;48122:29;;48027:132;:::o;38068:110::-;38144:26;38154:2;38158:7;38144:26;;;;;;;;;;;;:9;:26::i;:::-;38068:110;;:::o;36456:315::-;36613:28;36623:4;36629:2;36633:7;36613:9;:28::i;:::-;36660:48;36683:4;36689:2;36693:7;36702:5;36660:22;:48::i;:::-;36652:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;36456:315;;;;:::o;48211:100::-;48263:13;48296:7;48289:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48211:100;:::o;7543:723::-;7599:13;7829:1;7820:5;:10;7816:53;;;7847:10;;;;;;;;;;;;;;;;;;;;;7816:53;7879:12;7894:5;7879:20;;7910:14;7935:78;7950:1;7942:4;:9;7935:78;;7968:8;;;;;:::i;:::-;;;;7999:2;7991:10;;;;;:::i;:::-;;;7935:78;;;8023:19;8055:6;8045:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8023:39;;8073:154;8089:1;8080:5;:10;8073:154;;8117:1;8107:11;;;;;:::i;:::-;;;8184:2;8176:5;:10;;;;:::i;:::-;8163:2;:24;;;;:::i;:::-;8150:39;;8133:6;8140;8133:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8213:2;8204:11;;;;;:::i;:::-;;;8073:154;;;8251:6;8237:21;;;;;7543:723;;;;:::o;43797:126::-;;;;:::o;44308:125::-;;;;:::o;4799:675::-;4882:7;4902:20;4925:4;4902:27;;4945:9;4940:497;4964:5;:12;4960:1;:16;4940:497;;;4998:20;5021:5;5027:1;5021:8;;;;;;;;:::i;:::-;;;;;;;;4998:31;;5064:12;5048;:28;5044:382;;5191:42;5206:12;5220;5191:14;:42::i;:::-;5176:57;;5044:382;;;5368:42;5383:12;5397;5368:14;:42::i;:::-;5353:57;;5044:382;4983:454;4978:3;;;;;:::i;:::-;;;;4940:497;;;;5454:12;5447:19;;;4799:675;;;;:::o;6707:127::-;6814:1;6796:7;:14;;;:19;;;;;;;;;;;6707:127;:::o;38405:321::-;38535:18;38541:2;38545:7;38535:5;:18::i;:::-;38586:54;38617:1;38621:2;38625:7;38634:5;38586:22;:54::i;:::-;38564:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;38405:321;;;:::o;42426:799::-;42581:4;42602:15;:2;:13;;;:15::i;:::-;42598:620;;;42654:2;42638:36;;;42675:12;:10;:12::i;:::-;42689:4;42695:7;42704:5;42638:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42634:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42897:1;42880:6;:13;:18;42876:272;;;42923:60;;;;;;;;;;:::i;:::-;;;;;;;;42876:272;43098:6;43092:13;43083:6;43079:2;43075:15;43068:38;42634:529;42771:41;;;42761:51;;;:6;:51;;;;42754:58;;;;;42598:620;43202:4;43195:11;;42426:799;;;;;;;:::o;5482:224::-;5550:13;5613:1;5607:4;5600:15;5642:1;5636:4;5629:15;5683:4;5677;5667:21;5658:30;;5482:224;;;;:::o;39062:439::-;39156:1;39142:16;;:2;:16;;;;39134:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39215:16;39223:7;39215;:16::i;:::-;39214:17;39206:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39277:45;39306:1;39310:2;39314:7;39277:20;:45::i;:::-;39352:1;39335:9;:13;39345:2;39335:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39383:2;39364:7;:16;39372:7;39364:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39428:7;39424:2;39403:33;;39420:1;39403:33;;;;;;;;;;;;39449:44;39477:1;39481:2;39485:7;39449:19;:44::i;:::-;39062:439;;:::o;13958:326::-;14018:4;14275:1;14253:7;:19;;;:23;14246:30;;13958:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::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:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1770:5;1801:6;1795:13;1786:22;;1817:30;1841:5;1817:30;:::i;:::-;1716:137;;;;:::o;1859:139::-;1905:5;1943:6;1930:20;1921:29;;1959:33;1986:5;1959:33;:::i;:::-;1859:139;;;;:::o;2004:137::-;2049:5;2087:6;2074:20;2065:29;;2103:32;2129:5;2103:32;:::i;:::-;2004:137;;;;:::o;2147:141::-;2203:5;2234:6;2228:13;2219:22;;2250:32;2276:5;2250:32;:::i;:::-;2147:141;;;;:::o;2307:338::-;2362:5;2411:3;2404:4;2396:6;2392:17;2388:27;2378:122;;2419:79;;:::i;:::-;2378:122;2536:6;2523:20;2561:78;2635:3;2627:6;2620:4;2612:6;2608:17;2561:78;:::i;:::-;2552:87;;2368:277;2307:338;;;;:::o;2651:165::-;2710:5;2748:6;2735:20;2726:29;;2764:46;2804:5;2764:46;:::i;:::-;2651:165;;;;:::o;2836:340::-;2892:5;2941:3;2934:4;2926:6;2922:17;2918:27;2908:122;;2949:79;;:::i;:::-;2908:122;3066:6;3053:20;3091:79;3166:3;3158:6;3151:4;3143:6;3139:17;3091:79;:::i;:::-;3082:88;;2898:278;2836:340;;;;:::o;3182:139::-;3228:5;3266:6;3253:20;3244:29;;3282:33;3309:5;3282:33;:::i;:::-;3182:139;;;;:::o;3327:143::-;3384:5;3415:6;3409:13;3400:22;;3431:33;3458:5;3431:33;:::i;:::-;3327:143;;;;:::o;3476:329::-;3535:6;3584:2;3572:9;3563:7;3559:23;3555:32;3552:119;;;3590:79;;:::i;:::-;3552:119;3710:1;3735:53;3780:7;3771:6;3760:9;3756:22;3735:53;:::i;:::-;3725:63;;3681:117;3476:329;;;;:::o;3811:474::-;3879:6;3887;3936:2;3924:9;3915:7;3911:23;3907:32;3904:119;;;3942:79;;:::i;:::-;3904:119;4062:1;4087:53;4132:7;4123:6;4112:9;4108:22;4087:53;:::i;:::-;4077:63;;4033:117;4189:2;4215:53;4260:7;4251:6;4240:9;4236:22;4215:53;:::i;:::-;4205:63;;4160:118;3811:474;;;;;:::o;4291:619::-;4368:6;4376;4384;4433:2;4421:9;4412:7;4408:23;4404:32;4401:119;;;4439:79;;:::i;:::-;4401:119;4559:1;4584:53;4629:7;4620:6;4609:9;4605:22;4584:53;:::i;:::-;4574:63;;4530:117;4686:2;4712:53;4757:7;4748:6;4737:9;4733:22;4712:53;:::i;:::-;4702:63;;4657:118;4814:2;4840:53;4885:7;4876:6;4865:9;4861:22;4840:53;:::i;:::-;4830:63;;4785:118;4291:619;;;;;:::o;4916:943::-;5011:6;5019;5027;5035;5084:3;5072:9;5063:7;5059:23;5055:33;5052:120;;;5091:79;;:::i;:::-;5052:120;5211:1;5236:53;5281:7;5272:6;5261:9;5257:22;5236:53;:::i;:::-;5226:63;;5182:117;5338:2;5364:53;5409:7;5400:6;5389:9;5385:22;5364:53;:::i;:::-;5354:63;;5309:118;5466:2;5492:53;5537:7;5528:6;5517:9;5513:22;5492:53;:::i;:::-;5482:63;;5437:118;5622:2;5611:9;5607:18;5594:32;5653:18;5645:6;5642:30;5639:117;;;5675:79;;:::i;:::-;5639:117;5780:62;5834:7;5825:6;5814:9;5810:22;5780:62;:::i;:::-;5770:72;;5565:287;4916:943;;;;;;;:::o;5865:468::-;5930:6;5938;5987:2;5975:9;5966:7;5962:23;5958:32;5955:119;;;5993:79;;:::i;:::-;5955:119;6113:1;6138:53;6183:7;6174:6;6163:9;6159:22;6138:53;:::i;:::-;6128:63;;6084:117;6240:2;6266:50;6308:7;6299:6;6288:9;6284:22;6266:50;:::i;:::-;6256:60;;6211:115;5865:468;;;;;:::o;6339:474::-;6407:6;6415;6464:2;6452:9;6443:7;6439:23;6435:32;6432:119;;;6470:79;;:::i;:::-;6432:119;6590:1;6615:53;6660:7;6651:6;6640:9;6636:22;6615:53;:::i;:::-;6605:63;;6561:117;6717:2;6743:53;6788:7;6779:6;6768:9;6764:22;6743:53;:::i;:::-;6733:63;;6688:118;6339:474;;;;;:::o;6819:323::-;6875:6;6924:2;6912:9;6903:7;6899:23;6895:32;6892:119;;;6930:79;;:::i;:::-;6892:119;7050:1;7075:50;7117:7;7108:6;7097:9;7093:22;7075:50;:::i;:::-;7065:60;;7021:114;6819:323;;;;:::o;7148:345::-;7215:6;7264:2;7252:9;7243:7;7239:23;7235:32;7232:119;;;7270:79;;:::i;:::-;7232:119;7390:1;7415:61;7468:7;7459:6;7448:9;7444:22;7415:61;:::i;:::-;7405:71;;7361:125;7148:345;;;;:::o;7499:329::-;7558:6;7607:2;7595:9;7586:7;7582:23;7578:32;7575:119;;;7613:79;;:::i;:::-;7575:119;7733:1;7758:53;7803:7;7794:6;7783:9;7779:22;7758:53;:::i;:::-;7748:63;;7704:117;7499:329;;;;:::o;7834:327::-;7892:6;7941:2;7929:9;7920:7;7916:23;7912:32;7909:119;;;7947:79;;:::i;:::-;7909:119;8067:1;8092:52;8136:7;8127:6;8116:9;8112:22;8092:52;:::i;:::-;8082:62;;8038:116;7834:327;;;;:::o;8167:349::-;8236:6;8285:2;8273:9;8264:7;8260:23;8256:32;8253:119;;;8291:79;;:::i;:::-;8253:119;8411:1;8436:63;8491:7;8482:6;8471:9;8467:22;8436:63;:::i;:::-;8426:73;;8382:127;8167:349;;;;:::o;8522:355::-;8594:6;8643:2;8631:9;8622:7;8618:23;8614:32;8611:119;;;8649:79;;:::i;:::-;8611:119;8769:1;8794:66;8852:7;8843:6;8832:9;8828:22;8794:66;:::i;:::-;8784:76;;8740:130;8522:355;;;;:::o;8883:509::-;8952:6;9001:2;8989:9;8980:7;8976:23;8972:32;8969:119;;;9007:79;;:::i;:::-;8969:119;9155:1;9144:9;9140:17;9127:31;9185:18;9177:6;9174:30;9171:117;;;9207:79;;:::i;:::-;9171:117;9312:63;9367:7;9358:6;9347:9;9343:22;9312:63;:::i;:::-;9302:73;;9098:287;8883:509;;;;:::o;9398:329::-;9457:6;9506:2;9494:9;9485:7;9481:23;9477:32;9474:119;;;9512:79;;:::i;:::-;9474:119;9632:1;9657:53;9702:7;9693:6;9682:9;9678:22;9657:53;:::i;:::-;9647:63;;9603:117;9398:329;;;;:::o;9733:351::-;9803:6;9852:2;9840:9;9831:7;9827:23;9823:32;9820:119;;;9858:79;;:::i;:::-;9820:119;9978:1;10003:64;10059:7;10050:6;10039:9;10035:22;10003:64;:::i;:::-;9993:74;;9949:128;9733:351;;;;:::o;10090:849::-;10194:6;10202;10210;10218;10267:2;10255:9;10246:7;10242:23;10238:32;10235:119;;;10273:79;;:::i;:::-;10235:119;10393:1;10418:53;10463:7;10454:6;10443:9;10439:22;10418:53;:::i;:::-;10408:63;;10364:117;10520:2;10546:53;10591:7;10582:6;10571:9;10567:22;10546:53;:::i;:::-;10536:63;;10491:118;10676:2;10665:9;10661:18;10648:32;10707:18;10699:6;10696:30;10693:117;;;10729:79;;:::i;:::-;10693:117;10842:80;10914:7;10905:6;10894:9;10890:22;10842:80;:::i;:::-;10824:98;;;;10619:313;10090:849;;;;;;;:::o;10945:118::-;11032:24;11050:5;11032:24;:::i;:::-;11027:3;11020:37;10945:118;;:::o;11069:157::-;11174:45;11194:24;11212:5;11194:24;:::i;:::-;11174:45;:::i;:::-;11169:3;11162:58;11069:157;;:::o;11232:109::-;11313:21;11328:5;11313:21;:::i;:::-;11308:3;11301:34;11232:109;;:::o;11347:118::-;11434:24;11452:5;11434:24;:::i;:::-;11429:3;11422:37;11347:118;;:::o;11471:360::-;11557:3;11585:38;11617:5;11585:38;:::i;:::-;11639:70;11702:6;11697:3;11639:70;:::i;:::-;11632:77;;11718:52;11763:6;11758:3;11751:4;11744:5;11740:16;11718:52;:::i;:::-;11795:29;11817:6;11795:29;:::i;:::-;11790:3;11786:39;11779:46;;11561:270;11471:360;;;;:::o;11837:364::-;11925:3;11953:39;11986:5;11953:39;:::i;:::-;12008:71;12072:6;12067:3;12008:71;:::i;:::-;12001:78;;12088:52;12133:6;12128:3;12121:4;12114:5;12110:16;12088:52;:::i;:::-;12165:29;12187:6;12165:29;:::i;:::-;12160:3;12156:39;12149:46;;11929:272;11837:364;;;;:::o;12207:377::-;12313:3;12341:39;12374:5;12341:39;:::i;:::-;12396:89;12478:6;12473:3;12396:89;:::i;:::-;12389:96;;12494:52;12539:6;12534:3;12527:4;12520:5;12516:16;12494:52;:::i;:::-;12571:6;12566:3;12562:16;12555:23;;12317:267;12207:377;;;;:::o;12590:366::-;12732:3;12753:67;12817:2;12812:3;12753:67;:::i;:::-;12746:74;;12829:93;12918:3;12829:93;:::i;:::-;12947:2;12942:3;12938:12;12931:19;;12590:366;;;:::o;12962:::-;13104:3;13125:67;13189:2;13184:3;13125:67;:::i;:::-;13118:74;;13201:93;13290:3;13201:93;:::i;:::-;13319:2;13314:3;13310:12;13303:19;;12962:366;;;:::o;13334:::-;13476:3;13497:67;13561:2;13556:3;13497:67;:::i;:::-;13490:74;;13573:93;13662:3;13573:93;:::i;:::-;13691:2;13686:3;13682:12;13675:19;;13334:366;;;:::o;13706:::-;13848:3;13869:67;13933:2;13928:3;13869:67;:::i;:::-;13862:74;;13945:93;14034:3;13945:93;:::i;:::-;14063:2;14058:3;14054:12;14047:19;;13706:366;;;:::o;14078:::-;14220:3;14241:67;14305:2;14300:3;14241:67;:::i;:::-;14234:74;;14317:93;14406:3;14317:93;:::i;:::-;14435:2;14430:3;14426:12;14419:19;;14078:366;;;:::o;14450:::-;14592:3;14613:67;14677:2;14672:3;14613:67;:::i;:::-;14606:74;;14689:93;14778:3;14689:93;:::i;:::-;14807:2;14802:3;14798:12;14791:19;;14450:366;;;:::o;14822:::-;14964:3;14985:67;15049:2;15044:3;14985:67;:::i;:::-;14978:74;;15061:93;15150:3;15061:93;:::i;:::-;15179:2;15174:3;15170:12;15163:19;;14822:366;;;:::o;15194:::-;15336:3;15357:67;15421:2;15416:3;15357:67;:::i;:::-;15350:74;;15433:93;15522:3;15433:93;:::i;:::-;15551:2;15546:3;15542:12;15535:19;;15194:366;;;:::o;15566:::-;15708:3;15729:67;15793:2;15788:3;15729:67;:::i;:::-;15722:74;;15805:93;15894:3;15805:93;:::i;:::-;15923:2;15918:3;15914:12;15907:19;;15566:366;;;:::o;15938:::-;16080:3;16101:67;16165:2;16160:3;16101:67;:::i;:::-;16094:74;;16177:93;16266:3;16177:93;:::i;:::-;16295:2;16290:3;16286:12;16279:19;;15938:366;;;:::o;16310:::-;16452:3;16473:67;16537:2;16532:3;16473:67;:::i;:::-;16466:74;;16549:93;16638:3;16549:93;:::i;:::-;16667:2;16662:3;16658:12;16651:19;;16310:366;;;:::o;16682:::-;16824:3;16845:67;16909:2;16904:3;16845:67;:::i;:::-;16838:74;;16921:93;17010:3;16921:93;:::i;:::-;17039:2;17034:3;17030:12;17023:19;;16682:366;;;:::o;17054:::-;17196:3;17217:67;17281:2;17276:3;17217:67;:::i;:::-;17210:74;;17293:93;17382:3;17293:93;:::i;:::-;17411:2;17406:3;17402:12;17395:19;;17054:366;;;:::o;17426:::-;17568:3;17589:67;17653:2;17648:3;17589:67;:::i;:::-;17582:74;;17665:93;17754:3;17665:93;:::i;:::-;17783:2;17778:3;17774:12;17767:19;;17426:366;;;:::o;17798:::-;17940:3;17961:67;18025:2;18020:3;17961:67;:::i;:::-;17954:74;;18037:93;18126:3;18037:93;:::i;:::-;18155:2;18150:3;18146:12;18139:19;;17798:366;;;:::o;18170:::-;18312:3;18333:67;18397:2;18392:3;18333:67;:::i;:::-;18326:74;;18409:93;18498:3;18409:93;:::i;:::-;18527:2;18522:3;18518:12;18511:19;;18170:366;;;:::o;18542:::-;18684:3;18705:67;18769:2;18764:3;18705:67;:::i;:::-;18698:74;;18781:93;18870:3;18781:93;:::i;:::-;18899:2;18894:3;18890:12;18883:19;;18542:366;;;:::o;18914:::-;19056:3;19077:67;19141:2;19136:3;19077:67;:::i;:::-;19070:74;;19153:93;19242:3;19153:93;:::i;:::-;19271:2;19266:3;19262:12;19255:19;;18914:366;;;:::o;19286:::-;19428:3;19449:67;19513:2;19508:3;19449:67;:::i;:::-;19442:74;;19525:93;19614:3;19525:93;:::i;:::-;19643:2;19638:3;19634:12;19627:19;;19286:366;;;:::o;19658:::-;19800:3;19821:67;19885:2;19880:3;19821:67;:::i;:::-;19814:74;;19897:93;19986:3;19897:93;:::i;:::-;20015:2;20010:3;20006:12;19999:19;;19658:366;;;:::o;20030:::-;20172:3;20193:67;20257:2;20252:3;20193:67;:::i;:::-;20186:74;;20269:93;20358:3;20269:93;:::i;:::-;20387:2;20382:3;20378:12;20371:19;;20030:366;;;:::o;20402:118::-;20489:24;20507:5;20489:24;:::i;:::-;20484:3;20477:37;20402:118;;:::o;20526:157::-;20631:45;20651:24;20669:5;20651:24;:::i;:::-;20631:45;:::i;:::-;20626:3;20619:58;20526:157;;:::o;20689:397::-;20829:3;20844:75;20915:3;20906:6;20844:75;:::i;:::-;20944:2;20939:3;20935:12;20928:19;;20957:75;21028:3;21019:6;20957:75;:::i;:::-;21057:2;21052:3;21048:12;21041:19;;21077:3;21070:10;;20689:397;;;;;:::o;21092:435::-;21272:3;21294:95;21385:3;21376:6;21294:95;:::i;:::-;21287:102;;21406:95;21497:3;21488:6;21406:95;:::i;:::-;21399:102;;21518:3;21511:10;;21092:435;;;;;:::o;21533:222::-;21626:4;21664:2;21653:9;21649:18;21641:26;;21677:71;21745:1;21734:9;21730:17;21721:6;21677:71;:::i;:::-;21533:222;;;;:::o;21761:640::-;21956:4;21994:3;21983:9;21979:19;21971:27;;22008:71;22076:1;22065:9;22061:17;22052:6;22008:71;:::i;:::-;22089:72;22157:2;22146:9;22142:18;22133:6;22089:72;:::i;:::-;22171;22239:2;22228:9;22224:18;22215:6;22171:72;:::i;:::-;22290:9;22284:4;22280:20;22275:2;22264:9;22260:18;22253:48;22318:76;22389:4;22380:6;22318:76;:::i;:::-;22310:84;;21761:640;;;;;;;:::o;22407:332::-;22528:4;22566:2;22555:9;22551:18;22543:26;;22579:71;22647:1;22636:9;22632:17;22623:6;22579:71;:::i;:::-;22660:72;22728:2;22717:9;22713:18;22704:6;22660:72;:::i;:::-;22407:332;;;;;:::o;22745:210::-;22832:4;22870:2;22859:9;22855:18;22847:26;;22883:65;22945:1;22934:9;22930:17;22921:6;22883:65;:::i;:::-;22745:210;;;;:::o;22961:222::-;23054:4;23092:2;23081:9;23077:18;23069:26;;23105:71;23173:1;23162:9;23158:17;23149:6;23105:71;:::i;:::-;22961:222;;;;:::o;23189:313::-;23302:4;23340:2;23329:9;23325:18;23317:26;;23389:9;23383:4;23379:20;23375:1;23364:9;23360:17;23353:47;23417:78;23490:4;23481:6;23417:78;:::i;:::-;23409:86;;23189:313;;;;:::o;23508:419::-;23674:4;23712:2;23701:9;23697:18;23689:26;;23761:9;23755:4;23751:20;23747:1;23736:9;23732:17;23725:47;23789:131;23915:4;23789:131;:::i;:::-;23781:139;;23508:419;;;:::o;23933:::-;24099:4;24137:2;24126:9;24122:18;24114:26;;24186:9;24180:4;24176:20;24172:1;24161:9;24157:17;24150:47;24214:131;24340:4;24214:131;:::i;:::-;24206:139;;23933:419;;;:::o;24358:::-;24524:4;24562:2;24551:9;24547:18;24539:26;;24611:9;24605:4;24601:20;24597:1;24586:9;24582:17;24575:47;24639:131;24765:4;24639:131;:::i;:::-;24631:139;;24358:419;;;:::o;24783:::-;24949:4;24987:2;24976:9;24972:18;24964:26;;25036:9;25030:4;25026:20;25022:1;25011:9;25007:17;25000:47;25064:131;25190:4;25064:131;:::i;:::-;25056:139;;24783:419;;;:::o;25208:::-;25374:4;25412:2;25401:9;25397:18;25389:26;;25461:9;25455:4;25451:20;25447:1;25436:9;25432:17;25425:47;25489:131;25615:4;25489:131;:::i;:::-;25481:139;;25208:419;;;:::o;25633:::-;25799:4;25837:2;25826:9;25822:18;25814:26;;25886:9;25880:4;25876:20;25872:1;25861:9;25857:17;25850:47;25914:131;26040:4;25914:131;:::i;:::-;25906:139;;25633:419;;;:::o;26058:::-;26224:4;26262:2;26251:9;26247:18;26239:26;;26311:9;26305:4;26301:20;26297:1;26286:9;26282:17;26275:47;26339:131;26465:4;26339:131;:::i;:::-;26331:139;;26058:419;;;:::o;26483:::-;26649:4;26687:2;26676:9;26672:18;26664:26;;26736:9;26730:4;26726:20;26722:1;26711:9;26707:17;26700:47;26764:131;26890:4;26764:131;:::i;:::-;26756:139;;26483:419;;;:::o;26908:::-;27074:4;27112:2;27101:9;27097:18;27089:26;;27161:9;27155:4;27151:20;27147:1;27136:9;27132:17;27125:47;27189:131;27315:4;27189:131;:::i;:::-;27181:139;;26908:419;;;:::o;27333:::-;27499:4;27537:2;27526:9;27522:18;27514:26;;27586:9;27580:4;27576:20;27572:1;27561:9;27557:17;27550:47;27614:131;27740:4;27614:131;:::i;:::-;27606:139;;27333:419;;;:::o;27758:::-;27924:4;27962:2;27951:9;27947:18;27939:26;;28011:9;28005:4;28001:20;27997:1;27986:9;27982:17;27975:47;28039:131;28165:4;28039:131;:::i;:::-;28031:139;;27758:419;;;:::o;28183:::-;28349:4;28387:2;28376:9;28372:18;28364:26;;28436:9;28430:4;28426:20;28422:1;28411:9;28407:17;28400:47;28464:131;28590:4;28464:131;:::i;:::-;28456:139;;28183:419;;;:::o;28608:::-;28774:4;28812:2;28801:9;28797:18;28789:26;;28861:9;28855:4;28851:20;28847:1;28836:9;28832:17;28825:47;28889:131;29015:4;28889:131;:::i;:::-;28881:139;;28608:419;;;:::o;29033:::-;29199:4;29237:2;29226:9;29222:18;29214:26;;29286:9;29280:4;29276:20;29272:1;29261:9;29257:17;29250:47;29314:131;29440:4;29314:131;:::i;:::-;29306:139;;29033:419;;;:::o;29458:::-;29624:4;29662:2;29651:9;29647:18;29639:26;;29711:9;29705:4;29701:20;29697:1;29686:9;29682:17;29675:47;29739:131;29865:4;29739:131;:::i;:::-;29731:139;;29458:419;;;:::o;29883:::-;30049:4;30087:2;30076:9;30072:18;30064:26;;30136:9;30130:4;30126:20;30122:1;30111:9;30107:17;30100:47;30164:131;30290:4;30164:131;:::i;:::-;30156:139;;29883:419;;;:::o;30308:::-;30474:4;30512:2;30501:9;30497:18;30489:26;;30561:9;30555:4;30551:20;30547:1;30536:9;30532:17;30525:47;30589:131;30715:4;30589:131;:::i;:::-;30581:139;;30308:419;;;:::o;30733:::-;30899:4;30937:2;30926:9;30922:18;30914:26;;30986:9;30980:4;30976:20;30972:1;30961:9;30957:17;30950:47;31014:131;31140:4;31014:131;:::i;:::-;31006:139;;30733:419;;;:::o;31158:::-;31324:4;31362:2;31351:9;31347:18;31339:26;;31411:9;31405:4;31401:20;31397:1;31386:9;31382:17;31375:47;31439:131;31565:4;31439:131;:::i;:::-;31431:139;;31158:419;;;:::o;31583:::-;31749:4;31787:2;31776:9;31772:18;31764:26;;31836:9;31830:4;31826:20;31822:1;31811:9;31807:17;31800:47;31864:131;31990:4;31864:131;:::i;:::-;31856:139;;31583:419;;;:::o;32008:::-;32174:4;32212:2;32201:9;32197:18;32189:26;;32261:9;32255:4;32251:20;32247:1;32236:9;32232:17;32225:47;32289:131;32415:4;32289:131;:::i;:::-;32281:139;;32008:419;;;:::o;32433:222::-;32526:4;32564:2;32553:9;32549:18;32541:26;;32577:71;32645:1;32634:9;32630:17;32621:6;32577:71;:::i;:::-;32433:222;;;;:::o;32661:129::-;32695:6;32722:20;;:::i;:::-;32712:30;;32751:33;32779:4;32771:6;32751:33;:::i;:::-;32661:129;;;:::o;32796:75::-;32829:6;32862:2;32856:9;32846:19;;32796:75;:::o;32877:307::-;32938:4;33028:18;33020:6;33017:30;33014:56;;;33050:18;;:::i;:::-;33014:56;33088:29;33110:6;33088:29;:::i;:::-;33080:37;;33172:4;33166;33162:15;33154:23;;32877:307;;;:::o;33190:308::-;33252:4;33342:18;33334:6;33331:30;33328:56;;;33364:18;;:::i;:::-;33328:56;33402:29;33424:6;33402:29;:::i;:::-;33394:37;;33486:4;33480;33476:15;33468:23;;33190:308;;;:::o;33504:98::-;33555:6;33589:5;33583:12;33573:22;;33504:98;;;:::o;33608:99::-;33660:6;33694:5;33688:12;33678:22;;33608:99;;;:::o;33713:168::-;33796:11;33830:6;33825:3;33818:19;33870:4;33865:3;33861:14;33846:29;;33713:168;;;;:::o;33887:169::-;33971:11;34005:6;34000:3;33993:19;34045:4;34040:3;34036:14;34021:29;;33887:169;;;;:::o;34062:148::-;34164:11;34201:3;34186:18;;34062:148;;;;:::o;34216:305::-;34256:3;34275:20;34293:1;34275:20;:::i;:::-;34270:25;;34309:20;34327:1;34309:20;:::i;:::-;34304:25;;34463:1;34395:66;34391:74;34388:1;34385:81;34382:107;;;34469:18;;:::i;:::-;34382:107;34513:1;34510;34506:9;34499:16;;34216:305;;;;:::o;34527:185::-;34567:1;34584:20;34602:1;34584:20;:::i;:::-;34579:25;;34618:20;34636:1;34618:20;:::i;:::-;34613:25;;34657:1;34647:35;;34662:18;;:::i;:::-;34647:35;34704:1;34701;34697:9;34692:14;;34527:185;;;;:::o;34718:348::-;34758:7;34781:20;34799:1;34781:20;:::i;:::-;34776:25;;34815:20;34833:1;34815:20;:::i;:::-;34810:25;;35003:1;34935:66;34931:74;34928:1;34925:81;34920:1;34913:9;34906:17;34902:105;34899:131;;;35010:18;;:::i;:::-;34899:131;35058:1;35055;35051:9;35040:20;;34718:348;;;;:::o;35072:191::-;35112:4;35132:20;35150:1;35132:20;:::i;:::-;35127:25;;35166:20;35184:1;35166:20;:::i;:::-;35161:25;;35205:1;35202;35199:8;35196:34;;;35210:18;;:::i;:::-;35196:34;35255:1;35252;35248:9;35240:17;;35072:191;;;;:::o;35269:96::-;35306:7;35335:24;35353:5;35335:24;:::i;:::-;35324:35;;35269:96;;;:::o;35371:90::-;35405:7;35448:5;35441:13;35434:21;35423:32;;35371:90;;;:::o;35467:77::-;35504:7;35533:5;35522:16;;35467:77;;;:::o;35550:149::-;35586:7;35626:66;35619:5;35615:78;35604:89;;35550:149;;;:::o;35705:109::-;35755:7;35784:24;35802:5;35784:24;:::i;:::-;35773:35;;35705:109;;;:::o;35820:126::-;35857:7;35897:42;35890:5;35886:54;35875:65;;35820:126;;;:::o;35952:77::-;35989:7;36018:5;36007:16;;35952:77;;;:::o;36035:154::-;36119:6;36114:3;36109;36096:30;36181:1;36172:6;36167:3;36163:16;36156:27;36035:154;;;:::o;36195:307::-;36263:1;36273:113;36287:6;36284:1;36281:13;36273:113;;;36372:1;36367:3;36363:11;36357:18;36353:1;36348:3;36344:11;36337:39;36309:2;36306:1;36302:10;36297:15;;36273:113;;;36404:6;36401:1;36398:13;36395:101;;;36484:1;36475:6;36470:3;36466:16;36459:27;36395:101;36244:258;36195:307;;;:::o;36508:320::-;36552:6;36589:1;36583:4;36579:12;36569:22;;36636:1;36630:4;36626:12;36657:18;36647:81;;36713:4;36705:6;36701:17;36691:27;;36647:81;36775:2;36767:6;36764:14;36744:18;36741:38;36738:84;;;36794:18;;:::i;:::-;36738:84;36559:269;36508:320;;;:::o;36834:281::-;36917:27;36939:4;36917:27;:::i;:::-;36909:6;36905:40;37047:6;37035:10;37032:22;37011:18;36999:10;36996:34;36993:62;36990:88;;;37058:18;;:::i;:::-;36990:88;37098:10;37094:2;37087:22;36877:238;36834:281;;:::o;37121:233::-;37160:3;37183:24;37201:5;37183:24;:::i;:::-;37174:33;;37229:66;37222:5;37219:77;37216:103;;;37299:18;;:::i;:::-;37216:103;37346:1;37339:5;37335:13;37328:20;;37121:233;;;:::o;37360:100::-;37399:7;37428:26;37448:5;37428:26;:::i;:::-;37417:37;;37360:100;;;:::o;37466:94::-;37505:7;37534:20;37548:5;37534:20;:::i;:::-;37523:31;;37466:94;;;:::o;37566:79::-;37605:7;37634:5;37623:16;;37566:79;;;:::o;37651:176::-;37683:1;37700:20;37718:1;37700:20;:::i;:::-;37695:25;;37734:20;37752:1;37734:20;:::i;:::-;37729:25;;37773:1;37763:35;;37778:18;;:::i;:::-;37763:35;37819:1;37816;37812:9;37807:14;;37651:176;;;;:::o;37833:180::-;37881:77;37878:1;37871:88;37978:4;37975:1;37968:15;38002:4;37999:1;37992:15;38019:180;38067:77;38064:1;38057:88;38164:4;38161:1;38154:15;38188:4;38185:1;38178:15;38205:180;38253:77;38250:1;38243:88;38350:4;38347:1;38340:15;38374:4;38371:1;38364:15;38391:180;38439:77;38436:1;38429:88;38536:4;38533:1;38526:15;38560:4;38557:1;38550:15;38577:180;38625:77;38622:1;38615:88;38722:4;38719:1;38712:15;38746:4;38743:1;38736:15;38763:117;38872:1;38869;38862:12;38886:117;38995:1;38992;38985:12;39009:117;39118:1;39115;39108:12;39132:117;39241:1;39238;39231:12;39255:117;39364:1;39361;39354:12;39378:117;39487:1;39484;39477:12;39501:102;39542:6;39593:2;39589:7;39584:2;39577:5;39573:14;39569:28;39559:38;;39501:102;;;:::o;39609:94::-;39642:8;39690:5;39686:2;39682:14;39661:35;;39609:94;;;:::o;39709:222::-;39849:34;39845:1;39837:6;39833:14;39826:58;39918:5;39913:2;39905:6;39901:15;39894:30;39709:222;:::o;39937:237::-;40077:34;40073:1;40065:6;40061:14;40054:58;40146:20;40141:2;40133:6;40129:15;40122:45;39937:237;:::o;40180:225::-;40320:34;40316:1;40308:6;40304:14;40297:58;40389:8;40384:2;40376:6;40372:15;40365:33;40180:225;:::o;40411:224::-;40551:34;40547:1;40539:6;40535:14;40528:58;40620:7;40615:2;40607:6;40603:15;40596:32;40411:224;:::o;40641:178::-;40781:30;40777:1;40769:6;40765:14;40758:54;40641:178;:::o;40825:223::-;40965:34;40961:1;40953:6;40949:14;40942:58;41034:6;41029:2;41021:6;41017:15;41010:31;40825:223;:::o;41054:175::-;41194:27;41190:1;41182:6;41178:14;41171:51;41054:175;:::o;41235:178::-;41375:30;41371:1;41363:6;41359:14;41352:54;41235:178;:::o;41419:231::-;41559:34;41555:1;41547:6;41543:14;41536:58;41628:14;41623:2;41615:6;41611:15;41604:39;41419:231;:::o;41656:243::-;41796:34;41792:1;41784:6;41780:14;41773:58;41865:26;41860:2;41852:6;41848:15;41841:51;41656:243;:::o;41905:229::-;42045:34;42041:1;42033:6;42029:14;42022:58;42114:12;42109:2;42101:6;42097:15;42090:37;41905:229;:::o;42140:228::-;42280:34;42276:1;42268:6;42264:14;42257:58;42349:11;42344:2;42336:6;42332:15;42325:36;42140:228;:::o;42374:182::-;42514:34;42510:1;42502:6;42498:14;42491:58;42374:182;:::o;42562:231::-;42702:34;42698:1;42690:6;42686:14;42679:58;42771:14;42766:2;42758:6;42754:15;42747:39;42562:231;:::o;42799:182::-;42939:34;42935:1;42927:6;42923:14;42916:58;42799:182;:::o;42987:234::-;43127:34;43123:1;43115:6;43111:14;43104:58;43196:17;43191:2;43183:6;43179:15;43172:42;42987:234;:::o;43227:220::-;43367:34;43363:1;43355:6;43351:14;43344:58;43436:3;43431:2;43423:6;43419:15;43412:28;43227:220;:::o;43453:236::-;43593:34;43589:1;43581:6;43577:14;43570:58;43662:19;43657:2;43649:6;43645:15;43638:44;43453:236;:::o;43695:171::-;43835:23;43831:1;43823:6;43819:14;43812:47;43695:171;:::o;43872:174::-;44012:26;44008:1;44000:6;43996:14;43989:50;43872:174;:::o;44052:171::-;44192:23;44188:1;44180:6;44176:14;44169:47;44052:171;:::o;44229:122::-;44302:24;44320:5;44302:24;:::i;:::-;44295:5;44292:35;44282:63;;44341:1;44338;44331:12;44282:63;44229:122;:::o;44357:116::-;44427:21;44442:5;44427:21;:::i;:::-;44420:5;44417:32;44407:60;;44463:1;44460;44453:12;44407:60;44357:116;:::o;44479:122::-;44552:24;44570:5;44552:24;:::i;:::-;44545:5;44542:35;44532:63;;44591:1;44588;44581:12;44532:63;44479:122;:::o;44607:120::-;44679:23;44696:5;44679:23;:::i;:::-;44672:5;44669:34;44659:62;;44717:1;44714;44707:12;44659:62;44607:120;:::o;44733:148::-;44819:37;44850:5;44819:37;:::i;:::-;44812:5;44809:48;44799:76;;44871:1;44868;44861:12;44799:76;44733:148;:::o;44887:122::-;44960:24;44978:5;44960:24;:::i;:::-;44953:5;44950:35;44940:63;;44999:1;44996;44989:12;44940:63;44887:122;:::o
Swarm Source
ipfs://2ddd30f678b86db79a1f4bee3c8a37c32f428fdfd19e48bca68fd09343265e64
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.