ERC-1155
DAO
Overview
Max Total Supply
0 EDAOSTMPS
Holders
41,293
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
EventDAOStamps
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-03-01 */ // SPDX-License-Identifier: MIT /** .--:. :@@@@@@@@#+: .-=*##%##+. =:#@@@@@@@@@@@@#=.:#@@@@@@@@@@@@ -%@++@@@@@@@@@@@@@@@#==#@@@@@@@@@@.%. :#@@@@:-+#@@@@@@@@@@@@@@@*=+@@@@@@@-*@@= =@@@@@@%. -+#@@@@@@@@@@@@@%=+*=-. +@@@@#. #@@@@@@@%..+@@*==#@@@@@@@@@@@@%- #@@@@@@@. =@@@@@@@@@-+@@@@@*=+@@@@@@@@@@@@=-@@@@@@@@@: #@@@@@@@@@*-%@@@@@%--%@@@@@@@*-#@@@@@@@@@* #@@@@@@@@@@=+@@@*: :#@@@#-*@@@@@@@@@@# *@@@@@@@@@@#-= :+=*@@@@@@@@@@@= -+=@@@@@@@@@@@#: =%@@@@@@@@@@@%: :@@%-#@@@@@@@@@@@%- :*@@@@@@@@@@@@@==# %@@@@+-%@@@@@@@@@@@@+=*@@@@@@@@@@@==%@@+ %@@@@@@=-%@@@@@@@@@@@@#==*@@@@@#==%@@@@@ =*###*. :=%@@@@@@@@@@@@@%+=++: #@@@@@@# :###%@@@@+=*@@@@@@@@@@@@@@@#+-:++**+- .*@@@@@@@@#==%@@@@@@@@@@@@@@@@@@%= -@@@@@@@@@@*=+#@@@@@@@@@@@@@@+. +#%@%%#*=-. -+#@@@@@@@@*. */ // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @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, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: contracts/EventDAOWaitStamp.sol pragma solidity ^0.8.0; contract EventDAOStamps is ERC1155, Ownable { string public name; string public symbol; mapping(uint => string) public tokenURI; constructor() ERC1155("") { name = "EventDAO Stamps"; symbol = "EDAOSTMPS"; } function mint(address _to, uint _id, uint _amount) external onlyOwner { _mint(_to, _id, _amount, ""); } function airdrop(address[] calldata _addresses, uint _id, uint _amount) external onlyOwner { uint256 arrayLength = _addresses.length; for (uint256 i = 0; i < arrayLength; i++) { address current = _addresses[i]; if (current != address(0)) { _mint(current, _id, _amount, ""); } } } function mintBatch(address _to, uint[] memory _ids, uint[] memory _amounts) external onlyOwner { _mintBatch(_to, _ids, _amounts, ""); } function burn(uint _id, uint _amount) external { _burn(msg.sender, _id, _amount); } function burnBatch(uint[] memory _ids, uint[] memory _amounts) external { _burnBatch(msg.sender, _ids, _amounts); } function burnForMint(address _from, uint[] memory _burnIds, uint[] memory _burnAmounts, uint[] memory _mintIds, uint[] memory _mintAmounts) external onlyOwner { _burnBatch(_from, _burnIds, _burnAmounts); _mintBatch(_from, _mintIds, _mintAmounts, ""); } function setURI(uint _id, string memory _uri) external onlyOwner { tokenURI[_id] = _uri; emit URI(_uri, _id); } function uri(uint _id) public override view returns (string memory) { return tokenURI[_id]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256[]","name":"_burnIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_burnAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintAmounts","type":"uint256[]"}],"name":"burnForMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","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":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051806020016040528060008152506200003381620000f660201b60201c565b5062000054620000486200011260201b60201c565b6200011a60201b60201c565b6040518060400160405280600f81526020017f4576656e7444414f205374616d7073000000000000000000000000000000000081525060049080519060200190620000a1929190620001e0565b506040518060400160405280600981526020017f4544414f53544d5053000000000000000000000000000000000000000000000081525060059080519060200190620000ef929190620001e0565b50620002f5565b80600290805190602001906200010e929190620001e0565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ee9062000290565b90600052602060002090601f0160209004810192826200021257600085556200025e565b82601f106200022d57805160ff19168380011785556200025e565b828001600101855582156200025e579182015b828111156200025d57825182559160200191906001019062000240565b5b5090506200026d919062000271565b5090565b5b808211156200028c57600081600090555060010162000272565b5090565b60006002820490506001821680620002a957607f821691505b60208210811415620002c057620002bf620002c6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61413480620003056000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063862440e2116100b8578063b390c0ab1161007c578063b390c0ab14610323578063c87b56dd1461033f578063d81d0a151461036f578063e985e9c51461038b578063f242432a146103bb578063f2fde38b146103d757610136565b8063862440e2146102935780638da5cb5b146102af57806395d89b41146102cd578063a22cb465146102eb578063a496dedf1461030757610136565b80632eb2c2d6116100ff5780632eb2c2d6146102055780634e1273f414610221578063510f410414610251578063715018a61461026d57806383ca4b6f1461027757610136565b8062fdd58e1461013b57806301ffc9a71461016b57806306fdde031461019b5780630e89341c146101b9578063156e29f6146101e9575b600080fd5b61015560048036038101906101509190612d8d565b6103f3565b604051610162919061372b565b60405180910390f35b61018560048036038101906101809190612f84565b6104bc565b604051610192919061350e565b60405180910390f35b6101a361059e565b6040516101b09190613529565b60405180910390f35b6101d360048036038101906101ce9190612fde565b61062c565b6040516101e09190613529565b60405180910390f35b61020360048036038101906101fe9190612dcd565b6106d1565b005b61021f600480360381019061021a9190612a71565b61076d565b005b61023b60048036038101906102369190612e94565b61080e565b60405161024891906134b5565b60405180910390f35b61026b60048036038101906102669190612c62565b610927565b005b6102756109d0565b005b610291600480360381019061028c9190612f0c565b610a58565b005b6102ad60048036038101906102a8919061300b565b610a67565b005b6102b7610b47565b6040516102c491906133d8565b60405180910390f35b6102d5610b71565b6040516102e29190613529565b60405180910390f35b61030560048036038101906103009190612d4d565b610bff565b005b610321600480360381019061031c9190612e20565b610c15565b005b61033d60048036038101906103389190613067565b610d3c565b005b61035960048036038101906103549190612fde565b610d4b565b6040516103669190613529565b60405180910390f35b61038960048036038101906103849190612bd7565b610deb565b005b6103a560048036038101906103a09190612a31565b610e87565b6040516103b2919061350e565b60405180910390f35b6103d560048036038101906103d09190612b40565b610f1b565b005b6103f160048036038101906103ec9190612a04565b610fbc565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045b9061358b565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105975750610596826110b4565b5b9050919050565b600480546105ab906139cb565b80601f01602080910402602001604051908101604052809291908181526020018280546105d7906139cb565b80156106245780601f106105f957610100808354040283529160200191610624565b820191906000526020600020905b81548152906001019060200180831161060757829003601f168201915b505050505081565b606060066000838152602001908152602001600020805461064c906139cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610678906139cb565b80156106c55780601f1061069a576101008083540402835291602001916106c5565b820191906000526020600020905b8154815290600101906020018083116106a857829003601f168201915b50505050509050919050565b6106d961111e565b73ffffffffffffffffffffffffffffffffffffffff166106f7610b47565b73ffffffffffffffffffffffffffffffffffffffff161461074d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107449061368b565b60405180910390fd5b61076883838360405180602001604052806000815250611126565b505050565b61077561111e565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107bb57506107ba856107b561111e565b610e87565b5b6107fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f19061362b565b60405180910390fd5b61080785858585856112d7565b5050505050565b60608151835114610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b906136cb565b60405180910390fd5b6000835167ffffffffffffffff81111561087157610870613b04565b5b60405190808252806020026020018201604052801561089f5781602001602082028036833780820191505090505b50905060005b845181101561091c576108ec8582815181106108c4576108c3613ad5565b5b60200260200101518583815181106108df576108de613ad5565b5b60200260200101516103f3565b8282815181106108ff576108fe613ad5565b5b6020026020010181815250508061091590613a2e565b90506108a5565b508091505092915050565b61092f61111e565b73ffffffffffffffffffffffffffffffffffffffff1661094d610b47565b73ffffffffffffffffffffffffffffffffffffffff16146109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a9061368b565b60405180910390fd5b6109ae8585856115f9565b6109c9858383604051806020016040528060008152506118c8565b5050505050565b6109d861111e565b73ffffffffffffffffffffffffffffffffffffffff166109f6610b47565b73ffffffffffffffffffffffffffffffffffffffff1614610a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a439061368b565b60405180910390fd5b610a566000611af5565b565b610a633383836115f9565b5050565b610a6f61111e565b73ffffffffffffffffffffffffffffffffffffffff16610a8d610b47565b73ffffffffffffffffffffffffffffffffffffffff1614610ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ada9061368b565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190610b0a929190612686565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610b3b9190613529565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610b7e906139cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610baa906139cb565b8015610bf75780601f10610bcc57610100808354040283529160200191610bf7565b820191906000526020600020905b815481529060010190602001808311610bda57829003601f168201915b505050505081565b610c11610c0a61111e565b8383611bbb565b5050565b610c1d61111e565b73ffffffffffffffffffffffffffffffffffffffff16610c3b610b47565b73ffffffffffffffffffffffffffffffffffffffff1614610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c889061368b565b60405180910390fd5b600084849050905060005b81811015610d34576000868683818110610cb957610cb8613ad5565b5b9050602002016020810190610cce9190612a04565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d2057610d1f81868660405180602001604052806000815250611126565b5b508080610d2c90613a2e565b915050610c9c565b505050505050565b610d47338383611d28565b5050565b60066020528060005260406000206000915090508054610d6a906139cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d96906139cb565b8015610de35780601f10610db857610100808354040283529160200191610de3565b820191906000526020600020905b815481529060010190602001808311610dc657829003601f168201915b505050505081565b610df361111e565b73ffffffffffffffffffffffffffffffffffffffff16610e11610b47565b73ffffffffffffffffffffffffffffffffffffffff1614610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e9061368b565b60405180910390fd5b610e82838383604051806020016040528060008152506118c8565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f2361111e565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f695750610f6885610f6361111e565b610e87565b5b610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f906135eb565b60405180910390fd5b610fb58585858585611f6f565b5050505050565b610fc461111e565b73ffffffffffffffffffffffffffffffffffffffff16610fe2610b47565b73ffffffffffffffffffffffffffffffffffffffff1614611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f9061368b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f906135ab565b60405180910390fd5b6110b181611af5565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d9061370b565b60405180910390fd5b60006111a061111e565b905060006111ad8561220b565b905060006111ba8561220b565b90506111cb83600089858589612285565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461122a91906138bf565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516112a8929190613746565b60405180910390a46112bf8360008985858961228d565b6112ce83600089898989612295565b50505050505050565b815183511461131b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611312906136eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561138b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113829061360b565b60405180910390fd5b600061139561111e565b90506113a5818787878787612285565b60005b84518110156115565760008582815181106113c6576113c5613ad5565b5b6020026020010151905060008583815181106113e5576113e4613ad5565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d9061366b565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461153b91906138bf565b925050819055505050508061154f90613a2e565b90506113a8565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516115cd9291906134d7565b60405180910390a46115e381878787878761228d565b6115f181878787878761247c565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611669576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116609061364b565b60405180910390fd5b80518251146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a4906136eb565b60405180910390fd5b60006116b761111e565b90506116d781856000868660405180602001604052806000815250612285565b60005b83518110156118245760008482815181106116f8576116f7613ad5565b5b60200260200101519050600084838151811061171757611716613ad5565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156117b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117af906135cb565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061181c90613a2e565b9150506116da565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161189c9291906134d7565b60405180910390a46118c28185600086866040518060200160405280600081525061228d565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f9061370b565b60405180910390fd5b815183511461197c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611973906136eb565b60405180910390fd5b600061198661111e565b905061199781600087878787612285565b60005b8451811015611a50578381815181106119b6576119b5613ad5565b5b60200260200101516000808784815181106119d4576119d3613ad5565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a3691906138bf565b925050819055508080611a4890613a2e565b91505061199a565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611ac89291906134d7565b60405180910390a4611adf8160008787878761228d565b611aee8160008787878761247c565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c21906136ab565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d1b919061350e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8f9061364b565b60405180910390fd5b6000611da261111e565b90506000611daf8461220b565b90506000611dbc8461220b565b9050611ddc83876000858560405180602001604052806000815250612285565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6a906135cb565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611f40929190613746565b60405180910390a4611f668488600086866040518060200160405280600081525061228d565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd69061360b565b60405180910390fd5b6000611fe961111e565b90506000611ff68561220b565b905060006120038561220b565b9050612013838989858589612285565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a19061366b565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461215f91906138bf565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516121dc929190613746565b60405180910390a46121f2848a8a86868a61228d565b612200848a8a8a8a8a612295565b505050505050505050565b60606000600167ffffffffffffffff81111561222a57612229613b04565b5b6040519080825280602002602001820160405280156122585781602001602082028036833780820191505090505b50905082816000815181106122705761226f613ad5565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b6122b48473ffffffffffffffffffffffffffffffffffffffff16612663565b15612474578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016122fa95949392919061345b565b602060405180830381600087803b15801561231457600080fd5b505af192505050801561234557506040513d601f19601f820116820180604052508101906123429190612fb1565b60015b6123eb57612351613b33565b806308c379a014156123ae575061236661400c565b8061237157506123b0565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a59190613529565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e29061354b565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612472576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124699061356b565b60405180910390fd5b505b505050505050565b61249b8473ffffffffffffffffffffffffffffffffffffffff16612663565b1561265b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016124e19594939291906133f3565b602060405180830381600087803b1580156124fb57600080fd5b505af192505050801561252c57506040513d601f19601f820116820180604052508101906125299190612fb1565b60015b6125d257612538613b33565b806308c379a01415612595575061254d61400c565b806125585750612597565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258c9190613529565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c99061354b565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612659576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126509061356b565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612692906139cb565b90600052602060002090601f0160209004810192826126b457600085556126fb565b82601f106126cd57805160ff19168380011785556126fb565b828001600101855582156126fb579182015b828111156126fa5782518255916020019190600101906126df565b5b509050612708919061270c565b5090565b5b8082111561272557600081600090555060010161270d565b5090565b600061273c61273784613794565b61376f565b9050808382526020820190508285602086028201111561275f5761275e613b5f565b5b60005b8581101561278f5781612775888261288d565b845260208401935060208301925050600181019050612762565b5050509392505050565b60006127ac6127a7846137c0565b61376f565b905080838252602082019050828560208602820111156127cf576127ce613b5f565b5b60005b858110156127ff57816127e588826129ef565b8452602084019350602083019250506001810190506127d2565b5050509392505050565b600061281c612817846137ec565b61376f565b90508281526020810184848401111561283857612837613b64565b5b612843848285613989565b509392505050565b600061285e6128598461381d565b61376f565b90508281526020810184848401111561287a57612879613b64565b5b612885848285613989565b509392505050565b60008135905061289c816140a2565b92915050565b60008083601f8401126128b8576128b7613b5a565b5b8235905067ffffffffffffffff8111156128d5576128d4613b55565b5b6020830191508360208202830111156128f1576128f0613b5f565b5b9250929050565b600082601f83011261290d5761290c613b5a565b5b813561291d848260208601612729565b91505092915050565b600082601f83011261293b5761293a613b5a565b5b813561294b848260208601612799565b91505092915050565b600081359050612963816140b9565b92915050565b600081359050612978816140d0565b92915050565b60008151905061298d816140d0565b92915050565b600082601f8301126129a8576129a7613b5a565b5b81356129b8848260208601612809565b91505092915050565b600082601f8301126129d6576129d5613b5a565b5b81356129e684826020860161284b565b91505092915050565b6000813590506129fe816140e7565b92915050565b600060208284031215612a1a57612a19613b6e565b5b6000612a288482850161288d565b91505092915050565b60008060408385031215612a4857612a47613b6e565b5b6000612a568582860161288d565b9250506020612a678582860161288d565b9150509250929050565b600080600080600060a08688031215612a8d57612a8c613b6e565b5b6000612a9b8882890161288d565b9550506020612aac8882890161288d565b945050604086013567ffffffffffffffff811115612acd57612acc613b69565b5b612ad988828901612926565b935050606086013567ffffffffffffffff811115612afa57612af9613b69565b5b612b0688828901612926565b925050608086013567ffffffffffffffff811115612b2757612b26613b69565b5b612b3388828901612993565b9150509295509295909350565b600080600080600060a08688031215612b5c57612b5b613b6e565b5b6000612b6a8882890161288d565b9550506020612b7b8882890161288d565b9450506040612b8c888289016129ef565b9350506060612b9d888289016129ef565b925050608086013567ffffffffffffffff811115612bbe57612bbd613b69565b5b612bca88828901612993565b9150509295509295909350565b600080600060608486031215612bf057612bef613b6e565b5b6000612bfe8682870161288d565b935050602084013567ffffffffffffffff811115612c1f57612c1e613b69565b5b612c2b86828701612926565b925050604084013567ffffffffffffffff811115612c4c57612c4b613b69565b5b612c5886828701612926565b9150509250925092565b600080600080600060a08688031215612c7e57612c7d613b6e565b5b6000612c8c8882890161288d565b955050602086013567ffffffffffffffff811115612cad57612cac613b69565b5b612cb988828901612926565b945050604086013567ffffffffffffffff811115612cda57612cd9613b69565b5b612ce688828901612926565b935050606086013567ffffffffffffffff811115612d0757612d06613b69565b5b612d1388828901612926565b925050608086013567ffffffffffffffff811115612d3457612d33613b69565b5b612d4088828901612926565b9150509295509295909350565b60008060408385031215612d6457612d63613b6e565b5b6000612d728582860161288d565b9250506020612d8385828601612954565b9150509250929050565b60008060408385031215612da457612da3613b6e565b5b6000612db28582860161288d565b9250506020612dc3858286016129ef565b9150509250929050565b600080600060608486031215612de657612de5613b6e565b5b6000612df48682870161288d565b9350506020612e05868287016129ef565b9250506040612e16868287016129ef565b9150509250925092565b60008060008060608587031215612e3a57612e39613b6e565b5b600085013567ffffffffffffffff811115612e5857612e57613b69565b5b612e64878288016128a2565b94509450506020612e77878288016129ef565b9250506040612e88878288016129ef565b91505092959194509250565b60008060408385031215612eab57612eaa613b6e565b5b600083013567ffffffffffffffff811115612ec957612ec8613b69565b5b612ed5858286016128f8565b925050602083013567ffffffffffffffff811115612ef657612ef5613b69565b5b612f0285828601612926565b9150509250929050565b60008060408385031215612f2357612f22613b6e565b5b600083013567ffffffffffffffff811115612f4157612f40613b69565b5b612f4d85828601612926565b925050602083013567ffffffffffffffff811115612f6e57612f6d613b69565b5b612f7a85828601612926565b9150509250929050565b600060208284031215612f9a57612f99613b6e565b5b6000612fa884828501612969565b91505092915050565b600060208284031215612fc757612fc6613b6e565b5b6000612fd58482850161297e565b91505092915050565b600060208284031215612ff457612ff3613b6e565b5b6000613002848285016129ef565b91505092915050565b6000806040838503121561302257613021613b6e565b5b6000613030858286016129ef565b925050602083013567ffffffffffffffff81111561305157613050613b69565b5b61305d858286016129c1565b9150509250929050565b6000806040838503121561307e5761307d613b6e565b5b600061308c858286016129ef565b925050602061309d858286016129ef565b9150509250929050565b60006130b383836133ba565b60208301905092915050565b6130c881613915565b82525050565b60006130d98261385e565b6130e3818561388c565b93506130ee8361384e565b8060005b8381101561311f57815161310688826130a7565b97506131118361387f565b9250506001810190506130f2565b5085935050505092915050565b61313581613927565b82525050565b600061314682613869565b613150818561389d565b9350613160818560208601613998565b61316981613b73565b840191505092915050565b600061317f82613874565b61318981856138ae565b9350613199818560208601613998565b6131a281613b73565b840191505092915050565b60006131ba6034836138ae565b91506131c582613b91565b604082019050919050565b60006131dd6028836138ae565b91506131e882613be0565b604082019050919050565b6000613200602b836138ae565b915061320b82613c2f565b604082019050919050565b60006132236026836138ae565b915061322e82613c7e565b604082019050919050565b60006132466024836138ae565b915061325182613ccd565b604082019050919050565b60006132696029836138ae565b915061327482613d1c565b604082019050919050565b600061328c6025836138ae565b915061329782613d6b565b604082019050919050565b60006132af6032836138ae565b91506132ba82613dba565b604082019050919050565b60006132d26023836138ae565b91506132dd82613e09565b604082019050919050565b60006132f5602a836138ae565b915061330082613e58565b604082019050919050565b60006133186020836138ae565b915061332382613ea7565b602082019050919050565b600061333b6029836138ae565b915061334682613ed0565b604082019050919050565b600061335e6029836138ae565b915061336982613f1f565b604082019050919050565b60006133816028836138ae565b915061338c82613f6e565b604082019050919050565b60006133a46021836138ae565b91506133af82613fbd565b604082019050919050565b6133c38161397f565b82525050565b6133d28161397f565b82525050565b60006020820190506133ed60008301846130bf565b92915050565b600060a08201905061340860008301886130bf565b61341560208301876130bf565b818103604083015261342781866130ce565b9050818103606083015261343b81856130ce565b9050818103608083015261344f818461313b565b90509695505050505050565b600060a08201905061347060008301886130bf565b61347d60208301876130bf565b61348a60408301866133c9565b61349760608301856133c9565b81810360808301526134a9818461313b565b90509695505050505050565b600060208201905081810360008301526134cf81846130ce565b905092915050565b600060408201905081810360008301526134f181856130ce565b9050818103602083015261350581846130ce565b90509392505050565b6000602082019050613523600083018461312c565b92915050565b600060208201905081810360008301526135438184613174565b905092915050565b60006020820190508181036000830152613564816131ad565b9050919050565b60006020820190508181036000830152613584816131d0565b9050919050565b600060208201905081810360008301526135a4816131f3565b9050919050565b600060208201905081810360008301526135c481613216565b9050919050565b600060208201905081810360008301526135e481613239565b9050919050565b600060208201905081810360008301526136048161325c565b9050919050565b600060208201905081810360008301526136248161327f565b9050919050565b60006020820190508181036000830152613644816132a2565b9050919050565b60006020820190508181036000830152613664816132c5565b9050919050565b60006020820190508181036000830152613684816132e8565b9050919050565b600060208201905081810360008301526136a48161330b565b9050919050565b600060208201905081810360008301526136c48161332e565b9050919050565b600060208201905081810360008301526136e481613351565b9050919050565b6000602082019050818103600083015261370481613374565b9050919050565b6000602082019050818103600083015261372481613397565b9050919050565b600060208201905061374060008301846133c9565b92915050565b600060408201905061375b60008301856133c9565b61376860208301846133c9565b9392505050565b600061377961378a565b905061378582826139fd565b919050565b6000604051905090565b600067ffffffffffffffff8211156137af576137ae613b04565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156137db576137da613b04565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561380757613806613b04565b5b61381082613b73565b9050602081019050919050565b600067ffffffffffffffff82111561383857613837613b04565b5b61384182613b73565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006138ca8261397f565b91506138d58361397f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561390a57613909613a77565b5b828201905092915050565b60006139208261395f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139b657808201518184015260208101905061399b565b838111156139c5576000848401525b50505050565b600060028204905060018216806139e357607f821691505b602082108114156139f7576139f6613aa6565b5b50919050565b613a0682613b73565b810181811067ffffffffffffffff82111715613a2557613a24613b04565b5b80604052505050565b6000613a398261397f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a6c57613a6b613a77565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613b525760046000803e613b4f600051613b84565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561401c5761409f565b61402461378a565b60043d036004823e80513d602482011167ffffffffffffffff8211171561404c57505061409f565b808201805167ffffffffffffffff81111561406a575050505061409f565b80602083010160043d03850181111561408757505050505061409f565b614096826020018501866139fd565b82955050505050505b90565b6140ab81613915565b81146140b657600080fd5b50565b6140c281613927565b81146140cd57600080fd5b50565b6140d981613933565b81146140e457600080fd5b50565b6140f08161397f565b81146140fb57600080fd5b5056fea264697066735822122070a9b73e797950e24469e442c244a6a9d5cf1919256000569951582d6e076e8364736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101365760003560e01c8063862440e2116100b8578063b390c0ab1161007c578063b390c0ab14610323578063c87b56dd1461033f578063d81d0a151461036f578063e985e9c51461038b578063f242432a146103bb578063f2fde38b146103d757610136565b8063862440e2146102935780638da5cb5b146102af57806395d89b41146102cd578063a22cb465146102eb578063a496dedf1461030757610136565b80632eb2c2d6116100ff5780632eb2c2d6146102055780634e1273f414610221578063510f410414610251578063715018a61461026d57806383ca4b6f1461027757610136565b8062fdd58e1461013b57806301ffc9a71461016b57806306fdde031461019b5780630e89341c146101b9578063156e29f6146101e9575b600080fd5b61015560048036038101906101509190612d8d565b6103f3565b604051610162919061372b565b60405180910390f35b61018560048036038101906101809190612f84565b6104bc565b604051610192919061350e565b60405180910390f35b6101a361059e565b6040516101b09190613529565b60405180910390f35b6101d360048036038101906101ce9190612fde565b61062c565b6040516101e09190613529565b60405180910390f35b61020360048036038101906101fe9190612dcd565b6106d1565b005b61021f600480360381019061021a9190612a71565b61076d565b005b61023b60048036038101906102369190612e94565b61080e565b60405161024891906134b5565b60405180910390f35b61026b60048036038101906102669190612c62565b610927565b005b6102756109d0565b005b610291600480360381019061028c9190612f0c565b610a58565b005b6102ad60048036038101906102a8919061300b565b610a67565b005b6102b7610b47565b6040516102c491906133d8565b60405180910390f35b6102d5610b71565b6040516102e29190613529565b60405180910390f35b61030560048036038101906103009190612d4d565b610bff565b005b610321600480360381019061031c9190612e20565b610c15565b005b61033d60048036038101906103389190613067565b610d3c565b005b61035960048036038101906103549190612fde565b610d4b565b6040516103669190613529565b60405180910390f35b61038960048036038101906103849190612bd7565b610deb565b005b6103a560048036038101906103a09190612a31565b610e87565b6040516103b2919061350e565b60405180910390f35b6103d560048036038101906103d09190612b40565b610f1b565b005b6103f160048036038101906103ec9190612a04565b610fbc565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045b9061358b565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105975750610596826110b4565b5b9050919050565b600480546105ab906139cb565b80601f01602080910402602001604051908101604052809291908181526020018280546105d7906139cb565b80156106245780601f106105f957610100808354040283529160200191610624565b820191906000526020600020905b81548152906001019060200180831161060757829003601f168201915b505050505081565b606060066000838152602001908152602001600020805461064c906139cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610678906139cb565b80156106c55780601f1061069a576101008083540402835291602001916106c5565b820191906000526020600020905b8154815290600101906020018083116106a857829003601f168201915b50505050509050919050565b6106d961111e565b73ffffffffffffffffffffffffffffffffffffffff166106f7610b47565b73ffffffffffffffffffffffffffffffffffffffff161461074d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107449061368b565b60405180910390fd5b61076883838360405180602001604052806000815250611126565b505050565b61077561111e565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107bb57506107ba856107b561111e565b610e87565b5b6107fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f19061362b565b60405180910390fd5b61080785858585856112d7565b5050505050565b60608151835114610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b906136cb565b60405180910390fd5b6000835167ffffffffffffffff81111561087157610870613b04565b5b60405190808252806020026020018201604052801561089f5781602001602082028036833780820191505090505b50905060005b845181101561091c576108ec8582815181106108c4576108c3613ad5565b5b60200260200101518583815181106108df576108de613ad5565b5b60200260200101516103f3565b8282815181106108ff576108fe613ad5565b5b6020026020010181815250508061091590613a2e565b90506108a5565b508091505092915050565b61092f61111e565b73ffffffffffffffffffffffffffffffffffffffff1661094d610b47565b73ffffffffffffffffffffffffffffffffffffffff16146109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a9061368b565b60405180910390fd5b6109ae8585856115f9565b6109c9858383604051806020016040528060008152506118c8565b5050505050565b6109d861111e565b73ffffffffffffffffffffffffffffffffffffffff166109f6610b47565b73ffffffffffffffffffffffffffffffffffffffff1614610a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a439061368b565b60405180910390fd5b610a566000611af5565b565b610a633383836115f9565b5050565b610a6f61111e565b73ffffffffffffffffffffffffffffffffffffffff16610a8d610b47565b73ffffffffffffffffffffffffffffffffffffffff1614610ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ada9061368b565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190610b0a929190612686565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610b3b9190613529565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610b7e906139cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610baa906139cb565b8015610bf75780601f10610bcc57610100808354040283529160200191610bf7565b820191906000526020600020905b815481529060010190602001808311610bda57829003601f168201915b505050505081565b610c11610c0a61111e565b8383611bbb565b5050565b610c1d61111e565b73ffffffffffffffffffffffffffffffffffffffff16610c3b610b47565b73ffffffffffffffffffffffffffffffffffffffff1614610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c889061368b565b60405180910390fd5b600084849050905060005b81811015610d34576000868683818110610cb957610cb8613ad5565b5b9050602002016020810190610cce9190612a04565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d2057610d1f81868660405180602001604052806000815250611126565b5b508080610d2c90613a2e565b915050610c9c565b505050505050565b610d47338383611d28565b5050565b60066020528060005260406000206000915090508054610d6a906139cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d96906139cb565b8015610de35780601f10610db857610100808354040283529160200191610de3565b820191906000526020600020905b815481529060010190602001808311610dc657829003601f168201915b505050505081565b610df361111e565b73ffffffffffffffffffffffffffffffffffffffff16610e11610b47565b73ffffffffffffffffffffffffffffffffffffffff1614610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e9061368b565b60405180910390fd5b610e82838383604051806020016040528060008152506118c8565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f2361111e565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f695750610f6885610f6361111e565b610e87565b5b610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f906135eb565b60405180910390fd5b610fb58585858585611f6f565b5050505050565b610fc461111e565b73ffffffffffffffffffffffffffffffffffffffff16610fe2610b47565b73ffffffffffffffffffffffffffffffffffffffff1614611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f9061368b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f906135ab565b60405180910390fd5b6110b181611af5565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d9061370b565b60405180910390fd5b60006111a061111e565b905060006111ad8561220b565b905060006111ba8561220b565b90506111cb83600089858589612285565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461122a91906138bf565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516112a8929190613746565b60405180910390a46112bf8360008985858961228d565b6112ce83600089898989612295565b50505050505050565b815183511461131b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611312906136eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561138b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113829061360b565b60405180910390fd5b600061139561111e565b90506113a5818787878787612285565b60005b84518110156115565760008582815181106113c6576113c5613ad5565b5b6020026020010151905060008583815181106113e5576113e4613ad5565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d9061366b565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461153b91906138bf565b925050819055505050508061154f90613a2e565b90506113a8565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516115cd9291906134d7565b60405180910390a46115e381878787878761228d565b6115f181878787878761247c565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611669576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116609061364b565b60405180910390fd5b80518251146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a4906136eb565b60405180910390fd5b60006116b761111e565b90506116d781856000868660405180602001604052806000815250612285565b60005b83518110156118245760008482815181106116f8576116f7613ad5565b5b60200260200101519050600084838151811061171757611716613ad5565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156117b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117af906135cb565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061181c90613a2e565b9150506116da565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161189c9291906134d7565b60405180910390a46118c28185600086866040518060200160405280600081525061228d565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f9061370b565b60405180910390fd5b815183511461197c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611973906136eb565b60405180910390fd5b600061198661111e565b905061199781600087878787612285565b60005b8451811015611a50578381815181106119b6576119b5613ad5565b5b60200260200101516000808784815181106119d4576119d3613ad5565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a3691906138bf565b925050819055508080611a4890613a2e565b91505061199a565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611ac89291906134d7565b60405180910390a4611adf8160008787878761228d565b611aee8160008787878761247c565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c21906136ab565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d1b919061350e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8f9061364b565b60405180910390fd5b6000611da261111e565b90506000611daf8461220b565b90506000611dbc8461220b565b9050611ddc83876000858560405180602001604052806000815250612285565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6a906135cb565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611f40929190613746565b60405180910390a4611f668488600086866040518060200160405280600081525061228d565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd69061360b565b60405180910390fd5b6000611fe961111e565b90506000611ff68561220b565b905060006120038561220b565b9050612013838989858589612285565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a19061366b565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461215f91906138bf565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516121dc929190613746565b60405180910390a46121f2848a8a86868a61228d565b612200848a8a8a8a8a612295565b505050505050505050565b60606000600167ffffffffffffffff81111561222a57612229613b04565b5b6040519080825280602002602001820160405280156122585781602001602082028036833780820191505090505b50905082816000815181106122705761226f613ad5565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b6122b48473ffffffffffffffffffffffffffffffffffffffff16612663565b15612474578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016122fa95949392919061345b565b602060405180830381600087803b15801561231457600080fd5b505af192505050801561234557506040513d601f19601f820116820180604052508101906123429190612fb1565b60015b6123eb57612351613b33565b806308c379a014156123ae575061236661400c565b8061237157506123b0565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a59190613529565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e29061354b565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612472576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124699061356b565b60405180910390fd5b505b505050505050565b61249b8473ffffffffffffffffffffffffffffffffffffffff16612663565b1561265b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016124e19594939291906133f3565b602060405180830381600087803b1580156124fb57600080fd5b505af192505050801561252c57506040513d601f19601f820116820180604052508101906125299190612fb1565b60015b6125d257612538613b33565b806308c379a01415612595575061254d61400c565b806125585750612597565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258c9190613529565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c99061354b565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612659576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126509061356b565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612692906139cb565b90600052602060002090601f0160209004810192826126b457600085556126fb565b82601f106126cd57805160ff19168380011785556126fb565b828001600101855582156126fb579182015b828111156126fa5782518255916020019190600101906126df565b5b509050612708919061270c565b5090565b5b8082111561272557600081600090555060010161270d565b5090565b600061273c61273784613794565b61376f565b9050808382526020820190508285602086028201111561275f5761275e613b5f565b5b60005b8581101561278f5781612775888261288d565b845260208401935060208301925050600181019050612762565b5050509392505050565b60006127ac6127a7846137c0565b61376f565b905080838252602082019050828560208602820111156127cf576127ce613b5f565b5b60005b858110156127ff57816127e588826129ef565b8452602084019350602083019250506001810190506127d2565b5050509392505050565b600061281c612817846137ec565b61376f565b90508281526020810184848401111561283857612837613b64565b5b612843848285613989565b509392505050565b600061285e6128598461381d565b61376f565b90508281526020810184848401111561287a57612879613b64565b5b612885848285613989565b509392505050565b60008135905061289c816140a2565b92915050565b60008083601f8401126128b8576128b7613b5a565b5b8235905067ffffffffffffffff8111156128d5576128d4613b55565b5b6020830191508360208202830111156128f1576128f0613b5f565b5b9250929050565b600082601f83011261290d5761290c613b5a565b5b813561291d848260208601612729565b91505092915050565b600082601f83011261293b5761293a613b5a565b5b813561294b848260208601612799565b91505092915050565b600081359050612963816140b9565b92915050565b600081359050612978816140d0565b92915050565b60008151905061298d816140d0565b92915050565b600082601f8301126129a8576129a7613b5a565b5b81356129b8848260208601612809565b91505092915050565b600082601f8301126129d6576129d5613b5a565b5b81356129e684826020860161284b565b91505092915050565b6000813590506129fe816140e7565b92915050565b600060208284031215612a1a57612a19613b6e565b5b6000612a288482850161288d565b91505092915050565b60008060408385031215612a4857612a47613b6e565b5b6000612a568582860161288d565b9250506020612a678582860161288d565b9150509250929050565b600080600080600060a08688031215612a8d57612a8c613b6e565b5b6000612a9b8882890161288d565b9550506020612aac8882890161288d565b945050604086013567ffffffffffffffff811115612acd57612acc613b69565b5b612ad988828901612926565b935050606086013567ffffffffffffffff811115612afa57612af9613b69565b5b612b0688828901612926565b925050608086013567ffffffffffffffff811115612b2757612b26613b69565b5b612b3388828901612993565b9150509295509295909350565b600080600080600060a08688031215612b5c57612b5b613b6e565b5b6000612b6a8882890161288d565b9550506020612b7b8882890161288d565b9450506040612b8c888289016129ef565b9350506060612b9d888289016129ef565b925050608086013567ffffffffffffffff811115612bbe57612bbd613b69565b5b612bca88828901612993565b9150509295509295909350565b600080600060608486031215612bf057612bef613b6e565b5b6000612bfe8682870161288d565b935050602084013567ffffffffffffffff811115612c1f57612c1e613b69565b5b612c2b86828701612926565b925050604084013567ffffffffffffffff811115612c4c57612c4b613b69565b5b612c5886828701612926565b9150509250925092565b600080600080600060a08688031215612c7e57612c7d613b6e565b5b6000612c8c8882890161288d565b955050602086013567ffffffffffffffff811115612cad57612cac613b69565b5b612cb988828901612926565b945050604086013567ffffffffffffffff811115612cda57612cd9613b69565b5b612ce688828901612926565b935050606086013567ffffffffffffffff811115612d0757612d06613b69565b5b612d1388828901612926565b925050608086013567ffffffffffffffff811115612d3457612d33613b69565b5b612d4088828901612926565b9150509295509295909350565b60008060408385031215612d6457612d63613b6e565b5b6000612d728582860161288d565b9250506020612d8385828601612954565b9150509250929050565b60008060408385031215612da457612da3613b6e565b5b6000612db28582860161288d565b9250506020612dc3858286016129ef565b9150509250929050565b600080600060608486031215612de657612de5613b6e565b5b6000612df48682870161288d565b9350506020612e05868287016129ef565b9250506040612e16868287016129ef565b9150509250925092565b60008060008060608587031215612e3a57612e39613b6e565b5b600085013567ffffffffffffffff811115612e5857612e57613b69565b5b612e64878288016128a2565b94509450506020612e77878288016129ef565b9250506040612e88878288016129ef565b91505092959194509250565b60008060408385031215612eab57612eaa613b6e565b5b600083013567ffffffffffffffff811115612ec957612ec8613b69565b5b612ed5858286016128f8565b925050602083013567ffffffffffffffff811115612ef657612ef5613b69565b5b612f0285828601612926565b9150509250929050565b60008060408385031215612f2357612f22613b6e565b5b600083013567ffffffffffffffff811115612f4157612f40613b69565b5b612f4d85828601612926565b925050602083013567ffffffffffffffff811115612f6e57612f6d613b69565b5b612f7a85828601612926565b9150509250929050565b600060208284031215612f9a57612f99613b6e565b5b6000612fa884828501612969565b91505092915050565b600060208284031215612fc757612fc6613b6e565b5b6000612fd58482850161297e565b91505092915050565b600060208284031215612ff457612ff3613b6e565b5b6000613002848285016129ef565b91505092915050565b6000806040838503121561302257613021613b6e565b5b6000613030858286016129ef565b925050602083013567ffffffffffffffff81111561305157613050613b69565b5b61305d858286016129c1565b9150509250929050565b6000806040838503121561307e5761307d613b6e565b5b600061308c858286016129ef565b925050602061309d858286016129ef565b9150509250929050565b60006130b383836133ba565b60208301905092915050565b6130c881613915565b82525050565b60006130d98261385e565b6130e3818561388c565b93506130ee8361384e565b8060005b8381101561311f57815161310688826130a7565b97506131118361387f565b9250506001810190506130f2565b5085935050505092915050565b61313581613927565b82525050565b600061314682613869565b613150818561389d565b9350613160818560208601613998565b61316981613b73565b840191505092915050565b600061317f82613874565b61318981856138ae565b9350613199818560208601613998565b6131a281613b73565b840191505092915050565b60006131ba6034836138ae565b91506131c582613b91565b604082019050919050565b60006131dd6028836138ae565b91506131e882613be0565b604082019050919050565b6000613200602b836138ae565b915061320b82613c2f565b604082019050919050565b60006132236026836138ae565b915061322e82613c7e565b604082019050919050565b60006132466024836138ae565b915061325182613ccd565b604082019050919050565b60006132696029836138ae565b915061327482613d1c565b604082019050919050565b600061328c6025836138ae565b915061329782613d6b565b604082019050919050565b60006132af6032836138ae565b91506132ba82613dba565b604082019050919050565b60006132d26023836138ae565b91506132dd82613e09565b604082019050919050565b60006132f5602a836138ae565b915061330082613e58565b604082019050919050565b60006133186020836138ae565b915061332382613ea7565b602082019050919050565b600061333b6029836138ae565b915061334682613ed0565b604082019050919050565b600061335e6029836138ae565b915061336982613f1f565b604082019050919050565b60006133816028836138ae565b915061338c82613f6e565b604082019050919050565b60006133a46021836138ae565b91506133af82613fbd565b604082019050919050565b6133c38161397f565b82525050565b6133d28161397f565b82525050565b60006020820190506133ed60008301846130bf565b92915050565b600060a08201905061340860008301886130bf565b61341560208301876130bf565b818103604083015261342781866130ce565b9050818103606083015261343b81856130ce565b9050818103608083015261344f818461313b565b90509695505050505050565b600060a08201905061347060008301886130bf565b61347d60208301876130bf565b61348a60408301866133c9565b61349760608301856133c9565b81810360808301526134a9818461313b565b90509695505050505050565b600060208201905081810360008301526134cf81846130ce565b905092915050565b600060408201905081810360008301526134f181856130ce565b9050818103602083015261350581846130ce565b90509392505050565b6000602082019050613523600083018461312c565b92915050565b600060208201905081810360008301526135438184613174565b905092915050565b60006020820190508181036000830152613564816131ad565b9050919050565b60006020820190508181036000830152613584816131d0565b9050919050565b600060208201905081810360008301526135a4816131f3565b9050919050565b600060208201905081810360008301526135c481613216565b9050919050565b600060208201905081810360008301526135e481613239565b9050919050565b600060208201905081810360008301526136048161325c565b9050919050565b600060208201905081810360008301526136248161327f565b9050919050565b60006020820190508181036000830152613644816132a2565b9050919050565b60006020820190508181036000830152613664816132c5565b9050919050565b60006020820190508181036000830152613684816132e8565b9050919050565b600060208201905081810360008301526136a48161330b565b9050919050565b600060208201905081810360008301526136c48161332e565b9050919050565b600060208201905081810360008301526136e481613351565b9050919050565b6000602082019050818103600083015261370481613374565b9050919050565b6000602082019050818103600083015261372481613397565b9050919050565b600060208201905061374060008301846133c9565b92915050565b600060408201905061375b60008301856133c9565b61376860208301846133c9565b9392505050565b600061377961378a565b905061378582826139fd565b919050565b6000604051905090565b600067ffffffffffffffff8211156137af576137ae613b04565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156137db576137da613b04565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561380757613806613b04565b5b61381082613b73565b9050602081019050919050565b600067ffffffffffffffff82111561383857613837613b04565b5b61384182613b73565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006138ca8261397f565b91506138d58361397f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561390a57613909613a77565b5b828201905092915050565b60006139208261395f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139b657808201518184015260208101905061399b565b838111156139c5576000848401525b50505050565b600060028204905060018216806139e357607f821691505b602082108114156139f7576139f6613aa6565b5b50919050565b613a0682613b73565b810181811067ffffffffffffffff82111715613a2557613a24613b04565b5b80604052505050565b6000613a398261397f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a6c57613a6b613a77565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613b525760046000803e613b4f600051613b84565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561401c5761409f565b61402461378a565b60043d036004823e80513d602482011167ffffffffffffffff8211171561404c57505061409f565b808201805167ffffffffffffffff81111561406a575050505061409f565b80602083010160043d03850181111561408757505050505061409f565b614096826020018501866139fd565b82955050505050505b90565b6140ab81613915565b81146140b657600080fd5b50565b6140c281613927565b81146140cd57600080fd5b50565b6140d981613933565b81146140e457600080fd5b50565b6140f08161397f565b81146140fb57600080fd5b5056fea264697066735822122070a9b73e797950e24469e442c244a6a9d5cf1919256000569951582d6e076e8364736f6c63430008070033
Deployed Bytecode Sourcemap
41463:1652:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26004:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25027:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41518:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43009:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41710:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27943:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26401:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42608:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4862:103;;;:::i;:::-;;42479:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42879:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4211:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41541:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26998:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41827:400;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42382:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41568:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42233:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27225:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27465:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5120:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26004:231;26090:7;26137:1;26118:21;;:7;:21;;;;26110:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;26205:9;:13;26215:2;26205:13;;;;;;;;;;;:22;26219:7;26205:22;;;;;;;;;;;;;;;;26198:29;;26004:231;;;;:::o;25027:310::-;25129:4;25181:26;25166:41;;;:11;:41;;;;:110;;;;25239:37;25224:52;;;:11;:52;;;;25166:110;:163;;;;25293:36;25317:11;25293:23;:36::i;:::-;25166:163;25146:183;;25027:310;;;:::o;41518:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43009:101::-;43062:13;43091:8;:13;43100:3;43091:13;;;;;;;;;;;43084:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43009:101;;;:::o;41710:111::-;4442:12;:10;:12::i;:::-;4431:23;;:7;:5;:7::i;:::-;:23;;;4423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41787:28:::1;41793:3;41798;41803:7;41787:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;41710:111:::0;;;:::o;27943:442::-;28184:12;:10;:12::i;:::-;28176:20;;:4;:20;;;:60;;;;28200:36;28217:4;28223:12;:10;:12::i;:::-;28200:16;:36::i;:::-;28176:60;28154:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;28325:52;28348:4;28354:2;28358:3;28363:7;28372:4;28325:22;:52::i;:::-;27943:442;;;;;:::o;26401:524::-;26557:16;26618:3;:10;26599:8;:15;:29;26591:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;26687:30;26734:8;:15;26720:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26687:63;;26768:9;26763:122;26787:8;:15;26783:1;:19;26763:122;;;26843:30;26853:8;26862:1;26853:11;;;;;;;;:::i;:::-;;;;;;;;26866:3;26870:1;26866:6;;;;;;;;:::i;:::-;;;;;;;;26843:9;:30::i;:::-;26824:13;26838:1;26824:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;26804:3;;;;:::i;:::-;;;26763:122;;;;26904:13;26897:20;;;26401:524;;;;:::o;42608:265::-;4442:12;:10;:12::i;:::-;4431:23;;:7;:5;:7::i;:::-;:23;;;4423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42774:41:::1;42785:5;42792:8;42802:12;42774:10;:41::i;:::-;42822:45;42833:5;42840:8;42850:12;42822:45;;;;;;;;;;;::::0;:10:::1;:45::i;:::-;42608:265:::0;;;;;:::o;4862:103::-;4442:12;:10;:12::i;:::-;4431:23;;:7;:5;:7::i;:::-;:23;;;4423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4927:30:::1;4954:1;4927:18;:30::i;:::-;4862:103::o:0;42479:123::-;42558:38;42569:10;42581:4;42587:8;42558:10;:38::i;:::-;42479:123;;:::o;42879:124::-;4442:12;:10;:12::i;:::-;4431:23;;:7;:5;:7::i;:::-;:23;;;4423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42967:4:::1;42951:8;:13;42960:3;42951:13;;;;;;;;;;;:20;;;;;;;;;;;;:::i;:::-;;42993:3;42983:14;42987:4;42983:14;;;;;;:::i;:::-;;;;;;;;42879:124:::0;;:::o;4211:87::-;4257:7;4284:6;;;;;;;;;;;4277:13;;4211:87;:::o;41541:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26998:155::-;27093:52;27112:12;:10;:12::i;:::-;27126:8;27136;27093:18;:52::i;:::-;26998:155;;:::o;41827:400::-;4442:12;:10;:12::i;:::-;4431:23;;:7;:5;:7::i;:::-;:23;;;4423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41952:19:::1;41974:10;;:17;;41952:39;;42007:9;42002:208;42026:11;42022:1;:15;42002:208;;;42059:15;42077:10;;42088:1;42077:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;42059:31;;42128:1;42109:21;;:7;:21;;;42105:94;;42151:32;42157:7;42166:3;42171:7;42151:32;;;;;;;;;;;::::0;:5:::1;:32::i;:::-;42105:94;42044:166;42039:3;;;;;:::i;:::-;;;;42002:208;;;;41941:286;41827:400:::0;;;;:::o;42382:91::-;42436:31;42442:10;42454:3;42459:7;42436:5;:31::i;:::-;42382:91;;:::o;41568:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42233:143::-;4442:12;:10;:12::i;:::-;4431:23;;:7;:5;:7::i;:::-;:23;;;4423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42335:35:::1;42346:3;42351:4;42357:8;42335:35;;;;;;;;;;;::::0;:10:::1;:35::i;:::-;42233:143:::0;;;:::o;27225:168::-;27324:4;27348:18;:27;27367:7;27348:27;;;;;;;;;;;;;;;:37;27376:8;27348:37;;;;;;;;;;;;;;;;;;;;;;;;;27341:44;;27225:168;;;;:::o;27465:401::-;27681:12;:10;:12::i;:::-;27673:20;;:4;:20;;;:60;;;;27697:36;27714:4;27720:12;:10;:12::i;:::-;27697:16;:36::i;:::-;27673:60;27651:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;27813:45;27831:4;27837:2;27841;27845:6;27853:4;27813:17;:45::i;:::-;27465:401;;;;;:::o;5120:201::-;4442:12;:10;:12::i;:::-;4431:23;;:7;:5;:7::i;:::-;:23;;;4423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5229:1:::1;5209:22;;:8;:22;;;;5201:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5285:28;5304:8;5285:18;:28::i;:::-;5120:201:::0;:::o;16123:157::-;16208:4;16247:25;16232:40;;;:11;:40;;;;16225:47;;16123:157;;;:::o;2882:98::-;2935:7;2962:10;2955:17;;2882:98;:::o;32645:729::-;32812:1;32798:16;;:2;:16;;;;32790:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32865:16;32884:12;:10;:12::i;:::-;32865:31;;32907:20;32930:21;32948:2;32930:17;:21::i;:::-;32907:44;;32962:24;32989:25;33007:6;32989:17;:25::i;:::-;32962:52;;33027:66;33048:8;33066:1;33070:2;33074:3;33079:7;33088:4;33027:20;:66::i;:::-;33127:6;33106:9;:13;33116:2;33106:13;;;;;;;;;;;:17;33120:2;33106:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;33186:2;33149:52;;33182:1;33149:52;;33164:8;33149:52;;;33190:2;33194:6;33149:52;;;;;;;:::i;:::-;;;;;;;;33214:65;33234:8;33252:1;33256:2;33260:3;33265:7;33274:4;33214:19;:65::i;:::-;33292:74;33323:8;33341:1;33345:2;33349;33353:6;33361:4;33292:30;:74::i;:::-;32779:595;;;32645:729;;;;:::o;30181:1146::-;30408:7;:14;30394:3;:10;:28;30386:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30500:1;30486:16;;:2;:16;;;;30478:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30557:16;30576:12;:10;:12::i;:::-;30557:31;;30601:60;30622:8;30632:4;30638:2;30642:3;30647:7;30656:4;30601:20;:60::i;:::-;30679:9;30674:421;30698:3;:10;30694:1;:14;30674:421;;;30730:10;30743:3;30747:1;30743:6;;;;;;;;:::i;:::-;;;;;;;;30730:19;;30764:14;30781:7;30789:1;30781:10;;;;;;;;:::i;:::-;;;;;;;;30764:27;;30808:19;30830:9;:13;30840:2;30830:13;;;;;;;;;;;:19;30844:4;30830:19;;;;;;;;;;;;;;;;30808:41;;30887:6;30872:11;:21;;30864:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31020:6;31006:11;:20;30984:9;:13;30994:2;30984:13;;;;;;;;;;;:19;30998:4;30984:19;;;;;;;;;;;;;;;:42;;;;31077:6;31056:9;:13;31066:2;31056:13;;;;;;;;;;;:17;31070:2;31056:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30715:380;;;30710:3;;;;:::i;:::-;;;30674:421;;;;31142:2;31112:47;;31136:4;31112:47;;31126:8;31112:47;;;31146:3;31151:7;31112:47;;;;;;;:::i;:::-;;;;;;;;31172:59;31192:8;31202:4;31208:2;31212:3;31217:7;31226:4;31172:19;:59::i;:::-;31244:75;31280:8;31290:4;31296:2;31300:3;31305:7;31314:4;31244:35;:75::i;:::-;30375:952;30181:1146;;;;;:::o;35804:969::-;35972:1;35956:18;;:4;:18;;;;35948:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36047:7;:14;36033:3;:10;:28;36025:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36119:16;36138:12;:10;:12::i;:::-;36119:31;;36163:66;36184:8;36194:4;36208:1;36212:3;36217:7;36163:66;;;;;;;;;;;;:20;:66::i;:::-;36247:9;36242:373;36266:3;:10;36262:1;:14;36242:373;;;36298:10;36311:3;36315:1;36311:6;;;;;;;;:::i;:::-;;;;;;;;36298:19;;36332:14;36349:7;36357:1;36349:10;;;;;;;;:::i;:::-;;;;;;;;36332:27;;36376:19;36398:9;:13;36408:2;36398:13;;;;;;;;;;;:19;36412:4;36398:19;;;;;;;;;;;;;;;;36376:41;;36455:6;36440:11;:21;;36432:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;36582:6;36568:11;:20;36546:9;:13;36556:2;36546:13;;;;;;;;;;;:19;36560:4;36546:19;;;;;;;;;;;;;;;:42;;;;36283:332;;;36278:3;;;;;:::i;:::-;;;;36242:373;;;;36670:1;36632:55;;36656:4;36632:55;;36646:8;36632:55;;;36674:3;36679:7;36632:55;;;;;;;:::i;:::-;;;;;;;;36700:65;36720:8;36730:4;36744:1;36748:3;36753:7;36700:65;;;;;;;;;;;;:19;:65::i;:::-;35937:836;35804:969;;;:::o;33730:813::-;33922:1;33908:16;;:2;:16;;;;33900:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33995:7;:14;33981:3;:10;:28;33973:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34067:16;34086:12;:10;:12::i;:::-;34067:31;;34111:66;34132:8;34150:1;34154:2;34158:3;34163:7;34172:4;34111:20;:66::i;:::-;34195:9;34190:103;34214:3;:10;34210:1;:14;34190:103;;;34271:7;34279:1;34271:10;;;;;;;;:::i;:::-;;;;;;;;34246:9;:17;34256:3;34260:1;34256:6;;;;;;;;:::i;:::-;;;;;;;;34246:17;;;;;;;;;;;:21;34264:2;34246:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;34226:3;;;;;:::i;:::-;;;;34190:103;;;;34346:2;34310:53;;34342:1;34310:53;;34324:8;34310:53;;;34350:3;34355:7;34310:53;;;;;;;:::i;:::-;;;;;;;;34376:65;34396:8;34414:1;34418:2;34422:3;34427:7;34436:4;34376:19;:65::i;:::-;34454:81;34490:8;34508:1;34512:2;34516:3;34521:7;34530:4;34454:35;:81::i;:::-;33889:654;33730:813;;;;:::o;5481:191::-;5555:16;5574:6;;;;;;;;;;;5555:25;;5600:8;5591:6;;:17;;;;;;;;;;;;;;;;;;5655:8;5624:40;;5645:8;5624:40;;;;;;;;;;;;5544:128;5481:191;:::o;36915:331::-;37070:8;37061:17;;:5;:17;;;;37053:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37173:8;37135:18;:25;37154:5;37135:25;;;;;;;;;;;;;;;:35;37161:8;37135:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37219:8;37197:41;;37212:5;37197:41;;;37229:8;37197:41;;;;;;:::i;:::-;;;;;;;;36915:331;;;:::o;34793:808::-;34936:1;34920:18;;:4;:18;;;;34912:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34991:16;35010:12;:10;:12::i;:::-;34991:31;;35033:20;35056:21;35074:2;35056:17;:21::i;:::-;35033:44;;35088:24;35115:25;35133:6;35115:17;:25::i;:::-;35088:52;;35153:66;35174:8;35184:4;35198:1;35202:3;35207:7;35153:66;;;;;;;;;;;;:20;:66::i;:::-;35232:19;35254:9;:13;35264:2;35254:13;;;;;;;;;;;:19;35268:4;35254:19;;;;;;;;;;;;;;;;35232:41;;35307:6;35292:11;:21;;35284:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35426:6;35412:11;:20;35390:9;:13;35400:2;35390:13;;;;;;;;;;;:19;35404:4;35390:19;;;;;;;;;;;;;;;:42;;;;35500:1;35461:54;;35486:4;35461:54;;35476:8;35461:54;;;35504:2;35508:6;35461:54;;;;;;;:::i;:::-;;;;;;;;35528:65;35548:8;35558:4;35572:1;35576:3;35581:7;35528:65;;;;;;;;;;;;:19;:65::i;:::-;34901:700;;;;34793:808;;;:::o;28849:974::-;29051:1;29037:16;;:2;:16;;;;29029:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29108:16;29127:12;:10;:12::i;:::-;29108:31;;29150:20;29173:21;29191:2;29173:17;:21::i;:::-;29150:44;;29205:24;29232:25;29250:6;29232:17;:25::i;:::-;29205:52;;29270:60;29291:8;29301:4;29307:2;29311:3;29316:7;29325:4;29270:20;:60::i;:::-;29343:19;29365:9;:13;29375:2;29365:13;;;;;;;;;;;:19;29379:4;29365:19;;;;;;;;;;;;;;;;29343:41;;29418:6;29403:11;:21;;29395:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29543:6;29529:11;:20;29507:9;:13;29517:2;29507:13;;;;;;;;;;;:19;29521:4;29507:19;;;;;;;;;;;;;;;:42;;;;29592:6;29571:9;:13;29581:2;29571:13;;;;;;;;;;;:17;29585:2;29571:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29647:2;29616:46;;29641:4;29616:46;;29631:8;29616:46;;;29651:2;29655:6;29616:46;;;;;;;:::i;:::-;;;;;;;;29675:59;29695:8;29705:4;29711:2;29715:3;29720:7;29729:4;29675:19;:59::i;:::-;29747:68;29778:8;29788:4;29794:2;29798;29802:6;29810:4;29747:30;:68::i;:::-;29018:805;;;;28849:974;;;;;:::o;41179:198::-;41245:16;41274:22;41313:1;41299:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41274:41;;41337:7;41326:5;41332:1;41326:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;41364:5;41357:12;;;41179:198;;;:::o;38202:221::-;;;;;;;:::o;39378:220::-;;;;;;;:::o;39606:744::-;39821:15;:2;:13;;;:15::i;:::-;39817:526;;;39874:2;39857:38;;;39896:8;39906:4;39912:2;39916:6;39924:4;39857:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39853:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;40205:6;40198:14;;;;;;;;;;;:::i;:::-;;;;;;;;39853:479;;;40254:62;;;;;;;;;;:::i;:::-;;;;;;;;39853:479;39991:43;;;39979:55;;;:8;:55;;;;39975:154;;40059:50;;;;;;;;;;:::i;:::-;;;;;;;;39975:154;39930:214;39817:526;39606:744;;;;;;:::o;40358:813::-;40598:15;:2;:13;;;:15::i;:::-;40594:570;;;40651:2;40634:43;;;40678:8;40688:4;40694:3;40699:7;40708:4;40634:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40630:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;41026:6;41019:14;;;;;;;;;;;:::i;:::-;;;;;;;;40630:523;;;41075:62;;;;;;;;;;:::i;:::-;;;;;;;;40630:523;40807:48;;;40795:60;;;:8;:60;;;;40791:159;;40880:50;;;;;;;;;;:::i;:::-;;;;;;;;40791:159;40714:251;40594:570;40358:813;;;;;;:::o;6965:326::-;7025:4;7282:1;7260:7;:19;;;:23;7253:30;;6965:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:568::-;2566:8;2576:6;2626:3;2619:4;2611:6;2607:17;2603:27;2593:122;;2634:79;;:::i;:::-;2593:122;2747:6;2734:20;2724:30;;2777:18;2769:6;2766:30;2763:117;;;2799:79;;:::i;:::-;2763:117;2913:4;2905:6;2901:17;2889:29;;2967:3;2959:4;2951:6;2947:17;2937:8;2933:32;2930:41;2927:128;;;2974:79;;:::i;:::-;2927:128;2493:568;;;;;:::o;3084:370::-;3155:5;3204:3;3197:4;3189:6;3185:17;3181:27;3171:122;;3212:79;;:::i;:::-;3171:122;3329:6;3316:20;3354:94;3444:3;3436:6;3429:4;3421:6;3417:17;3354:94;:::i;:::-;3345:103;;3161:293;3084:370;;;;:::o;3477:::-;3548:5;3597:3;3590:4;3582:6;3578:17;3574:27;3564:122;;3605:79;;:::i;:::-;3564:122;3722:6;3709:20;3747:94;3837:3;3829:6;3822:4;3814:6;3810:17;3747:94;:::i;:::-;3738:103;;3554:293;3477:370;;;;:::o;3853:133::-;3896:5;3934:6;3921:20;3912:29;;3950:30;3974:5;3950:30;:::i;:::-;3853:133;;;;:::o;3992:137::-;4037:5;4075:6;4062:20;4053:29;;4091:32;4117:5;4091:32;:::i;:::-;3992:137;;;;:::o;4135:141::-;4191:5;4222:6;4216:13;4207:22;;4238:32;4264:5;4238:32;:::i;:::-;4135:141;;;;:::o;4295:338::-;4350:5;4399:3;4392:4;4384:6;4380:17;4376:27;4366:122;;4407:79;;:::i;:::-;4366:122;4524:6;4511:20;4549:78;4623:3;4615:6;4608:4;4600:6;4596:17;4549:78;:::i;:::-;4540:87;;4356:277;4295:338;;;;:::o;4653:340::-;4709:5;4758:3;4751:4;4743:6;4739:17;4735:27;4725:122;;4766:79;;:::i;:::-;4725:122;4883:6;4870:20;4908:79;4983:3;4975:6;4968:4;4960:6;4956:17;4908:79;:::i;:::-;4899:88;;4715:278;4653:340;;;;:::o;4999:139::-;5045:5;5083:6;5070:20;5061:29;;5099:33;5126:5;5099:33;:::i;:::-;4999:139;;;;:::o;5144:329::-;5203:6;5252:2;5240:9;5231:7;5227:23;5223:32;5220:119;;;5258:79;;:::i;:::-;5220:119;5378:1;5403:53;5448:7;5439:6;5428:9;5424:22;5403:53;:::i;:::-;5393:63;;5349:117;5144:329;;;;:::o;5479:474::-;5547:6;5555;5604:2;5592:9;5583:7;5579:23;5575:32;5572:119;;;5610:79;;:::i;:::-;5572:119;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;5479:474;;;;;:::o;5959:1509::-;6113:6;6121;6129;6137;6145;6194:3;6182:9;6173:7;6169:23;6165:33;6162:120;;;6201:79;;:::i;:::-;6162:120;6321:1;6346:53;6391:7;6382:6;6371:9;6367:22;6346:53;:::i;:::-;6336:63;;6292:117;6448:2;6474:53;6519:7;6510:6;6499:9;6495:22;6474:53;:::i;:::-;6464:63;;6419:118;6604:2;6593:9;6589:18;6576:32;6635:18;6627:6;6624:30;6621:117;;;6657:79;;:::i;:::-;6621:117;6762:78;6832:7;6823:6;6812:9;6808:22;6762:78;:::i;:::-;6752:88;;6547:303;6917:2;6906:9;6902:18;6889:32;6948:18;6940:6;6937:30;6934:117;;;6970:79;;:::i;:::-;6934:117;7075:78;7145:7;7136:6;7125:9;7121:22;7075:78;:::i;:::-;7065:88;;6860:303;7230:3;7219:9;7215:19;7202:33;7262:18;7254:6;7251:30;7248:117;;;7284:79;;:::i;:::-;7248:117;7389:62;7443:7;7434:6;7423:9;7419:22;7389:62;:::i;:::-;7379:72;;7173:288;5959:1509;;;;;;;;:::o;7474:1089::-;7578:6;7586;7594;7602;7610;7659:3;7647:9;7638:7;7634:23;7630:33;7627:120;;;7666:79;;:::i;:::-;7627:120;7786:1;7811:53;7856:7;7847:6;7836:9;7832:22;7811:53;:::i;:::-;7801:63;;7757:117;7913:2;7939:53;7984:7;7975:6;7964:9;7960:22;7939:53;:::i;:::-;7929:63;;7884:118;8041:2;8067:53;8112:7;8103:6;8092:9;8088:22;8067:53;:::i;:::-;8057:63;;8012:118;8169:2;8195:53;8240:7;8231:6;8220:9;8216:22;8195:53;:::i;:::-;8185:63;;8140:118;8325:3;8314:9;8310:19;8297:33;8357:18;8349:6;8346:30;8343:117;;;8379:79;;:::i;:::-;8343:117;8484:62;8538:7;8529:6;8518:9;8514:22;8484:62;:::i;:::-;8474:72;;8268:288;7474:1089;;;;;;;;:::o;8569:1039::-;8696:6;8704;8712;8761:2;8749:9;8740:7;8736:23;8732:32;8729:119;;;8767:79;;:::i;:::-;8729:119;8887:1;8912:53;8957:7;8948:6;8937:9;8933:22;8912:53;:::i;:::-;8902:63;;8858:117;9042:2;9031:9;9027:18;9014:32;9073:18;9065:6;9062:30;9059:117;;;9095:79;;:::i;:::-;9059:117;9200:78;9270:7;9261:6;9250:9;9246:22;9200:78;:::i;:::-;9190:88;;8985:303;9355:2;9344:9;9340:18;9327:32;9386:18;9378:6;9375:30;9372:117;;;9408:79;;:::i;:::-;9372:117;9513:78;9583:7;9574:6;9563:9;9559:22;9513:78;:::i;:::-;9503:88;;9298:303;8569:1039;;;;;:::o;9614:1751::-;9809:6;9817;9825;9833;9841;9890:3;9878:9;9869:7;9865:23;9861:33;9858:120;;;9897:79;;:::i;:::-;9858:120;10017:1;10042:53;10087:7;10078:6;10067:9;10063:22;10042:53;:::i;:::-;10032:63;;9988:117;10172:2;10161:9;10157:18;10144:32;10203:18;10195:6;10192:30;10189:117;;;10225:79;;:::i;:::-;10189:117;10330:78;10400:7;10391:6;10380:9;10376:22;10330:78;:::i;:::-;10320:88;;10115:303;10485:2;10474:9;10470:18;10457:32;10516:18;10508:6;10505:30;10502:117;;;10538:79;;:::i;:::-;10502:117;10643:78;10713:7;10704:6;10693:9;10689:22;10643:78;:::i;:::-;10633:88;;10428:303;10798:2;10787:9;10783:18;10770:32;10829:18;10821:6;10818:30;10815:117;;;10851:79;;:::i;:::-;10815:117;10956:78;11026:7;11017:6;11006:9;11002:22;10956:78;:::i;:::-;10946:88;;10741:303;11111:3;11100:9;11096:19;11083:33;11143:18;11135:6;11132:30;11129:117;;;11165:79;;:::i;:::-;11129:117;11270:78;11340:7;11331:6;11320:9;11316:22;11270:78;:::i;:::-;11260:88;;11054:304;9614:1751;;;;;;;;:::o;11371:468::-;11436:6;11444;11493:2;11481:9;11472:7;11468:23;11464:32;11461:119;;;11499:79;;:::i;:::-;11461:119;11619:1;11644:53;11689:7;11680:6;11669:9;11665:22;11644:53;:::i;:::-;11634:63;;11590:117;11746:2;11772:50;11814:7;11805:6;11794:9;11790:22;11772:50;:::i;:::-;11762:60;;11717:115;11371:468;;;;;:::o;11845:474::-;11913:6;11921;11970:2;11958:9;11949:7;11945:23;11941:32;11938:119;;;11976:79;;:::i;:::-;11938:119;12096:1;12121:53;12166:7;12157:6;12146:9;12142:22;12121:53;:::i;:::-;12111:63;;12067:117;12223:2;12249:53;12294:7;12285:6;12274:9;12270:22;12249:53;:::i;:::-;12239:63;;12194:118;11845:474;;;;;:::o;12325:619::-;12402:6;12410;12418;12467:2;12455:9;12446:7;12442:23;12438:32;12435:119;;;12473:79;;:::i;:::-;12435:119;12593:1;12618:53;12663:7;12654:6;12643:9;12639:22;12618:53;:::i;:::-;12608:63;;12564:117;12720:2;12746:53;12791:7;12782:6;12771:9;12767:22;12746:53;:::i;:::-;12736:63;;12691:118;12848:2;12874:53;12919:7;12910:6;12899:9;12895:22;12874:53;:::i;:::-;12864:63;;12819:118;12325:619;;;;;:::o;12950:849::-;13054:6;13062;13070;13078;13127:2;13115:9;13106:7;13102:23;13098:32;13095:119;;;13133:79;;:::i;:::-;13095:119;13281:1;13270:9;13266:17;13253:31;13311:18;13303:6;13300:30;13297:117;;;13333:79;;:::i;:::-;13297:117;13446:80;13518:7;13509:6;13498:9;13494:22;13446:80;:::i;:::-;13428:98;;;;13224:312;13575:2;13601:53;13646:7;13637:6;13626:9;13622:22;13601:53;:::i;:::-;13591:63;;13546:118;13703:2;13729:53;13774:7;13765:6;13754:9;13750:22;13729:53;:::i;:::-;13719:63;;13674:118;12950:849;;;;;;;:::o;13805:894::-;13923:6;13931;13980:2;13968:9;13959:7;13955:23;13951:32;13948:119;;;13986:79;;:::i;:::-;13948:119;14134:1;14123:9;14119:17;14106:31;14164:18;14156:6;14153:30;14150:117;;;14186:79;;:::i;:::-;14150:117;14291:78;14361:7;14352:6;14341:9;14337:22;14291:78;:::i;:::-;14281:88;;14077:302;14446:2;14435:9;14431:18;14418:32;14477:18;14469:6;14466:30;14463:117;;;14499:79;;:::i;:::-;14463:117;14604:78;14674:7;14665:6;14654:9;14650:22;14604:78;:::i;:::-;14594:88;;14389:303;13805:894;;;;;:::o;14705:::-;14823:6;14831;14880:2;14868:9;14859:7;14855:23;14851:32;14848:119;;;14886:79;;:::i;:::-;14848:119;15034:1;15023:9;15019:17;15006:31;15064:18;15056:6;15053:30;15050:117;;;15086:79;;:::i;:::-;15050:117;15191:78;15261:7;15252:6;15241:9;15237:22;15191:78;:::i;:::-;15181:88;;14977:302;15346:2;15335:9;15331:18;15318:32;15377:18;15369:6;15366:30;15363:117;;;15399:79;;:::i;:::-;15363:117;15504:78;15574:7;15565:6;15554:9;15550:22;15504:78;:::i;:::-;15494:88;;15289:303;14705:894;;;;;:::o;15605:327::-;15663:6;15712:2;15700:9;15691:7;15687:23;15683:32;15680:119;;;15718:79;;:::i;:::-;15680:119;15838:1;15863:52;15907:7;15898:6;15887:9;15883:22;15863:52;:::i;:::-;15853:62;;15809:116;15605:327;;;;:::o;15938:349::-;16007:6;16056:2;16044:9;16035:7;16031:23;16027:32;16024:119;;;16062:79;;:::i;:::-;16024:119;16182:1;16207:63;16262:7;16253:6;16242:9;16238:22;16207:63;:::i;:::-;16197:73;;16153:127;15938:349;;;;:::o;16293:329::-;16352:6;16401:2;16389:9;16380:7;16376:23;16372:32;16369:119;;;16407:79;;:::i;:::-;16369:119;16527:1;16552:53;16597:7;16588:6;16577:9;16573:22;16552:53;:::i;:::-;16542:63;;16498:117;16293:329;;;;:::o;16628:654::-;16706:6;16714;16763:2;16751:9;16742:7;16738:23;16734:32;16731:119;;;16769:79;;:::i;:::-;16731:119;16889:1;16914:53;16959:7;16950:6;16939:9;16935:22;16914:53;:::i;:::-;16904:63;;16860:117;17044:2;17033:9;17029:18;17016:32;17075:18;17067:6;17064:30;17061:117;;;17097:79;;:::i;:::-;17061:117;17202:63;17257:7;17248:6;17237:9;17233:22;17202:63;:::i;:::-;17192:73;;16987:288;16628:654;;;;;:::o;17288:474::-;17356:6;17364;17413:2;17401:9;17392:7;17388:23;17384:32;17381:119;;;17419:79;;:::i;:::-;17381:119;17539:1;17564:53;17609:7;17600:6;17589:9;17585:22;17564:53;:::i;:::-;17554:63;;17510:117;17666:2;17692:53;17737:7;17728:6;17717:9;17713:22;17692:53;:::i;:::-;17682:63;;17637:118;17288:474;;;;;:::o;17768:179::-;17837:10;17858:46;17900:3;17892:6;17858:46;:::i;:::-;17936:4;17931:3;17927:14;17913:28;;17768:179;;;;:::o;17953:118::-;18040:24;18058:5;18040:24;:::i;:::-;18035:3;18028:37;17953:118;;:::o;18107:732::-;18226:3;18255:54;18303:5;18255:54;:::i;:::-;18325:86;18404:6;18399:3;18325:86;:::i;:::-;18318:93;;18435:56;18485:5;18435:56;:::i;:::-;18514:7;18545:1;18530:284;18555:6;18552:1;18549:13;18530:284;;;18631:6;18625:13;18658:63;18717:3;18702:13;18658:63;:::i;:::-;18651:70;;18744:60;18797:6;18744:60;:::i;:::-;18734:70;;18590:224;18577:1;18574;18570:9;18565:14;;18530:284;;;18534:14;18830:3;18823:10;;18231:608;;;18107:732;;;;:::o;18845:109::-;18926:21;18941:5;18926:21;:::i;:::-;18921:3;18914:34;18845:109;;:::o;18960:360::-;19046:3;19074:38;19106:5;19074:38;:::i;:::-;19128:70;19191:6;19186:3;19128:70;:::i;:::-;19121:77;;19207:52;19252:6;19247:3;19240:4;19233:5;19229:16;19207:52;:::i;:::-;19284:29;19306:6;19284:29;:::i;:::-;19279:3;19275:39;19268:46;;19050:270;18960:360;;;;:::o;19326:364::-;19414:3;19442:39;19475:5;19442:39;:::i;:::-;19497:71;19561:6;19556:3;19497:71;:::i;:::-;19490:78;;19577:52;19622:6;19617:3;19610:4;19603:5;19599:16;19577:52;:::i;:::-;19654:29;19676:6;19654:29;:::i;:::-;19649:3;19645:39;19638:46;;19418:272;19326:364;;;;:::o;19696:366::-;19838:3;19859:67;19923:2;19918:3;19859:67;:::i;:::-;19852:74;;19935:93;20024:3;19935:93;:::i;:::-;20053:2;20048:3;20044:12;20037:19;;19696:366;;;:::o;20068:::-;20210:3;20231:67;20295:2;20290:3;20231:67;:::i;:::-;20224:74;;20307:93;20396:3;20307:93;:::i;:::-;20425:2;20420:3;20416:12;20409:19;;20068:366;;;:::o;20440:::-;20582:3;20603:67;20667:2;20662:3;20603:67;:::i;:::-;20596:74;;20679:93;20768:3;20679:93;:::i;:::-;20797:2;20792:3;20788:12;20781:19;;20440:366;;;:::o;20812:::-;20954:3;20975:67;21039:2;21034:3;20975:67;:::i;:::-;20968:74;;21051:93;21140:3;21051:93;:::i;:::-;21169:2;21164:3;21160:12;21153:19;;20812:366;;;:::o;21184:::-;21326:3;21347:67;21411:2;21406:3;21347:67;:::i;:::-;21340:74;;21423:93;21512:3;21423:93;:::i;:::-;21541:2;21536:3;21532:12;21525:19;;21184:366;;;:::o;21556:::-;21698:3;21719:67;21783:2;21778:3;21719:67;:::i;:::-;21712:74;;21795:93;21884:3;21795:93;:::i;:::-;21913:2;21908:3;21904:12;21897:19;;21556:366;;;:::o;21928:::-;22070:3;22091:67;22155:2;22150:3;22091:67;:::i;:::-;22084:74;;22167:93;22256:3;22167:93;:::i;:::-;22285:2;22280:3;22276:12;22269:19;;21928:366;;;:::o;22300:::-;22442:3;22463:67;22527:2;22522:3;22463:67;:::i;:::-;22456:74;;22539:93;22628:3;22539:93;:::i;:::-;22657:2;22652:3;22648:12;22641:19;;22300:366;;;:::o;22672:::-;22814:3;22835:67;22899:2;22894:3;22835:67;:::i;:::-;22828:74;;22911:93;23000:3;22911:93;:::i;:::-;23029:2;23024:3;23020:12;23013:19;;22672:366;;;:::o;23044:::-;23186:3;23207:67;23271:2;23266:3;23207:67;:::i;:::-;23200:74;;23283:93;23372:3;23283:93;:::i;:::-;23401:2;23396:3;23392:12;23385:19;;23044:366;;;:::o;23416:::-;23558:3;23579:67;23643:2;23638:3;23579:67;:::i;:::-;23572:74;;23655:93;23744:3;23655:93;:::i;:::-;23773:2;23768:3;23764:12;23757:19;;23416:366;;;:::o;23788:::-;23930:3;23951:67;24015:2;24010:3;23951:67;:::i;:::-;23944:74;;24027:93;24116:3;24027:93;:::i;:::-;24145:2;24140:3;24136:12;24129:19;;23788:366;;;:::o;24160:::-;24302:3;24323:67;24387:2;24382:3;24323:67;:::i;:::-;24316:74;;24399:93;24488:3;24399:93;:::i;:::-;24517:2;24512:3;24508:12;24501:19;;24160:366;;;:::o;24532:::-;24674:3;24695:67;24759:2;24754:3;24695:67;:::i;:::-;24688:74;;24771:93;24860:3;24771:93;:::i;:::-;24889:2;24884:3;24880:12;24873:19;;24532:366;;;:::o;24904:::-;25046:3;25067:67;25131:2;25126:3;25067:67;:::i;:::-;25060:74;;25143:93;25232:3;25143:93;:::i;:::-;25261:2;25256:3;25252:12;25245:19;;24904:366;;;:::o;25276:108::-;25353:24;25371:5;25353:24;:::i;:::-;25348:3;25341:37;25276:108;;:::o;25390:118::-;25477:24;25495:5;25477:24;:::i;:::-;25472:3;25465:37;25390:118;;:::o;25514:222::-;25607:4;25645:2;25634:9;25630:18;25622:26;;25658:71;25726:1;25715:9;25711:17;25702:6;25658:71;:::i;:::-;25514:222;;;;:::o;25742:1053::-;26065:4;26103:3;26092:9;26088:19;26080:27;;26117:71;26185:1;26174:9;26170:17;26161:6;26117:71;:::i;:::-;26198:72;26266:2;26255:9;26251:18;26242:6;26198:72;:::i;:::-;26317:9;26311:4;26307:20;26302:2;26291:9;26287:18;26280:48;26345:108;26448:4;26439:6;26345:108;:::i;:::-;26337:116;;26500:9;26494:4;26490:20;26485:2;26474:9;26470:18;26463:48;26528:108;26631:4;26622:6;26528:108;:::i;:::-;26520:116;;26684:9;26678:4;26674:20;26668:3;26657:9;26653:19;26646:49;26712:76;26783:4;26774:6;26712:76;:::i;:::-;26704:84;;25742:1053;;;;;;;;:::o;26801:751::-;27024:4;27062:3;27051:9;27047:19;27039:27;;27076:71;27144:1;27133:9;27129:17;27120:6;27076:71;:::i;:::-;27157:72;27225:2;27214:9;27210:18;27201:6;27157:72;:::i;:::-;27239;27307:2;27296:9;27292:18;27283:6;27239:72;:::i;:::-;27321;27389:2;27378:9;27374:18;27365:6;27321:72;:::i;:::-;27441:9;27435:4;27431:20;27425:3;27414:9;27410:19;27403:49;27469:76;27540:4;27531:6;27469:76;:::i;:::-;27461:84;;26801:751;;;;;;;;:::o;27558:373::-;27701:4;27739:2;27728:9;27724:18;27716:26;;27788:9;27782:4;27778:20;27774:1;27763:9;27759:17;27752:47;27816:108;27919:4;27910:6;27816:108;:::i;:::-;27808:116;;27558:373;;;;:::o;27937:634::-;28158:4;28196:2;28185:9;28181:18;28173:26;;28245:9;28239:4;28235:20;28231:1;28220:9;28216:17;28209:47;28273:108;28376:4;28367:6;28273:108;:::i;:::-;28265:116;;28428:9;28422:4;28418:20;28413:2;28402:9;28398:18;28391:48;28456:108;28559:4;28550:6;28456:108;:::i;:::-;28448:116;;27937:634;;;;;:::o;28577:210::-;28664:4;28702:2;28691:9;28687:18;28679:26;;28715:65;28777:1;28766:9;28762:17;28753:6;28715:65;:::i;:::-;28577:210;;;;:::o;28793:313::-;28906:4;28944:2;28933:9;28929:18;28921:26;;28993:9;28987:4;28983:20;28979:1;28968:9;28964:17;28957:47;29021:78;29094:4;29085:6;29021:78;:::i;:::-;29013:86;;28793:313;;;;:::o;29112:419::-;29278:4;29316:2;29305:9;29301:18;29293:26;;29365:9;29359:4;29355:20;29351:1;29340:9;29336:17;29329:47;29393:131;29519:4;29393:131;:::i;:::-;29385:139;;29112:419;;;:::o;29537:::-;29703:4;29741:2;29730:9;29726:18;29718:26;;29790:9;29784:4;29780:20;29776:1;29765:9;29761:17;29754:47;29818:131;29944:4;29818:131;:::i;:::-;29810:139;;29537:419;;;:::o;29962:::-;30128:4;30166:2;30155:9;30151:18;30143:26;;30215:9;30209:4;30205:20;30201:1;30190:9;30186:17;30179:47;30243:131;30369:4;30243:131;:::i;:::-;30235:139;;29962:419;;;:::o;30387:::-;30553:4;30591:2;30580:9;30576:18;30568:26;;30640:9;30634:4;30630:20;30626:1;30615:9;30611:17;30604:47;30668:131;30794:4;30668:131;:::i;:::-;30660:139;;30387:419;;;:::o;30812:::-;30978:4;31016:2;31005:9;31001:18;30993:26;;31065:9;31059:4;31055:20;31051:1;31040:9;31036:17;31029:47;31093:131;31219:4;31093:131;:::i;:::-;31085:139;;30812:419;;;:::o;31237:::-;31403:4;31441:2;31430:9;31426:18;31418:26;;31490:9;31484:4;31480:20;31476:1;31465:9;31461:17;31454:47;31518:131;31644:4;31518:131;:::i;:::-;31510:139;;31237:419;;;:::o;31662:::-;31828:4;31866:2;31855:9;31851:18;31843:26;;31915:9;31909:4;31905:20;31901:1;31890:9;31886:17;31879:47;31943:131;32069:4;31943:131;:::i;:::-;31935:139;;31662:419;;;:::o;32087:::-;32253:4;32291:2;32280:9;32276:18;32268:26;;32340:9;32334:4;32330:20;32326:1;32315:9;32311:17;32304:47;32368:131;32494:4;32368:131;:::i;:::-;32360:139;;32087:419;;;:::o;32512:::-;32678:4;32716:2;32705:9;32701:18;32693:26;;32765:9;32759:4;32755:20;32751:1;32740:9;32736:17;32729:47;32793:131;32919:4;32793:131;:::i;:::-;32785:139;;32512:419;;;:::o;32937:::-;33103:4;33141:2;33130:9;33126:18;33118:26;;33190:9;33184:4;33180:20;33176:1;33165:9;33161:17;33154:47;33218:131;33344:4;33218:131;:::i;:::-;33210:139;;32937:419;;;:::o;33362:::-;33528:4;33566:2;33555:9;33551:18;33543:26;;33615:9;33609:4;33605:20;33601:1;33590:9;33586:17;33579:47;33643:131;33769:4;33643:131;:::i;:::-;33635:139;;33362:419;;;:::o;33787:::-;33953:4;33991:2;33980:9;33976:18;33968:26;;34040:9;34034:4;34030:20;34026:1;34015:9;34011:17;34004:47;34068:131;34194:4;34068:131;:::i;:::-;34060:139;;33787:419;;;:::o;34212:::-;34378:4;34416:2;34405:9;34401:18;34393:26;;34465:9;34459:4;34455:20;34451:1;34440:9;34436:17;34429:47;34493:131;34619:4;34493:131;:::i;:::-;34485:139;;34212:419;;;:::o;34637:::-;34803:4;34841:2;34830:9;34826:18;34818:26;;34890:9;34884:4;34880:20;34876:1;34865:9;34861:17;34854:47;34918:131;35044:4;34918:131;:::i;:::-;34910:139;;34637:419;;;:::o;35062:::-;35228:4;35266:2;35255:9;35251:18;35243:26;;35315:9;35309:4;35305:20;35301:1;35290:9;35286:17;35279:47;35343:131;35469:4;35343:131;:::i;:::-;35335:139;;35062:419;;;:::o;35487:222::-;35580:4;35618:2;35607:9;35603:18;35595:26;;35631:71;35699:1;35688:9;35684:17;35675:6;35631:71;:::i;:::-;35487:222;;;;:::o;35715:332::-;35836:4;35874:2;35863:9;35859:18;35851:26;;35887:71;35955:1;35944:9;35940:17;35931:6;35887:71;:::i;:::-;35968:72;36036:2;36025:9;36021:18;36012:6;35968:72;:::i;:::-;35715:332;;;;;:::o;36053:129::-;36087:6;36114:20;;:::i;:::-;36104:30;;36143:33;36171:4;36163:6;36143:33;:::i;:::-;36053:129;;;:::o;36188:75::-;36221:6;36254:2;36248:9;36238:19;;36188:75;:::o;36269:311::-;36346:4;36436:18;36428:6;36425:30;36422:56;;;36458:18;;:::i;:::-;36422:56;36508:4;36500:6;36496:17;36488:25;;36568:4;36562;36558:15;36550:23;;36269:311;;;:::o;36586:::-;36663:4;36753:18;36745:6;36742:30;36739:56;;;36775:18;;:::i;:::-;36739:56;36825:4;36817:6;36813:17;36805:25;;36885:4;36879;36875:15;36867:23;;36586:311;;;:::o;36903:307::-;36964:4;37054:18;37046:6;37043:30;37040:56;;;37076:18;;:::i;:::-;37040:56;37114:29;37136:6;37114:29;:::i;:::-;37106:37;;37198:4;37192;37188:15;37180:23;;36903:307;;;:::o;37216:308::-;37278:4;37368:18;37360:6;37357:30;37354:56;;;37390:18;;:::i;:::-;37354:56;37428:29;37450:6;37428:29;:::i;:::-;37420:37;;37512:4;37506;37502:15;37494:23;;37216:308;;;:::o;37530:132::-;37597:4;37620:3;37612:11;;37650:4;37645:3;37641:14;37633:22;;37530:132;;;:::o;37668:114::-;37735:6;37769:5;37763:12;37753:22;;37668:114;;;:::o;37788:98::-;37839:6;37873:5;37867:12;37857:22;;37788:98;;;:::o;37892:99::-;37944:6;37978:5;37972:12;37962:22;;37892:99;;;:::o;37997:113::-;38067:4;38099;38094:3;38090:14;38082:22;;37997:113;;;:::o;38116:184::-;38215:11;38249:6;38244:3;38237:19;38289:4;38284:3;38280:14;38265:29;;38116:184;;;;:::o;38306:168::-;38389:11;38423:6;38418:3;38411:19;38463:4;38458:3;38454:14;38439:29;;38306:168;;;;:::o;38480:169::-;38564:11;38598:6;38593:3;38586:19;38638:4;38633:3;38629:14;38614:29;;38480:169;;;;:::o;38655:305::-;38695:3;38714:20;38732:1;38714:20;:::i;:::-;38709:25;;38748:20;38766:1;38748:20;:::i;:::-;38743:25;;38902:1;38834:66;38830:74;38827:1;38824:81;38821:107;;;38908:18;;:::i;:::-;38821:107;38952:1;38949;38945:9;38938:16;;38655:305;;;;:::o;38966:96::-;39003:7;39032:24;39050:5;39032:24;:::i;:::-;39021:35;;38966:96;;;:::o;39068:90::-;39102:7;39145:5;39138:13;39131:21;39120:32;;39068:90;;;:::o;39164:149::-;39200:7;39240:66;39233:5;39229:78;39218:89;;39164:149;;;:::o;39319:126::-;39356:7;39396:42;39389:5;39385:54;39374:65;;39319:126;;;:::o;39451:77::-;39488:7;39517:5;39506:16;;39451:77;;;:::o;39534:154::-;39618:6;39613:3;39608;39595:30;39680:1;39671:6;39666:3;39662:16;39655:27;39534:154;;;:::o;39694:307::-;39762:1;39772:113;39786:6;39783:1;39780:13;39772:113;;;39871:1;39866:3;39862:11;39856:18;39852:1;39847:3;39843:11;39836:39;39808:2;39805:1;39801:10;39796:15;;39772:113;;;39903:6;39900:1;39897:13;39894:101;;;39983:1;39974:6;39969:3;39965:16;39958:27;39894:101;39743:258;39694:307;;;:::o;40007:320::-;40051:6;40088:1;40082:4;40078:12;40068:22;;40135:1;40129:4;40125:12;40156:18;40146:81;;40212:4;40204:6;40200:17;40190:27;;40146:81;40274:2;40266:6;40263:14;40243:18;40240:38;40237:84;;;40293:18;;:::i;:::-;40237:84;40058:269;40007:320;;;:::o;40333:281::-;40416:27;40438:4;40416:27;:::i;:::-;40408:6;40404:40;40546:6;40534:10;40531:22;40510:18;40498:10;40495:34;40492:62;40489:88;;;40557:18;;:::i;:::-;40489:88;40597:10;40593:2;40586:22;40376:238;40333:281;;:::o;40620:233::-;40659:3;40682:24;40700:5;40682:24;:::i;:::-;40673:33;;40728:66;40721:5;40718:77;40715:103;;;40798:18;;:::i;:::-;40715:103;40845:1;40838:5;40834:13;40827:20;;40620:233;;;:::o;40859:180::-;40907:77;40904:1;40897:88;41004:4;41001:1;40994:15;41028:4;41025:1;41018:15;41045:180;41093:77;41090:1;41083:88;41190:4;41187:1;41180:15;41214:4;41211:1;41204:15;41231:180;41279:77;41276:1;41269:88;41376:4;41373:1;41366:15;41400:4;41397:1;41390:15;41417:180;41465:77;41462:1;41455:88;41562:4;41559:1;41552:15;41586:4;41583:1;41576:15;41603:183;41638:3;41676:1;41658:16;41655:23;41652:128;;;41714:1;41711;41708;41693:23;41736:34;41767:1;41761:8;41736:34;:::i;:::-;41729:41;;41652:128;41603:183;:::o;41792:117::-;41901:1;41898;41891:12;41915:117;42024:1;42021;42014:12;42038:117;42147:1;42144;42137:12;42161:117;42270:1;42267;42260:12;42284:117;42393:1;42390;42383:12;42407:117;42516:1;42513;42506:12;42530:102;42571:6;42622:2;42618:7;42613:2;42606:5;42602:14;42598:28;42588:38;;42530:102;;;:::o;42638:106::-;42682:8;42731:5;42726:3;42722:15;42701:36;;42638:106;;;:::o;42750:239::-;42890:34;42886:1;42878:6;42874:14;42867:58;42959:22;42954:2;42946:6;42942:15;42935:47;42750:239;:::o;42995:227::-;43135:34;43131:1;43123:6;43119:14;43112:58;43204:10;43199:2;43191:6;43187:15;43180:35;42995:227;:::o;43228:230::-;43368:34;43364:1;43356:6;43352:14;43345:58;43437:13;43432:2;43424:6;43420:15;43413:38;43228:230;:::o;43464:225::-;43604:34;43600:1;43592:6;43588:14;43581:58;43673:8;43668:2;43660:6;43656:15;43649:33;43464:225;:::o;43695:223::-;43835:34;43831:1;43823:6;43819:14;43812:58;43904:6;43899:2;43891:6;43887:15;43880:31;43695:223;:::o;43924:228::-;44064:34;44060:1;44052:6;44048:14;44041:58;44133:11;44128:2;44120:6;44116:15;44109:36;43924:228;:::o;44158:224::-;44298:34;44294:1;44286:6;44282:14;44275:58;44367:7;44362:2;44354:6;44350:15;44343:32;44158:224;:::o;44388:237::-;44528:34;44524:1;44516:6;44512:14;44505:58;44597:20;44592:2;44584:6;44580:15;44573:45;44388:237;:::o;44631:222::-;44771:34;44767:1;44759:6;44755:14;44748:58;44840:5;44835:2;44827:6;44823:15;44816:30;44631:222;:::o;44859:229::-;44999:34;44995:1;44987:6;44983:14;44976:58;45068:12;45063:2;45055:6;45051:15;45044:37;44859:229;:::o;45094:182::-;45234:34;45230:1;45222:6;45218:14;45211:58;45094:182;:::o;45282:228::-;45422:34;45418:1;45410:6;45406:14;45399:58;45491:11;45486:2;45478:6;45474:15;45467:36;45282:228;:::o;45516:::-;45656:34;45652:1;45644:6;45640:14;45633:58;45725:11;45720:2;45712:6;45708:15;45701:36;45516:228;:::o;45750:227::-;45890:34;45886:1;45878:6;45874:14;45867:58;45959:10;45954:2;45946:6;45942:15;45935:35;45750:227;:::o;45983:220::-;46123:34;46119:1;46111:6;46107:14;46100:58;46192:3;46187:2;46179:6;46175:15;46168:28;45983:220;:::o;46209:711::-;46248:3;46286:4;46268:16;46265:26;46262:39;;;46294:5;;46262:39;46323:20;;:::i;:::-;46398:1;46380:16;46376:24;46373:1;46367:4;46352:49;46431:4;46425:11;46530:16;46523:4;46515:6;46511:17;46508:39;46475:18;46467:6;46464:30;46448:113;46445:146;;;46576:5;;;;46445:146;46622:6;46616:4;46612:17;46658:3;46652:10;46685:18;46677:6;46674:30;46671:43;;;46707:5;;;;;;46671:43;46755:6;46748:4;46743:3;46739:14;46735:27;46814:1;46796:16;46792:24;46786:4;46782:35;46777:3;46774:44;46771:57;;;46821:5;;;;;;;46771:57;46838;46886:6;46880:4;46876:17;46868:6;46864:30;46858:4;46838:57;:::i;:::-;46911:3;46904:10;;46252:668;;;;;46209:711;;:::o;46926:122::-;46999:24;47017:5;46999:24;:::i;:::-;46992:5;46989:35;46979:63;;47038:1;47035;47028:12;46979:63;46926:122;:::o;47054:116::-;47124:21;47139:5;47124:21;:::i;:::-;47117:5;47114:32;47104:60;;47160:1;47157;47150:12;47104:60;47054:116;:::o;47176:120::-;47248:23;47265:5;47248:23;:::i;:::-;47241:5;47238:34;47228:62;;47286:1;47283;47276:12;47228:62;47176:120;:::o;47302:122::-;47375:24;47393:5;47375:24;:::i;:::-;47368:5;47365:35;47355:63;;47414:1;47411;47404:12;47355:63;47302:122;:::o
Swarm Source
ipfs://70a9b73e797950e24469e442c244a6a9d5cf1919256000569951582d6e076e83
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.