Polygon Sponsored slots available. Book your slot here!
Contract Overview
[ Download CSV Export ]
Contract Name:
EmojionalDinos
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-12-19 */ // SPDX-License-Identifier: MIT // File: contracts/Base64.sol pragma solidity ^0.8.0; /// @title Base64 /// @author Brecht Devos - <[email protected]> /// @notice Provides a function for encoding some bytes in base64 library Base64 { string internal constant TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; function encode(bytes memory data) internal pure returns (string memory) { if (data.length == 0) return ''; // load the table into memory string memory table = TABLE; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((data.length + 2) / 3); // add some extra buffer at the end required for the writing string memory result = new string(encodedLen + 32); assembly { // set the actual output length mstore(result, encodedLen) // prepare the lookup table let tablePtr := add(table, 1) // input ptr let dataPtr := data let endPtr := add(dataPtr, mload(data)) // result ptr, jump over length let resultPtr := add(result, 32) // run over the input, 3 bytes at a time for {} lt(dataPtr, endPtr) {} { dataPtr := add(dataPtr, 3) // read 3 bytes let input := mload(dataPtr) // write 4 characters mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr(18, input), 0x3F))))) resultPtr := add(resultPtr, 1) mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr(12, input), 0x3F))))) resultPtr := add(resultPtr, 1) mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr( 6, input), 0x3F))))) resultPtr := add(resultPtr, 1) mstore(resultPtr, shl(248, mload(add(tablePtr, and( input, 0x3F))))) resultPtr := add(resultPtr, 1) } // padding with '=' switch mod(mload(data), 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } } return result; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/EmojiDino.sol // Amended by Hashlips pragma solidity >=0.7.0 <0.9.0; contract EmojionalDinos is ERC721Enumerable, Ownable { using Strings for uint256; string[] public dinomojis = [unicode"🦕", unicode"🦖"]; string[] public dinomojisN = ["Brachiosaurus", "T-Rex"]; string[] public bubbles = [unicode"💭", unicode"🗯️"]; string[] public emotions = [unicode"😊", unicode"😇", unicode"😍", unicode"😛", unicode"😁", unicode"🐵", unicode"😎", unicode"🥰", unicode"🤣", unicode"🤠", unicode"😆", unicode"😅", unicode"😈", unicode"🤡", unicode"👽"]; string[] public emotionsN = ["happy", "an angel", "in love", "having fun", "amused", "joking around", "cool", "feeling loved", "laughing a lot", "going for it", "feeling excited", "nervous", "planning something naughty", "being foolish", "feeling weird"]; string[] public bgcolors = ["#c75050", "#c7b750", "#50c79b", "#5066c7", "#c75082"]; string[] public bgcolorsN = ["Red", "Yellow", "Green", "Blue", "Pink"]; struct Dino { string dinomoji; string dinomojiN; string bubble; string emotion; string emotionN; string bgcolor; string bgcolorN; } // List of dinosaurs on the blockchain mapping (uint256 => Dino) public dinos; constructor() ERC721("Emojional Dinosaurs", "EMODINO") {} // public function mint() public payable { uint256 supply = totalSupply(); require(supply + 1 <= 1000); // Random dino parts uint256 dinonr = randomNr(dinomojis.length, block.difficulty, supply); uint256 emonr = randomNr(emotions.length, block.timestamp, supply); uint256 bgnr = randomNr(bgcolors.length, block.difficulty, supply); // Create new dino Dino memory newdino = Dino( dinomojis[dinonr], dinomojisN[dinonr], bubbles[randomNr(dinomojis.length, block.timestamp, supply)], emotions[emonr], emotionsN[emonr], bgcolors[bgnr], bgcolorsN[bgnr] ); // Pay (except owner) /*if (msg.sender != owner()) { require(msg.value >= 0 ether); }*/ // Add dino to blockchain dinos[supply + 1] = newdino; _safeMint(msg.sender, supply + 1); } function randomNr(uint256 mod, uint256 seed, uint256 salt) public view returns(uint256) { return uint256(keccak256(abi.encodePacked(block.timestamp, msg.sender, seed, salt))) % mod; } function buildImage(uint256 tokenId) public view returns(string memory) { Dino memory currentdino = dinos[tokenId]; // Create image return Base64.encode(abi.encodePacked( '<svg width="500" height="500" xmlns="http://www.w3.org/2000/svg">', '<rect width="100%" height="100%" fill="' , currentdino.bgcolor, '"/>', '<text font-size="200" y="440" x="35">' , currentdino.dinomoji, '</text>', '<text font-size="250" y="260" x="160">' , currentdino.bubble, '</text>', '<text font-size="100" y="210" x="260">' , currentdino.emotion, '</text>', '<text font-size="30" y="35" x="10">Emojional Dinosaurs - #', tokenId.toString(), '</text>', '<text font-size="20" y="490" x="365">cryptosaurs.one</text>', '</svg>' )); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); Dino memory currentdino = dinos[tokenId]; // Create JSON for OpenSea return string(abi.encodePacked( 'data:application/json;base64,', Base64.encode(abi.encodePacked( '{', '"name": "Dinosaur ', currentdino.dinomoji, ' #', tokenId.toString(), ' is ', currentdino.emotion, '",', '"description": "Our ', currentdino.dinomojiN, ' is ', currentdino.emotionN, '", ', '"image": "data:image/svg+xml;base64,', buildImage(tokenId), '",', '"attributes": [', '{"trait_type": "Background", "value": "' , currentdino.bgcolorN, '"},', '{"trait_type": "Dinosaur", "value": "' , currentdino.dinomojiN, '"},', '{"trait_type": "Emotion", "value": "' , currentdino.emotionN, '"}', ']' '}' )) )); } //only owner function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bgcolors","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bgcolorsN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bubbles","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"buildImage","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dinomojis","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dinomojisN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dinos","outputs":[{"internalType":"string","name":"dinomoji","type":"string"},{"internalType":"string","name":"dinomojiN","type":"string"},{"internalType":"string","name":"bubble","type":"string"},{"internalType":"string","name":"emotion","type":"string"},{"internalType":"string","name":"emotionN","type":"string"},{"internalType":"string","name":"bgcolor","type":"string"},{"internalType":"string","name":"bgcolorN","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"emotions","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"emotionsN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mod","type":"uint256"},{"internalType":"uint256","name":"seed","type":"uint256"},{"internalType":"uint256","name":"salt","type":"uint256"}],"name":"randomNr","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405260405180604001604052806040518060400160405280600481526020017ff09fa6950000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017ff09fa69600000000000000000000000000000000000000000000000000000000815250815250600b9060026200009592919062000d06565b5060405180604001604052806040518060400160405280600d81526020017f4272616368696f7361757275730000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f542d526578000000000000000000000000000000000000000000000000000000815250815250600c9060026200012792919062000d06565b5060405180604001604052806040518060400160405280600481526020017ff09f92ad0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017ff09f97afefb88f00000000000000000000000000000000000000000000000000815250815250600d906002620001b992919062000d06565b50604051806101e001604052806040518060400160405280600481526020017ff09f988a0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017ff09f98870000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017ff09f988d0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017ff09f989b0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017ff09f98810000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017ff09f90b50000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017ff09f988e0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017ff09fa5b00000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017ff09fa4a30000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017ff09fa4a00000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017ff09f98860000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017ff09f98850000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017ff09f98880000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017ff09fa4a10000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017ff09f91bd00000000000000000000000000000000000000000000000000000000815250815250600e90600f6200054b92919062000d6d565b50604051806101e001604052806040518060400160405280600581526020017f686170707900000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f616e20616e67656c00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f696e206c6f76650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f686176696e672066756e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f616d75736564000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f6a6f6b696e672061726f756e640000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f636f6f6c0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f6665656c696e67206c6f7665640000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f6c61756768696e672061206c6f7400000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f676f696e6720666f72206974000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f6665656c696e672065786369746564000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f6e6572766f75730000000000000000000000000000000000000000000000000081525081526020016040518060400160405280601a81526020017f706c616e6e696e6720736f6d657468696e67206e61756768747900000000000081525081526020016040518060400160405280600d81526020017f6265696e6720666f6f6c6973680000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f6665656c696e6720776569726400000000000000000000000000000000000000815250815250600f90600f620008dd92919062000d6d565b506040518060a001604052806040518060400160405280600781526020017f236337353035300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236337623735300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233530633739620000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233530363663370000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f2363373530383200000000000000000000000000000000000000000000000000815250815250601090600562000a2092919062000dd4565b506040518060a001604052806040518060400160405280600381526020017f526564000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f59656c6c6f77000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f477265656e00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f426c75650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f50696e6b00000000000000000000000000000000000000000000000000000000815250815250601190600562000b6392919062000dd4565b5034801562000b7157600080fd5b506040518060400160405280601381526020017f456d6f6a696f6e616c2044696e6f7361757273000000000000000000000000008152506040518060400160405280600781526020017f454d4f44494e4f00000000000000000000000000000000000000000000000000815250816000908051906020019062000bf692919062000e3b565b50806001908051906020019062000c0f92919062000e3b565b50505062000c3262000c2662000c3860201b60201c565b62000c4060201b60201c565b62000fbe565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805482825590600052602060002090810192821562000d5a579160200282015b8281111562000d5957825182908051906020019062000d4892919062000e3b565b509160200191906001019062000d27565b5b50905062000d69919062000ecc565b5090565b82805482825590600052602060002090810192821562000dc1579160200282015b8281111562000dc057825182908051906020019062000daf92919062000e3b565b509160200191906001019062000d8e565b5b50905062000dd0919062000ecc565b5090565b82805482825590600052602060002090810192821562000e28579160200282015b8281111562000e2757825182908051906020019062000e1692919062000e3b565b509160200191906001019062000df5565b5b50905062000e37919062000ecc565b5090565b82805462000e499062000f59565b90600052602060002090601f01602090048101928262000e6d576000855562000eb9565b82601f1062000e8857805160ff191683800117855562000eb9565b8280016001018555821562000eb9579182015b8281111562000eb857825182559160200191906001019062000e9b565b5b50905062000ec8919062000ef4565b5090565b5b8082111562000ef0576000818162000ee6919062000f13565b5060010162000ecd565b5090565b5b8082111562000f0f57600081600090555060010162000ef5565b5090565b50805462000f219062000f59565b6000825580601f1062000f35575062000f56565b601f01602090049060005260206000209081019062000f55919062000ef4565b5b50565b6000600282049050600182168062000f7257607f821691505b6020821081141562000f895762000f8862000f8f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615fc98062000fce6000396000f3fe6080604052600436106101d85760003560e01c806357f3f6cb116101025780639a29969d11610095578063c87b56dd11610064578063c87b56dd1461071a578063e985e9c514610757578063f2fde38b14610794578063f49aa277146107bd576101d8565b80639a29969d14610648578063a22cb4651461068b578063b88d4fde146106b4578063bfeb52fd146106dd576101d8565b806370a08231116100d157806370a082311461059e578063715018a6146105db5780638da5cb5b146105f257806395d89b411461061d576101d8565b806357f3f6cb146104aa5780636352211e146104e7578063685bc1f0146105245780636a1ec7c114610561576101d8565b80632455a9281161017a5780633ccfd60b116101495780633ccfd60b146103fd57806342842e0e146104075780634f6ccce71461043057806354363f931461046d576101d8565b80632455a928146103095780632851d6cb146103465780632ba80eba146103835780632f745c59146103c0576101d8565b8063095ea7b3116101b6578063095ea7b3146102825780631249c58b146102ab57806318160ddd146102b557806323b872dd146102e0576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190614104565b6107fa565b6040516102119190614c0e565b60405180910390f35b34801561022657600080fd5b5061022f610874565b60405161023c9190614c29565b60405180910390f35b34801561025157600080fd5b5061026c6004803603810190610267919061415e565b610906565b6040516102799190614ba7565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a491906140c4565b61098b565b005b6102b3610aa3565b005b3480156102c157600080fd5b506102ca6110e1565b6040516102d79190614f2b565b60405180910390f35b3480156102ec57600080fd5b5061030760048036038101906103029190613fae565b6110ee565b005b34801561031557600080fd5b50610330600480360381019061032b919061415e565b61114e565b60405161033d9190614c29565b60405180910390f35b34801561035257600080fd5b5061036d6004803603810190610368919061415e565b6111fa565b60405161037a9190614c29565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a5919061415e565b6112a6565b6040516103b79190614c29565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e291906140c4565b611718565b6040516103f49190614f2b565b60405180910390f35b6104056117bd565b005b34801561041357600080fd5b5061042e60048036038101906104299190613fae565b6118b9565b005b34801561043c57600080fd5b506104576004803603810190610452919061415e565b6118d9565b6040516104649190614f2b565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f919061415e565b61194a565b6040516104a19190614c29565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc919061415e565b6119f6565b6040516104de9190614c29565b60405180910390f35b3480156104f357600080fd5b5061050e6004803603810190610509919061415e565b611aa2565b60405161051b9190614ba7565b60405180910390f35b34801561053057600080fd5b5061054b6004803603810190610546919061415e565b611b54565b6040516105589190614c29565b60405180910390f35b34801561056d57600080fd5b506105886004803603810190610583919061415e565b611c00565b6040516105959190614c29565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c09190613f41565b611cac565b6040516105d29190614f2b565b60405180910390f35b3480156105e757600080fd5b506105f0611d64565b005b3480156105fe57600080fd5b50610607611dec565b6040516106149190614ba7565b60405180910390f35b34801561062957600080fd5b50610632611e16565b60405161063f9190614c29565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a919061415e565b611ea8565b6040516106829796959493929190614c4b565b60405180910390f35b34801561069757600080fd5b506106b260048036038101906106ad9190614084565b6122a2565b005b3480156106c057600080fd5b506106db60048036038101906106d69190614001565b6122b8565b005b3480156106e957600080fd5b5061070460048036038101906106ff919061418b565b61231a565b6040516107119190614f2b565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c919061415e565b612360565b60405161074e9190614c29565b60405180910390f35b34801561076357600080fd5b5061077e60048036038101906107799190613f6e565b612855565b60405161078b9190614c0e565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b69190613f41565b6128e9565b005b3480156107c957600080fd5b506107e460048036038101906107df919061415e565b6129e1565b6040516107f19190614c29565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086d575061086c82612a8d565b5b9050919050565b606060008054610883906151b5565b80601f01602080910402602001604051908101604052809291908181526020018280546108af906151b5565b80156108fc5780601f106108d1576101008083540402835291602001916108fc565b820191906000526020600020905b8154815290600101906020018083116108df57829003601f168201915b5050505050905090565b600061091182612b6f565b610950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094790614e4b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061099682611aa2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe90614ecb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a26612bdb565b73ffffffffffffffffffffffffffffffffffffffff161480610a555750610a5481610a4f612bdb565b612855565b5b610a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8b90614dcb565b60405180910390fd5b610a9e8383612be3565b505050565b6000610aad6110e1565b90506103e8600182610abf9190614fea565b1115610aca57600080fd5b6000610adc600b80549050448461231a565b90506000610af0600e80549050428561231a565b90506000610b04601080549050448661231a565b905060006040518060e00160405280600b8681548110610b2757610b2661537c565b5b906000526020600020018054610b3c906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b68906151b5565b8015610bb55780601f10610b8a57610100808354040283529160200191610bb5565b820191906000526020600020905b815481529060010190602001808311610b9857829003601f168201915b50505050508152602001600c8681548110610bd357610bd261537c565b5b906000526020600020018054610be8906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610c14906151b5565b8015610c615780601f10610c3657610100808354040283529160200191610c61565b820191906000526020600020905b815481529060010190602001808311610c4457829003601f168201915b50505050508152602001600d610c7d600b80549050428a61231a565b81548110610c8e57610c8d61537c565b5b906000526020600020018054610ca3906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccf906151b5565b8015610d1c5780601f10610cf157610100808354040283529160200191610d1c565b820191906000526020600020905b815481529060010190602001808311610cff57829003601f168201915b50505050508152602001600e8581548110610d3a57610d3961537c565b5b906000526020600020018054610d4f906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7b906151b5565b8015610dc85780601f10610d9d57610100808354040283529160200191610dc8565b820191906000526020600020905b815481529060010190602001808311610dab57829003601f168201915b50505050508152602001600f8581548110610de657610de561537c565b5b906000526020600020018054610dfb906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e27906151b5565b8015610e745780601f10610e4957610100808354040283529160200191610e74565b820191906000526020600020905b815481529060010190602001808311610e5757829003601f168201915b5050505050815260200160108481548110610e9257610e9161537c565b5b906000526020600020018054610ea7906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed3906151b5565b8015610f205780601f10610ef557610100808354040283529160200191610f20565b820191906000526020600020905b815481529060010190602001808311610f0357829003601f168201915b5050505050815260200160118481548110610f3e57610f3d61537c565b5b906000526020600020018054610f53906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7f906151b5565b8015610fcc5780601f10610fa157610100808354040283529160200191610fcc565b820191906000526020600020905b815481529060010190602001808311610faf57829003601f168201915b505050505081525090508060126000600188610fe89190614fea565b81526020019081526020016000206000820151816000019080519060200190611012929190613dc5565b50602082015181600101908051906020019061102f929190613dc5565b50604082015181600201908051906020019061104c929190613dc5565b506060820151816003019080519060200190611069929190613dc5565b506080820151816004019080519060200190611086929190613dc5565b5060a08201518160050190805190602001906110a3929190613dc5565b5060c08201518160060190805190602001906110c0929190613dc5565b509050506110da336001876110d59190614fea565b612c9c565b5050505050565b6000600880549050905090565b6110ff6110f9612bdb565b82612cba565b61113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113590614eeb565b60405180910390fd5b611149838383612d98565b505050565b600d818154811061115e57600080fd5b906000526020600020016000915090508054611179906151b5565b80601f01602080910402602001604051908101604052809291908181526020018280546111a5906151b5565b80156111f25780601f106111c7576101008083540402835291602001916111f2565b820191906000526020600020905b8154815290600101906020018083116111d557829003601f168201915b505050505081565b600e818154811061120a57600080fd5b906000526020600020016000915090508054611225906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054611251906151b5565b801561129e5780601f106112735761010080835404028352916020019161129e565b820191906000526020600020905b81548152906001019060200180831161128157829003601f168201915b505050505081565b60606000601260008481526020019081526020016000206040518060e00160405290816000820180546112d8906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054611304906151b5565b80156113515780601f1061132657610100808354040283529160200191611351565b820191906000526020600020905b81548152906001019060200180831161133457829003601f168201915b5050505050815260200160018201805461136a906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054611396906151b5565b80156113e35780601f106113b8576101008083540402835291602001916113e3565b820191906000526020600020905b8154815290600101906020018083116113c657829003601f168201915b505050505081526020016002820180546113fc906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054611428906151b5565b80156114755780601f1061144a57610100808354040283529160200191611475565b820191906000526020600020905b81548152906001019060200180831161145857829003601f168201915b5050505050815260200160038201805461148e906151b5565b80601f01602080910402602001604051908101604052809291908181526020018280546114ba906151b5565b80156115075780601f106114dc57610100808354040283529160200191611507565b820191906000526020600020905b8154815290600101906020018083116114ea57829003601f168201915b50505050508152602001600482018054611520906151b5565b80601f016020809104026020016040519081016040528092919081815260200182805461154c906151b5565b80156115995780601f1061156e57610100808354040283529160200191611599565b820191906000526020600020905b81548152906001019060200180831161157c57829003601f168201915b505050505081526020016005820180546115b2906151b5565b80601f01602080910402602001604051908101604052809291908181526020018280546115de906151b5565b801561162b5780601f106116005761010080835404028352916020019161162b565b820191906000526020600020905b81548152906001019060200180831161160e57829003601f168201915b50505050508152602001600682018054611644906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054611670906151b5565b80156116bd5780601f10611692576101008083540402835291602001916116bd565b820191906000526020600020905b8154815290600101906020018083116116a057829003601f168201915b50505050508152505090506117108160a001518260000151836040015184606001516116e888612ff4565b6040516020016116fc959493929190614903565b604051602081830303815290604052613155565b915050919050565b600061172383611cac565b8210611764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175b90614ceb565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6117c5612bdb565b73ffffffffffffffffffffffffffffffffffffffff166117e3611dec565b73ffffffffffffffffffffffffffffffffffffffff1614611839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183090614e6b565b60405180910390fd5b6000611843611dec565b73ffffffffffffffffffffffffffffffffffffffff164760405161186690614b44565b60006040518083038185875af1925050503d80600081146118a3576040519150601f19603f3d011682016040523d82523d6000602084013e6118a8565b606091505b50509050806118b657600080fd5b50565b6118d4838383604051806020016040528060008152506122b8565b505050565b60006118e36110e1565b8210611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b90614f0b565b60405180910390fd5b600882815481106119385761193761537c565b5b90600052602060002001549050919050565b600b818154811061195a57600080fd5b906000526020600020016000915090508054611975906151b5565b80601f01602080910402602001604051908101604052809291908181526020018280546119a1906151b5565b80156119ee5780601f106119c3576101008083540402835291602001916119ee565b820191906000526020600020905b8154815290600101906020018083116119d157829003601f168201915b505050505081565b600c8181548110611a0657600080fd5b906000526020600020016000915090508054611a21906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4d906151b5565b8015611a9a5780601f10611a6f57610100808354040283529160200191611a9a565b820191906000526020600020905b815481529060010190602001808311611a7d57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4290614e0b565b60405180910390fd5b80915050919050565b600f8181548110611b6457600080fd5b906000526020600020016000915090508054611b7f906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054611bab906151b5565b8015611bf85780601f10611bcd57610100808354040283529160200191611bf8565b820191906000526020600020905b815481529060010190602001808311611bdb57829003601f168201915b505050505081565b60118181548110611c1057600080fd5b906000526020600020016000915090508054611c2b906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054611c57906151b5565b8015611ca45780601f10611c7957610100808354040283529160200191611ca4565b820191906000526020600020905b815481529060010190602001808311611c8757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1490614deb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d6c612bdb565b73ffffffffffffffffffffffffffffffffffffffff16611d8a611dec565b73ffffffffffffffffffffffffffffffffffffffff1614611de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd790614e6b565b60405180910390fd5b611dea60006132da565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611e25906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054611e51906151b5565b8015611e9e5780601f10611e7357610100808354040283529160200191611e9e565b820191906000526020600020905b815481529060010190602001808311611e8157829003601f168201915b5050505050905090565b6012602052806000526040600020600091509050806000018054611ecb906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef7906151b5565b8015611f445780601f10611f1957610100808354040283529160200191611f44565b820191906000526020600020905b815481529060010190602001808311611f2757829003601f168201915b505050505090806001018054611f59906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054611f85906151b5565b8015611fd25780601f10611fa757610100808354040283529160200191611fd2565b820191906000526020600020905b815481529060010190602001808311611fb557829003601f168201915b505050505090806002018054611fe7906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054612013906151b5565b80156120605780601f1061203557610100808354040283529160200191612060565b820191906000526020600020905b81548152906001019060200180831161204357829003601f168201915b505050505090806003018054612075906151b5565b80601f01602080910402602001604051908101604052809291908181526020018280546120a1906151b5565b80156120ee5780601f106120c3576101008083540402835291602001916120ee565b820191906000526020600020905b8154815290600101906020018083116120d157829003601f168201915b505050505090806004018054612103906151b5565b80601f016020809104026020016040519081016040528092919081815260200182805461212f906151b5565b801561217c5780601f106121515761010080835404028352916020019161217c565b820191906000526020600020905b81548152906001019060200180831161215f57829003601f168201915b505050505090806005018054612191906151b5565b80601f01602080910402602001604051908101604052809291908181526020018280546121bd906151b5565b801561220a5780601f106121df5761010080835404028352916020019161220a565b820191906000526020600020905b8154815290600101906020018083116121ed57829003601f168201915b50505050509080600601805461221f906151b5565b80601f016020809104026020016040519081016040528092919081815260200182805461224b906151b5565b80156122985780601f1061226d57610100808354040283529160200191612298565b820191906000526020600020905b81548152906001019060200180831161227b57829003601f168201915b5050505050905087565b6122b46122ad612bdb565b83836133a0565b5050565b6122c96122c3612bdb565b83612cba565b612308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ff90614eeb565b60405180910390fd5b6123148484848461350d565b50505050565b600083423385856040516020016123349493929190614b59565b6040516020818303038152906040528051906020012060001c612357919061528f565b90509392505050565b606061236b82612b6f565b6123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a190614eab565b60405180910390fd5b6000601260008481526020019081526020016000206040518060e00160405290816000820180546123da906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054612406906151b5565b80156124535780601f1061242857610100808354040283529160200191612453565b820191906000526020600020905b81548152906001019060200180831161243657829003601f168201915b5050505050815260200160018201805461246c906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054612498906151b5565b80156124e55780601f106124ba576101008083540402835291602001916124e5565b820191906000526020600020905b8154815290600101906020018083116124c857829003601f168201915b505050505081526020016002820180546124fe906151b5565b80601f016020809104026020016040519081016040528092919081815260200182805461252a906151b5565b80156125775780601f1061254c57610100808354040283529160200191612577565b820191906000526020600020905b81548152906001019060200180831161255a57829003601f168201915b50505050508152602001600382018054612590906151b5565b80601f01602080910402602001604051908101604052809291908181526020018280546125bc906151b5565b80156126095780601f106125de57610100808354040283529160200191612609565b820191906000526020600020905b8154815290600101906020018083116125ec57829003601f168201915b50505050508152602001600482018054612622906151b5565b80601f016020809104026020016040519081016040528092919081815260200182805461264e906151b5565b801561269b5780601f106126705761010080835404028352916020019161269b565b820191906000526020600020905b81548152906001019060200180831161267e57829003601f168201915b505050505081526020016005820180546126b4906151b5565b80601f01602080910402602001604051908101604052809291908181526020018280546126e0906151b5565b801561272d5780601f106127025761010080835404028352916020019161272d565b820191906000526020600020905b81548152906001019060200180831161271057829003601f168201915b50505050508152602001600682018054612746906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054612772906151b5565b80156127bf5780601f10612794576101008083540402835291602001916127bf565b820191906000526020600020905b8154815290600101906020018083116127a257829003601f168201915b505050505081525050905061282e81600001516127db85612ff4565b8360600151846020015185608001516127f3896112a6565b8760c001518860200151896080015160405160200161281a999897969594939291906149dd565b604051602081830303815290604052613155565b60405160200161283e9190614b22565b604051602081830303815290604052915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6128f1612bdb565b73ffffffffffffffffffffffffffffffffffffffff1661290f611dec565b73ffffffffffffffffffffffffffffffffffffffff1614612965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295c90614e6b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cc90614d2b565b60405180910390fd5b6129de816132da565b50565b601081815481106129f157600080fd5b906000526020600020016000915090508054612a0c906151b5565b80601f0160208091040260200160405190810160405280929190818152602001828054612a38906151b5565b8015612a855780601f10612a5a57610100808354040283529160200191612a85565b820191906000526020600020905b815481529060010190602001808311612a6857829003601f168201915b505050505081565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612b5857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612b685750612b6782613569565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612c5683611aa2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612cb68282604051806020016040528060008152506135d3565b5050565b6000612cc582612b6f565b612d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfb90614dab565b60405180910390fd5b6000612d0f83611aa2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612d7e57508373ffffffffffffffffffffffffffffffffffffffff16612d6684610906565b73ffffffffffffffffffffffffffffffffffffffff16145b80612d8f5750612d8e8185612855565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612db882611aa2565b73ffffffffffffffffffffffffffffffffffffffff1614612e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0590614e8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7590614d6b565b60405180910390fd5b612e8983838361362e565b612e94600082612be3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ee491906150cb565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f3b9190614fea565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6060600082141561303c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613150565b600082905060005b6000821461306e57808061305790615218565b915050600a826130679190615040565b9150613044565b60008167ffffffffffffffff81111561308a576130896153ab565b5b6040519080825280601f01601f1916602001820160405280156130bc5781602001600182028036833780820191505090505b5090505b60008514613149576001826130d591906150cb565b9150600a856130e4919061528f565b60306130f09190614fea565b60f81b8183815181106131065761310561537c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131429190615040565b94506130c0565b8093505050505b919050565b6060600082511415613178576040518060200160405280600081525090506132d5565b6000604051806060016040528060408152602001615f5460409139905060006003600285516131a79190614fea565b6131b19190615040565b60046131bd9190615071565b905060006020826131ce9190614fea565b67ffffffffffffffff8111156131e7576131e66153ab565b5b6040519080825280601f01601f1916602001820160405280156132195781602001600182028036833780820191505090505b509050818152600183018586518101602084015b81831015613294576003830192508251603f8160121c1685015160f81b8252600182019150603f81600c1c1685015160f81b8252600182019150603f8160061c1685015160f81b8252600182019150603f811685015160f81b82526001820191505061322d565b6003895106600181146132ae57600281146132be576132c9565b613d3d60f01b60028303526132c9565b603d60f81b60018303525b50505050508093505050505b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561340f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340690614d8b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516135009190614c0e565b60405180910390a3505050565b613518848484612d98565b61352484848484613742565b613563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355a90614d0b565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6135dd83836138d9565b6135ea6000848484613742565b613629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362090614d0b565b60405180910390fd5b505050565b613639838383613aa7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561367c5761367781613aac565b6136bb565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146136ba576136b98382613af5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136fe576136f981613c62565b61373d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461373c5761373b8282613d33565b5b5b505050565b60006137638473ffffffffffffffffffffffffffffffffffffffff16613db2565b156138cc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261378c612bdb565b8786866040518563ffffffff1660e01b81526004016137ae9493929190614bc2565b602060405180830381600087803b1580156137c857600080fd5b505af19250505080156137f957506040513d601f19601f820116820180604052508101906137f69190614131565b60015b61387c573d8060008114613829576040519150601f19603f3d011682016040523d82523d6000602084013e61382e565b606091505b50600081511415613874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161386b90614d0b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506138d1565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394090614e2b565b60405180910390fd5b61395281612b6f565b15613992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161398990614d4b565b60405180910390fd5b61399e6000838361362e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139ee9190614fea565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613b0284611cac565b613b0c91906150cb565b9050600060076000848152602001908152602001600020549050818114613bf1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613c7691906150cb565b9050600060096000848152602001908152602001600020549050600060088381548110613ca657613ca561537c565b5b906000526020600020015490508060088381548110613cc857613cc761537c565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613d1757613d1661534d565b5b6001900381819060005260206000200160009055905550505050565b6000613d3e83611cac565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613dd1906151b5565b90600052602060002090601f016020900481019282613df35760008555613e3a565b82601f10613e0c57805160ff1916838001178555613e3a565b82800160010185558215613e3a579182015b82811115613e39578251825591602001919060010190613e1e565b5b509050613e479190613e4b565b5090565b5b80821115613e64576000816000905550600101613e4c565b5090565b6000613e7b613e7684614f6b565b614f46565b905082815260208101848484011115613e9757613e966153df565b5b613ea2848285615173565b509392505050565b600081359050613eb981615ef7565b92915050565b600081359050613ece81615f0e565b92915050565b600081359050613ee381615f25565b92915050565b600081519050613ef881615f25565b92915050565b600082601f830112613f1357613f126153da565b5b8135613f23848260208601613e68565b91505092915050565b600081359050613f3b81615f3c565b92915050565b600060208284031215613f5757613f566153e9565b5b6000613f6584828501613eaa565b91505092915050565b60008060408385031215613f8557613f846153e9565b5b6000613f9385828601613eaa565b9250506020613fa485828601613eaa565b9150509250929050565b600080600060608486031215613fc757613fc66153e9565b5b6000613fd586828701613eaa565b9350506020613fe686828701613eaa565b9250506040613ff786828701613f2c565b9150509250925092565b6000806000806080858703121561401b5761401a6153e9565b5b600061402987828801613eaa565b945050602061403a87828801613eaa565b935050604061404b87828801613f2c565b925050606085013567ffffffffffffffff81111561406c5761406b6153e4565b5b61407887828801613efe565b91505092959194509250565b6000806040838503121561409b5761409a6153e9565b5b60006140a985828601613eaa565b92505060206140ba85828601613ebf565b9150509250929050565b600080604083850312156140db576140da6153e9565b5b60006140e985828601613eaa565b92505060206140fa85828601613f2c565b9150509250929050565b60006020828403121561411a576141196153e9565b5b600061412884828501613ed4565b91505092915050565b600060208284031215614147576141466153e9565b5b600061415584828501613ee9565b91505092915050565b600060208284031215614174576141736153e9565b5b600061418284828501613f2c565b91505092915050565b6000806000606084860312156141a4576141a36153e9565b5b60006141b286828701613f2c565b93505060206141c386828701613f2c565b92505060406141d486828701613f2c565b9150509250925092565b6141e7816150ff565b82525050565b6141fe6141f9826150ff565b615261565b82525050565b61420d81615111565b82525050565b600061421e82614f9c565b6142288185614fb2565b9350614238818560208601615182565b614241816153ee565b840191505092915050565b600061425782614fa7565b6142618185614fce565b9350614271818560208601615182565b61427a816153ee565b840191505092915050565b600061429082614fa7565b61429a8185614fdf565b93506142aa818560208601615182565b80840191505092915050565b60006142c3602b83614fce565b91506142ce8261540c565b604082019050919050565b60006142e6603283614fce565b91506142f18261545b565b604082019050919050565b6000614309600283614fdf565b9150614314826154aa565b600282019050919050565b600061432c602683614fdf565b9150614337826154d3565b602682019050919050565b600061434f602683614fce565b915061435a82615522565b604082019050919050565b6000614372600283614fdf565b915061437d82615571565b600282019050919050565b6000614395602683614fdf565b91506143a08261559a565b602682019050919050565b60006143b8601c83614fce565b91506143c3826155e9565b602082019050919050565b60006143db600383614fdf565b91506143e682615612565b600382019050919050565b60006143fe602483614fce565b91506144098261563b565b604082019050919050565b6000614421601983614fce565b915061442c8261568a565b602082019050919050565b6000614444602c83614fce565b915061444f826156b3565b604082019050919050565b6000614467603883614fce565b915061447282615702565b604082019050919050565b600061448a602a83614fce565b915061449582615751565b604082019050919050565b60006144ad602983614fce565b91506144b8826157a0565b604082019050919050565b60006144d0604183614fdf565b91506144db826157ef565b604182019050919050565b60006144f3603a83614fdf565b91506144fe82615864565b603a82019050919050565b6000614516602783614fdf565b9150614521826158b3565b602782019050919050565b6000614539602483614fdf565b915061454482615902565b602482019050919050565b600061455c600283614fdf565b915061456782615951565b600282019050919050565b600061457f600783614fdf565b915061458a8261597a565b600782019050919050565b60006145a2602083614fce565b91506145ad826159a3565b602082019050919050565b60006145c5602c83614fce565b91506145d0826159cc565b604082019050919050565b60006145e8602083614fce565b91506145f382615a1b565b602082019050919050565b600061460b602983614fce565b915061461682615a44565b604082019050919050565b600061462e602f83614fce565b915061463982615a93565b604082019050919050565b6000614651600183614fdf565b915061465c82615ae2565b600182019050919050565b6000614674600f83614fdf565b915061467f82615b0b565b600f82019050919050565b6000614697600283614fdf565b91506146a282615b34565b600282019050919050565b60006146ba603b83614fdf565b91506146c582615b5d565b603b82019050919050565b60006146dd600383614fdf565b91506146e882615bac565b600382019050919050565b6000614700602183614fce565b915061470b82615bd5565b604082019050919050565b6000614723601d83614fdf565b915061472e82615c24565b601d82019050919050565b6000614746600083614fc3565b915061475182615c4d565b600082019050919050565b6000614769603183614fce565b915061477482615c50565b604082019050919050565b600061478c602583614fdf565b915061479782615c9f565b602582019050919050565b60006147af602c83614fce565b91506147ba82615cee565b604082019050919050565b60006147d2600383614fdf565b91506147dd82615d3d565b600382019050919050565b60006147f5601483614fdf565b915061480082615d66565b601482019050919050565b6000614818600483614fdf565b915061482382615d8f565b600482019050919050565b600061483b601283614fdf565b915061484682615db8565b601282019050919050565b600061485e602783614fdf565b915061486982615de1565b602782019050919050565b6000614881602583614fdf565b915061488c82615e30565b602582019050919050565b60006148a4602483614fdf565b91506148af82615e7f565b602482019050919050565b60006148c7600683614fdf565b91506148d282615ece565b600682019050919050565b6148e681615169565b82525050565b6148fd6148f882615169565b615285565b82525050565b600061490e826144c3565b915061491982614509565b91506149258288614285565b9150614930826146d0565b915061493b8261477f565b91506149478287614285565b915061495282614572565b915061495d8261431f565b91506149698286614285565b915061497482614572565b915061497f82614388565b915061498b8285614285565b915061499682614572565b91506149a1826144e6565b91506149ad8284614285565b91506149b882614572565b91506149c3826146ad565b91506149ce826148ba565b91508190509695505050505050565b60006149e882614644565b91506149f38261482e565b91506149ff828c614285565b9150614a0a826142fc565b9150614a16828b614285565b9150614a218261480b565b9150614a2d828a614285565b9150614a3882614365565b9150614a43826147e8565b9150614a4f8289614285565b9150614a5a8261480b565b9150614a668288614285565b9150614a71826147c5565b9150614a7c8261452c565b9150614a888287614285565b9150614a9382614365565b9150614a9e82614667565b9150614aa982614851565b9150614ab58286614285565b9150614ac0826143ce565b9150614acb82614874565b9150614ad78285614285565b9150614ae2826143ce565b9150614aed82614897565b9150614af98284614285565b9150614b048261454f565b9150614b0f8261468a565b91508190509a9950505050505050505050565b6000614b2d82614716565b9150614b398284614285565b915081905092915050565b6000614b4f82614739565b9150819050919050565b6000614b6582876148ec565b602082019150614b7582866141ed565b601482019150614b8582856148ec565b602082019150614b9582846148ec565b60208201915081905095945050505050565b6000602082019050614bbc60008301846141de565b92915050565b6000608082019050614bd760008301876141de565b614be460208301866141de565b614bf160408301856148dd565b8181036060830152614c038184614213565b905095945050505050565b6000602082019050614c236000830184614204565b92915050565b60006020820190508181036000830152614c43818461424c565b905092915050565b600060e0820190508181036000830152614c65818a61424c565b90508181036020830152614c79818961424c565b90508181036040830152614c8d818861424c565b90508181036060830152614ca1818761424c565b90508181036080830152614cb5818661424c565b905081810360a0830152614cc9818561424c565b905081810360c0830152614cdd818461424c565b905098975050505050505050565b60006020820190508181036000830152614d04816142b6565b9050919050565b60006020820190508181036000830152614d24816142d9565b9050919050565b60006020820190508181036000830152614d4481614342565b9050919050565b60006020820190508181036000830152614d64816143ab565b9050919050565b60006020820190508181036000830152614d84816143f1565b9050919050565b60006020820190508181036000830152614da481614414565b9050919050565b60006020820190508181036000830152614dc481614437565b9050919050565b60006020820190508181036000830152614de48161445a565b9050919050565b60006020820190508181036000830152614e048161447d565b9050919050565b60006020820190508181036000830152614e24816144a0565b9050919050565b60006020820190508181036000830152614e4481614595565b9050919050565b60006020820190508181036000830152614e64816145b8565b9050919050565b60006020820190508181036000830152614e84816145db565b9050919050565b60006020820190508181036000830152614ea4816145fe565b9050919050565b60006020820190508181036000830152614ec481614621565b9050919050565b60006020820190508181036000830152614ee4816146f3565b9050919050565b60006020820190508181036000830152614f048161475c565b9050919050565b60006020820190508181036000830152614f24816147a2565b9050919050565b6000602082019050614f4060008301846148dd565b92915050565b6000614f50614f61565b9050614f5c82826151e7565b919050565b6000604051905090565b600067ffffffffffffffff821115614f8657614f856153ab565b5b614f8f826153ee565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614ff582615169565b915061500083615169565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615035576150346152c0565b5b828201905092915050565b600061504b82615169565b915061505683615169565b925082615066576150656152ef565b5b828204905092915050565b600061507c82615169565b915061508783615169565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150c0576150bf6152c0565b5b828202905092915050565b60006150d682615169565b91506150e183615169565b9250828210156150f4576150f36152c0565b5b828203905092915050565b600061510a82615149565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156151a0578082015181840152602081019050615185565b838111156151af576000848401525b50505050565b600060028204905060018216806151cd57607f821691505b602082108114156151e1576151e061531e565b5b50919050565b6151f0826153ee565b810181811067ffffffffffffffff8211171561520f5761520e6153ab565b5b80604052505050565b600061522382615169565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615256576152556152c0565b5b600182019050919050565b600061526c82615273565b9050919050565b600061527e826153ff565b9050919050565b6000819050919050565b600061529a82615169565b91506152a583615169565b9250826152b5576152b46152ef565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f2023000000000000000000000000000000000000000000000000000000000000600082015250565b7f3c7465787420666f6e742d73697a653d223235302220793d223236302220783d60008201527f22313630223e0000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b7f3c7465787420666f6e742d73697a653d223130302220793d223231302220783d60008201527f22323630223e0000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f227d2c0000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f3c7376672077696474683d2235303022206865696768743d223530302220786d60008201527f6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7376672260208201527f3e00000000000000000000000000000000000000000000000000000000000000604082015250565b7f3c7465787420666f6e742d73697a653d2233302220793d2233352220783d223160008201527f30223e456d6f6a696f6e616c2044696e6f7361757273202d2023000000000000602082015250565b7f3c726563742077696474683d223130302522206865696768743d22313030252260008201527f2066696c6c3d2200000000000000000000000000000000000000000000000000602082015250565b7f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360008201527f6536342c00000000000000000000000000000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f3c2f746578743e00000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f7b00000000000000000000000000000000000000000000000000000000000000600082015250565b7f2261747472696275746573223a205b0000000000000000000000000000000000600082015250565b7f5d7d000000000000000000000000000000000000000000000000000000000000600082015250565b7f3c7465787420666f6e742d73697a653d2232302220793d223439302220783d2260008201527f333635223e63727970746f73617572732e6f6e653c2f746578743e0000000000602082015250565b7f222f3e0000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f3c7465787420666f6e742d73697a653d223230302220793d223434302220783d60008201527f223335223e000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f222c200000000000000000000000000000000000000000000000000000000000600082015250565b7f226465736372697074696f6e223a20224f757220000000000000000000000000600082015250565b7f2069732000000000000000000000000000000000000000000000000000000000600082015250565b7f226e616d65223a202244696e6f73617572200000000000000000000000000000600082015250565b7f7b2274726169745f74797065223a20224261636b67726f756e64222c2022766160008201527f6c7565223a202200000000000000000000000000000000000000000000000000602082015250565b7f7b2274726169745f74797065223a202244696e6f73617572222c202276616c7560008201527f65223a2022000000000000000000000000000000000000000000000000000000602082015250565b7f7b2274726169745f74797065223a2022456d6f74696f6e222c202276616c756560008201527f223a202200000000000000000000000000000000000000000000000000000000602082015250565b7f3c2f7376673e0000000000000000000000000000000000000000000000000000600082015250565b615f00816150ff565b8114615f0b57600080fd5b50565b615f1781615111565b8114615f2257600080fd5b50565b615f2e8161511d565b8114615f3957600080fd5b50565b615f4581615169565b8114615f5057600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220ed4c14961e45307162eac33201abb544e63c1b2e11a3ddfadc6fecfcb77ee1cf64736f6c63430008070033
Deployed ByteCode Sourcemap
46922:4389:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40671:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28165:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29724:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29247:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48217:863;;;:::i;:::-;;41311:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30474:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47135:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47199:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49283:804;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40979:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51163:145;;;:::i;:::-;;30884:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41501:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47012:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47075:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27859:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47456:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47802:70;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27589:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7135:103;;;;;;;;;;;;;:::i;:::-;;6484:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28334:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48096:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;30017:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31140:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49086:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50093:1048;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30243:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7393:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47715:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40671:224;40773:4;40812:35;40797:50;;;:11;:50;;;;:90;;;;40851:36;40875:11;40851:23;:36::i;:::-;40797:90;40790:97;;40671:224;;;:::o;28165:100::-;28219:13;28252:5;28245:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28165:100;:::o;29724:221::-;29800:7;29828:16;29836:7;29828;:16::i;:::-;29820:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29913:15;:24;29929:7;29913:24;;;;;;;;;;;;;;;;;;;;;29906:31;;29724:221;;;:::o;29247:411::-;29328:13;29344:23;29359:7;29344:14;:23::i;:::-;29328:39;;29392:5;29386:11;;:2;:11;;;;29378:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29486:5;29470:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29495:37;29512:5;29519:12;:10;:12::i;:::-;29495:16;:37::i;:::-;29470:62;29448:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29629:21;29638:2;29642:7;29629:8;:21::i;:::-;29317:341;29247:411;;:::o;48217:863::-;48255:14;48272:13;:11;:13::i;:::-;48255:30;;48314:4;48309:1;48300:6;:10;;;;:::i;:::-;:18;;48292:27;;;;;;48354:14;48371:52;48380:9;:16;;;;48398;48416:6;48371:8;:52::i;:::-;48354:69;;48430:13;48446:50;48455:8;:15;;;;48472;48489:6;48446:8;:50::i;:::-;48430:66;;48503:12;48518:51;48527:8;:15;;;;48544:16;48562:6;48518:8;:51::i;:::-;48503:66;;48602:19;48624:229;;;;;;;;48637:9;48647:6;48637:17;;;;;;;;:::i;:::-;;;;;;;;;48624:229;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48663:10;48674:6;48663:18;;;;;;;;:::i;:::-;;;;;;;;;48624:229;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48690:7;48698:51;48707:9;:16;;;;48725:15;48742:6;48698:8;:51::i;:::-;48690:60;;;;;;;;:::i;:::-;;;;;;;;;48624:229;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48759:8;48768:5;48759:15;;;;;;;;:::i;:::-;;;;;;;;;48624:229;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48783:9;48793:5;48783:16;;;;;;;;:::i;:::-;;;;;;;;;48624:229;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48808:8;48817:4;48808:14;;;;;;;;:::i;:::-;;;;;;;;;48624:229;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48831:9;48841:4;48831:15;;;;;;;;:::i;:::-;;;;;;;;;48624:229;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48602:251;;49025:7;49005:5;:17;49020:1;49011:6;:10;;;;:::i;:::-;49005:17;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;49041:33;49051:10;49072:1;49063:6;:10;;;;:::i;:::-;49041:9;:33::i;:::-;48248:832;;;;;48217:863::o;41311:113::-;41372:7;41399:10;:17;;;;41392:24;;41311:113;:::o;30474:339::-;30669:41;30688:12;:10;:12::i;:::-;30702:7;30669:18;:41::i;:::-;30661:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30777:28;30787:4;30793:2;30797:7;30777:9;:28::i;:::-;30474:339;;;:::o;47135:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47199:252::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49283:804::-;49340:13;49362:23;49388:5;:14;49394:7;49388:14;;;;;;;;;;;49362:40;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49443:638;49604:11;:19;;;49683:11;:20;;;49768:11;:18;;;49851:11;:19;;;49954:18;:7;:16;:18::i;:::-;49457:623;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49443:13;:638::i;:::-;49436:645;;;49283:804;;;:::o;40979:256::-;41076:7;41112:23;41129:5;41112:16;:23::i;:::-;41104:5;:31;41096:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;41201:12;:19;41214:5;41201:19;;;;;;;;;;;;;;;:26;41221:5;41201:26;;;;;;;;;;;;41194:33;;40979:256;;;;:::o;51163:145::-;6715:12;:10;:12::i;:::-;6704:23;;:7;:5;:7::i;:::-;:23;;;6696:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51216:7:::1;51237;:5;:7::i;:::-;51229:21;;51258;51229:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51215:69;;;51299:2;51291:11;;;::::0;::::1;;51208:100;51163:145::o:0;30884:185::-;31022:39;31039:4;31045:2;31049:7;31022:39;;;;;;;;;;;;:16;:39::i;:::-;30884:185;;;:::o;41501:233::-;41576:7;41612:30;:28;:30::i;:::-;41604:5;:38;41596:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41709:10;41720:5;41709:17;;;;;;;;:::i;:::-;;;;;;;;;;41702:24;;41501:233;;;:::o;47012:58::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47075:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27859:239::-;27931:7;27951:13;27967:7;:16;27975:7;27967:16;;;;;;;;;;;;;;;;;;;;;27951:32;;28019:1;28002:19;;:5;:19;;;;27994:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28085:5;28078:12;;;27859:239;;;:::o;47456:254::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47802:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27589:208::-;27661:7;27706:1;27689:19;;:5;:19;;;;27681:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27773:9;:16;27783:5;27773:16;;;;;;;;;;;;;;;;27766:23;;27589:208;;;:::o;7135:103::-;6715:12;:10;:12::i;:::-;6704:23;;:7;:5;:7::i;:::-;:23;;;6696:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7200:30:::1;7227:1;7200:18;:30::i;:::-;7135:103::o:0;6484:87::-;6530:7;6557:6;;;;;;;;;;;6550:13;;6484:87;:::o;28334:104::-;28390:13;28423:7;28416:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28334:104;:::o;48096:38::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30017:155::-;30112:52;30131:12;:10;:12::i;:::-;30145:8;30155;30112:18;:52::i;:::-;30017:155;;:::o;31140:328::-;31315:41;31334:12;:10;:12::i;:::-;31348:7;31315:18;:41::i;:::-;31307:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31421:39;31435:4;31441:2;31445:7;31454:5;31421:13;:39::i;:::-;31140:328;;;;:::o;49086:191::-;49165:7;49268:3;49223:15;49240:10;49252:4;49258;49206:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49196:68;;;;;;49188:77;;:83;;;;:::i;:::-;49181:90;;49086:191;;;;;:::o;50093:1048::-;50166:13;50207:16;50215:7;50207;:16::i;:::-;50191:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;50297:23;50323:5;:14;50329:7;50323:14;;;;;;;;;;;50297:40;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50450:677;50531:11;:20;;;50559:18;:7;:16;:18::i;:::-;50587:11;:19;;;50651:11;:21;;;50682:11;:20;;;50764:19;50775:7;50764:10;:19::i;:::-;50884:11;:20;;;50972:11;:21;;;51060:11;:20;;;50464:662;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50450:13;:677::i;:::-;50392:742;;;;;;;;:::i;:::-;;;;;;;;;;;;;50378:757;;;50093:1048;;;:::o;30243:164::-;30340:4;30364:18;:25;30383:5;30364:25;;;;;;;;;;;;;;;:35;30390:8;30364:35;;;;;;;;;;;;;;;;;;;;;;;;;30357:42;;30243:164;;;;:::o;7393:201::-;6715:12;:10;:12::i;:::-;6704:23;;:7;:5;:7::i;:::-;:23;;;6696:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7502:1:::1;7482:22;;:8;:22;;;;7474:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7558:28;7577:8;7558:18;:28::i;:::-;7393:201:::0;:::o;47715:82::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27220:305::-;27322:4;27374:25;27359:40;;;:11;:40;;;;:105;;;;27431:33;27416:48;;;:11;:48;;;;27359:105;:158;;;;27481:36;27505:11;27481:23;:36::i;:::-;27359:158;27339:178;;27220:305;;;:::o;32978:127::-;33043:4;33095:1;33067:30;;:7;:16;33075:7;33067:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33060:37;;32978:127;;;:::o;5208:98::-;5261:7;5288:10;5281:17;;5208:98;:::o;36960:174::-;37062:2;37035:15;:24;37051:7;37035:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37118:7;37114:2;37080:46;;37089:23;37104:7;37089:14;:23::i;:::-;37080:46;;;;;;;;;;;;36960:174;;:::o;33962:110::-;34038:26;34048:2;34052:7;34038:26;;;;;;;;;;;;:9;:26::i;:::-;33962:110;;:::o;33272:348::-;33365:4;33390:16;33398:7;33390;:16::i;:::-;33382:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33466:13;33482:23;33497:7;33482:14;:23::i;:::-;33466:39;;33535:5;33524:16;;:7;:16;;;:51;;;;33568:7;33544:31;;:20;33556:7;33544:11;:20::i;:::-;:31;;;33524:51;:87;;;;33579:32;33596:5;33603:7;33579:16;:32::i;:::-;33524:87;33516:96;;;33272:348;;;;:::o;36264:578::-;36423:4;36396:31;;:23;36411:7;36396:14;:23::i;:::-;:31;;;36388:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36506:1;36492:16;;:2;:16;;;;36484:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36562:39;36583:4;36589:2;36593:7;36562:20;:39::i;:::-;36666:29;36683:1;36687:7;36666:8;:29::i;:::-;36727:1;36708:9;:15;36718:4;36708:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36756:1;36739:9;:13;36749:2;36739:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36787:2;36768:7;:16;36776:7;36768:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36826:7;36822:2;36807:27;;36816:4;36807:27;;;;;;;;;;;;36264:578;;;:::o;2770:723::-;2826:13;3056:1;3047:5;:10;3043:53;;;3074:10;;;;;;;;;;;;;;;;;;;;;3043:53;3106:12;3121:5;3106:20;;3137:14;3162:78;3177:1;3169:4;:9;3162:78;;3195:8;;;;;:::i;:::-;;;;3226:2;3218:10;;;;;:::i;:::-;;;3162:78;;;3250:19;3282:6;3272:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3250:39;;3300:154;3316:1;3307:5;:10;3300:154;;3344:1;3334:11;;;;;:::i;:::-;;;3411:2;3403:5;:10;;;;:::i;:::-;3390:2;:24;;;;:::i;:::-;3377:39;;3360:6;3367;3360:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3440:2;3431:11;;;;;:::i;:::-;;;3300:154;;;3478:6;3464:21;;;;;2770:723;;;;:::o;363:2037::-;421:13;466:1;451:4;:11;:16;447:31;;;469:9;;;;;;;;;;;;;;;;447:31;538:19;560:5;;;;;;;;;;;;;;;;;538:27;;617:18;663:1;658;644:4;:11;:15;;;;:::i;:::-;643:21;;;;:::i;:::-;638:1;:27;;;;:::i;:::-;617:48;;748:20;795:2;782:10;:15;;;;:::i;:::-;771:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;748:50;;895:10;887:6;880:26;1002:1;995:5;991:13;1073:4;1124;1118:11;1109:7;1105:25;1232:2;1224:6;1220:15;1317:810;1336:6;1327:7;1324:19;1317:810;;;1402:1;1393:7;1389:15;1378:26;;1489:7;1483:14;1636:4;1628:5;1624:2;1620:14;1616:25;1606:8;1602:40;1596:47;1591:3;1587:57;1576:9;1569:76;1690:1;1679:9;1675:17;1662:30;;1776:4;1768:5;1764:2;1760:14;1756:25;1746:8;1742:40;1736:47;1731:3;1727:57;1716:9;1709:76;1830:1;1819:9;1815:17;1802:30;;1916:4;1908:5;1905:1;1900:14;1896:25;1886:8;1882:40;1876:47;1871:3;1867:57;1856:9;1849:76;1970:1;1959:9;1955:17;1942:30;;2056:4;2048:5;2036:25;2026:8;2022:40;2016:47;2011:3;2007:57;1996:9;1989:76;2110:1;2099:9;2095:17;2082:30;;1360:767;1317:810;;;2212:1;2205:4;2199:11;2195:19;2233:1;2228:54;;;;2301:1;2296:52;;;;2188:160;;2228:54;2272:6;2267:3;2263:16;2259:1;2248:9;2244:17;2237:43;2228:54;;2296:52;2340:4;2335:3;2331:14;2327:1;2316:9;2312:17;2305:41;2188:160;;820:1539;;;;2386:6;2379:13;;;;;363:2037;;;;:::o;7754:191::-;7828:16;7847:6;;;;;;;;;;;7828:25;;7873:8;7864:6;;:17;;;;;;;;;;;;;;;;;;7928:8;7897:40;;7918:8;7897:40;;;;;;;;;;;;7817:128;7754:191;:::o;37276:315::-;37431:8;37422:17;;:5;:17;;;;37414:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37518:8;37480:18;:25;37499:5;37480:25;;;;;;;;;;;;;;;:35;37506:8;37480:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37564:8;37542:41;;37557:5;37542:41;;;37574:8;37542:41;;;;;;:::i;:::-;;;;;;;;37276:315;;;:::o;32350:::-;32507:28;32517:4;32523:2;32527:7;32507:9;:28::i;:::-;32554:48;32577:4;32583:2;32587:7;32596:5;32554:22;:48::i;:::-;32546:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32350:315;;;;:::o;18916:157::-;19001:4;19040:25;19025:40;;;:11;:40;;;;19018:47;;18916:157;;;:::o;34299:321::-;34429:18;34435:2;34439:7;34429:5;:18::i;:::-;34480:54;34511:1;34515:2;34519:7;34528:5;34480:22;:54::i;:::-;34458:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34299:321;;;:::o;42347:589::-;42491:45;42518:4;42524:2;42528:7;42491:26;:45::i;:::-;42569:1;42553:18;;:4;:18;;;42549:187;;;42588:40;42620:7;42588:31;:40::i;:::-;42549:187;;;42658:2;42650:10;;:4;:10;;;42646:90;;42677:47;42710:4;42716:7;42677:32;:47::i;:::-;42646:90;42549:187;42764:1;42750:16;;:2;:16;;;42746:183;;;42783:45;42820:7;42783:36;:45::i;:::-;42746:183;;;42856:4;42850:10;;:2;:10;;;42846:83;;42877:40;42905:2;42909:7;42877:27;:40::i;:::-;42846:83;42746:183;42347:589;;;:::o;38156:799::-;38311:4;38332:15;:2;:13;;;:15::i;:::-;38328:620;;;38384:2;38368:36;;;38405:12;:10;:12::i;:::-;38419:4;38425:7;38434:5;38368:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38364:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38627:1;38610:6;:13;:18;38606:272;;;38653:60;;;;;;;;;;:::i;:::-;;;;;;;;38606:272;38828:6;38822:13;38813:6;38809:2;38805:15;38798:38;38364:529;38501:41;;;38491:51;;;:6;:51;;;;38484:58;;;;;38328:620;38932:4;38925:11;;38156:799;;;;;;;:::o;34956:382::-;35050:1;35036:16;;:2;:16;;;;35028:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35109:16;35117:7;35109;:16::i;:::-;35108:17;35100:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35171:45;35200:1;35204:2;35208:7;35171:20;:45::i;:::-;35246:1;35229:9;:13;35239:2;35229:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35277:2;35258:7;:16;35266:7;35258:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35322:7;35318:2;35297:33;;35314:1;35297:33;;;;;;;;;;;;34956:382;;:::o;39527:126::-;;;;:::o;43659:164::-;43763:10;:17;;;;43736:15;:24;43752:7;43736:24;;;;;;;;;;;:44;;;;43791:10;43807:7;43791:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43659:164;:::o;44450:988::-;44716:22;44766:1;44741:22;44758:4;44741:16;:22::i;:::-;:26;;;;:::i;:::-;44716:51;;44778:18;44799:17;:26;44817:7;44799:26;;;;;;;;;;;;44778:47;;44946:14;44932:10;:28;44928:328;;44977:19;44999:12;:18;45012:4;44999:18;;;;;;;;;;;;;;;:34;45018:14;44999:34;;;;;;;;;;;;44977:56;;45083:11;45050:12;:18;45063:4;45050:18;;;;;;;;;;;;;;;:30;45069:10;45050:30;;;;;;;;;;;:44;;;;45200:10;45167:17;:30;45185:11;45167:30;;;;;;;;;;;:43;;;;44962:294;44928:328;45352:17;:26;45370:7;45352:26;;;;;;;;;;;45345:33;;;45396:12;:18;45409:4;45396:18;;;;;;;;;;;;;;;:34;45415:14;45396:34;;;;;;;;;;;45389:41;;;44531:907;;44450:988;;:::o;45733:1079::-;45986:22;46031:1;46011:10;:17;;;;:21;;;;:::i;:::-;45986:46;;46043:18;46064:15;:24;46080:7;46064:24;;;;;;;;;;;;46043:45;;46415:19;46437:10;46448:14;46437:26;;;;;;;;:::i;:::-;;;;;;;;;;46415:48;;46501:11;46476:10;46487;46476:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;46612:10;46581:15;:28;46597:11;46581:28;;;;;;;;;;;:41;;;;46753:15;:24;46769:7;46753:24;;;;;;;;;;;46746:31;;;46788:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45804:1008;;;45733:1079;:::o;43237:221::-;43322:14;43339:20;43356:2;43339:16;:20::i;:::-;43322:37;;43397:7;43370:12;:16;43383:2;43370:16;;;;;;;;;;;;;;;:24;43387:6;43370:24;;;;;;;;;;;:34;;;;43444:6;43415:17;:26;43433:7;43415:26;;;;;;;;;;;:35;;;;43311:147;43237:221;;:::o;8772:387::-;8832:4;9040:12;9107:7;9095:20;9087:28;;9150:1;9143:4;:8;9136:15;;;8772:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1354:139;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:119;;;1613:79;;:::i;:::-;1575:119;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1499:329;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:119;;;1965:79;;:::i;:::-;1927:119;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1834:474;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:119;;;2462:79;;:::i;:::-;2424:119;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2314:619;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:120;;;3114:79;;:::i;:::-;3075:120;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:117;;;3698:79;;:::i;:::-;3662:117;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;2939:943;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:119;;;4016:79;;:::i;:::-;3978:119;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3888:468;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:119;;;4493:79;;:::i;:::-;4455:119;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4362:474;;;;;:::o;4842:327::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:119;;;4955:79;;:::i;:::-;4917:119;5075:1;5100:52;5144:7;5135:6;5124:9;5120:22;5100:52;:::i;:::-;5090:62;;5046:116;4842:327;;;;:::o;5175:349::-;5244:6;5293:2;5281:9;5272:7;5268:23;5264:32;5261:119;;;5299:79;;:::i;:::-;5261:119;5419:1;5444:63;5499:7;5490:6;5479:9;5475:22;5444:63;:::i;:::-;5434:73;;5390:127;5175:349;;;;:::o;5530:329::-;5589:6;5638:2;5626:9;5617:7;5613:23;5609:32;5606:119;;;5644:79;;:::i;:::-;5606:119;5764:1;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5735:117;5530:329;;;;:::o;5865:619::-;5942:6;5950;5958;6007:2;5995:9;5986:7;5982:23;5978:32;5975:119;;;6013:79;;:::i;:::-;5975:119;6133:1;6158:53;6203:7;6194:6;6183:9;6179:22;6158:53;:::i;:::-;6148:63;;6104:117;6260:2;6286:53;6331:7;6322:6;6311:9;6307:22;6286:53;:::i;:::-;6276:63;;6231:118;6388:2;6414:53;6459:7;6450:6;6439:9;6435:22;6414:53;:::i;:::-;6404:63;;6359:118;5865:619;;;;;:::o;6490:118::-;6577:24;6595:5;6577:24;:::i;:::-;6572:3;6565:37;6490:118;;:::o;6614:157::-;6719:45;6739:24;6757:5;6739:24;:::i;:::-;6719:45;:::i;:::-;6714:3;6707:58;6614:157;;:::o;6777:109::-;6858:21;6873:5;6858:21;:::i;:::-;6853:3;6846:34;6777:109;;:::o;6892:360::-;6978:3;7006:38;7038:5;7006:38;:::i;:::-;7060:70;7123:6;7118:3;7060:70;:::i;:::-;7053:77;;7139:52;7184:6;7179:3;7172:4;7165:5;7161:16;7139:52;:::i;:::-;7216:29;7238:6;7216:29;:::i;:::-;7211:3;7207:39;7200:46;;6982:270;6892:360;;;;:::o;7258:364::-;7346:3;7374:39;7407:5;7374:39;:::i;:::-;7429:71;7493:6;7488:3;7429:71;:::i;:::-;7422:78;;7509:52;7554:6;7549:3;7542:4;7535:5;7531:16;7509:52;:::i;:::-;7586:29;7608:6;7586:29;:::i;:::-;7581:3;7577:39;7570:46;;7350:272;7258:364;;;;:::o;7628:377::-;7734:3;7762:39;7795:5;7762:39;:::i;:::-;7817:89;7899:6;7894:3;7817:89;:::i;:::-;7810:96;;7915:52;7960:6;7955:3;7948:4;7941:5;7937:16;7915:52;:::i;:::-;7992:6;7987:3;7983:16;7976:23;;7738:267;7628:377;;;;:::o;8011:366::-;8153:3;8174:67;8238:2;8233:3;8174:67;:::i;:::-;8167:74;;8250:93;8339:3;8250:93;:::i;:::-;8368:2;8363:3;8359:12;8352:19;;8011:366;;;:::o;8383:::-;8525:3;8546:67;8610:2;8605:3;8546:67;:::i;:::-;8539:74;;8622:93;8711:3;8622:93;:::i;:::-;8740:2;8735:3;8731:12;8724:19;;8383:366;;;:::o;8755:400::-;8915:3;8936:84;9018:1;9013:3;8936:84;:::i;:::-;8929:91;;9029:93;9118:3;9029:93;:::i;:::-;9147:1;9142:3;9138:11;9131:18;;8755:400;;;:::o;9161:402::-;9321:3;9342:85;9424:2;9419:3;9342:85;:::i;:::-;9335:92;;9436:93;9525:3;9436:93;:::i;:::-;9554:2;9549:3;9545:12;9538:19;;9161:402;;;:::o;9569:366::-;9711:3;9732:67;9796:2;9791:3;9732:67;:::i;:::-;9725:74;;9808:93;9897:3;9808:93;:::i;:::-;9926:2;9921:3;9917:12;9910:19;;9569:366;;;:::o;9941:400::-;10101:3;10122:84;10204:1;10199:3;10122:84;:::i;:::-;10115:91;;10215:93;10304:3;10215:93;:::i;:::-;10333:1;10328:3;10324:11;10317:18;;9941:400;;;:::o;10347:402::-;10507:3;10528:85;10610:2;10605:3;10528:85;:::i;:::-;10521:92;;10622:93;10711:3;10622:93;:::i;:::-;10740:2;10735:3;10731:12;10724:19;;10347:402;;;:::o;10755:366::-;10897:3;10918:67;10982:2;10977:3;10918:67;:::i;:::-;10911:74;;10994:93;11083:3;10994:93;:::i;:::-;11112:2;11107:3;11103:12;11096:19;;10755:366;;;:::o;11127:400::-;11287:3;11308:84;11390:1;11385:3;11308:84;:::i;:::-;11301:91;;11401:93;11490:3;11401:93;:::i;:::-;11519:1;11514:3;11510:11;11503:18;;11127:400;;;:::o;11533:366::-;11675:3;11696:67;11760:2;11755:3;11696:67;:::i;:::-;11689:74;;11772:93;11861:3;11772:93;:::i;:::-;11890:2;11885:3;11881:12;11874:19;;11533:366;;;:::o;11905:::-;12047:3;12068:67;12132:2;12127:3;12068:67;:::i;:::-;12061:74;;12144:93;12233:3;12144:93;:::i;:::-;12262:2;12257:3;12253:12;12246:19;;11905:366;;;:::o;12277:::-;12419:3;12440:67;12504:2;12499:3;12440:67;:::i;:::-;12433:74;;12516:93;12605:3;12516:93;:::i;:::-;12634:2;12629:3;12625:12;12618:19;;12277:366;;;:::o;12649:::-;12791:3;12812:67;12876:2;12871:3;12812:67;:::i;:::-;12805:74;;12888:93;12977:3;12888:93;:::i;:::-;13006:2;13001:3;12997:12;12990:19;;12649:366;;;:::o;13021:::-;13163:3;13184:67;13248:2;13243:3;13184:67;:::i;:::-;13177:74;;13260:93;13349:3;13260:93;:::i;:::-;13378:2;13373:3;13369:12;13362:19;;13021:366;;;:::o;13393:::-;13535:3;13556:67;13620:2;13615:3;13556:67;:::i;:::-;13549:74;;13632:93;13721:3;13632:93;:::i;:::-;13750:2;13745:3;13741:12;13734:19;;13393:366;;;:::o;13765:402::-;13925:3;13946:85;14028:2;14023:3;13946:85;:::i;:::-;13939:92;;14040:93;14129:3;14040:93;:::i;:::-;14158:2;14153:3;14149:12;14142:19;;13765:402;;;:::o;14173:::-;14333:3;14354:85;14436:2;14431:3;14354:85;:::i;:::-;14347:92;;14448:93;14537:3;14448:93;:::i;:::-;14566:2;14561:3;14557:12;14550:19;;14173:402;;;:::o;14581:::-;14741:3;14762:85;14844:2;14839:3;14762:85;:::i;:::-;14755:92;;14856:93;14945:3;14856:93;:::i;:::-;14974:2;14969:3;14965:12;14958:19;;14581:402;;;:::o;14989:::-;15149:3;15170:85;15252:2;15247:3;15170:85;:::i;:::-;15163:92;;15264:93;15353:3;15264:93;:::i;:::-;15382:2;15377:3;15373:12;15366:19;;14989:402;;;:::o;15397:400::-;15557:3;15578:84;15660:1;15655:3;15578:84;:::i;:::-;15571:91;;15671:93;15760:3;15671:93;:::i;:::-;15789:1;15784:3;15780:11;15773:18;;15397:400;;;:::o;15803:::-;15963:3;15984:84;16066:1;16061:3;15984:84;:::i;:::-;15977:91;;16077:93;16166:3;16077:93;:::i;:::-;16195:1;16190:3;16186:11;16179:18;;15803:400;;;:::o;16209:366::-;16351:3;16372:67;16436:2;16431:3;16372:67;:::i;:::-;16365:74;;16448:93;16537:3;16448:93;:::i;:::-;16566:2;16561:3;16557:12;16550:19;;16209:366;;;:::o;16581:::-;16723:3;16744:67;16808:2;16803:3;16744:67;:::i;:::-;16737:74;;16820:93;16909:3;16820:93;:::i;:::-;16938:2;16933:3;16929:12;16922:19;;16581:366;;;:::o;16953:::-;17095:3;17116:67;17180:2;17175:3;17116:67;:::i;:::-;17109:74;;17192:93;17281:3;17192:93;:::i;:::-;17310:2;17305:3;17301:12;17294:19;;16953:366;;;:::o;17325:::-;17467:3;17488:67;17552:2;17547:3;17488:67;:::i;:::-;17481:74;;17564:93;17653:3;17564:93;:::i;:::-;17682:2;17677:3;17673:12;17666:19;;17325:366;;;:::o;17697:::-;17839:3;17860:67;17924:2;17919:3;17860:67;:::i;:::-;17853:74;;17936:93;18025:3;17936:93;:::i;:::-;18054:2;18049:3;18045:12;18038:19;;17697:366;;;:::o;18069:400::-;18229:3;18250:84;18332:1;18327:3;18250:84;:::i;:::-;18243:91;;18343:93;18432:3;18343:93;:::i;:::-;18461:1;18456:3;18452:11;18445:18;;18069:400;;;:::o;18475:402::-;18635:3;18656:85;18738:2;18733:3;18656:85;:::i;:::-;18649:92;;18750:93;18839:3;18750:93;:::i;:::-;18868:2;18863:3;18859:12;18852:19;;18475:402;;;:::o;18883:400::-;19043:3;19064:84;19146:1;19141:3;19064:84;:::i;:::-;19057:91;;19157:93;19246:3;19157:93;:::i;:::-;19275:1;19270:3;19266:11;19259:18;;18883:400;;;:::o;19289:402::-;19449:3;19470:85;19552:2;19547:3;19470:85;:::i;:::-;19463:92;;19564:93;19653:3;19564:93;:::i;:::-;19682:2;19677:3;19673:12;19666:19;;19289:402;;;:::o;19697:400::-;19857:3;19878:84;19960:1;19955:3;19878:84;:::i;:::-;19871:91;;19971:93;20060:3;19971:93;:::i;:::-;20089:1;20084:3;20080:11;20073:18;;19697:400;;;:::o;20103:366::-;20245:3;20266:67;20330:2;20325:3;20266:67;:::i;:::-;20259:74;;20342:93;20431:3;20342:93;:::i;:::-;20460:2;20455:3;20451:12;20444:19;;20103:366;;;:::o;20475:402::-;20635:3;20656:85;20738:2;20733:3;20656:85;:::i;:::-;20649:92;;20750:93;20839:3;20750:93;:::i;:::-;20868:2;20863:3;20859:12;20852:19;;20475:402;;;:::o;20883:398::-;21042:3;21063:83;21144:1;21139:3;21063:83;:::i;:::-;21056:90;;21155:93;21244:3;21155:93;:::i;:::-;21273:1;21268:3;21264:11;21257:18;;20883:398;;;:::o;21287:366::-;21429:3;21450:67;21514:2;21509:3;21450:67;:::i;:::-;21443:74;;21526:93;21615:3;21526:93;:::i;:::-;21644:2;21639:3;21635:12;21628:19;;21287:366;;;:::o;21659:402::-;21819:3;21840:85;21922:2;21917:3;21840:85;:::i;:::-;21833:92;;21934:93;22023:3;21934:93;:::i;:::-;22052:2;22047:3;22043:12;22036:19;;21659:402;;;:::o;22067:366::-;22209:3;22230:67;22294:2;22289:3;22230:67;:::i;:::-;22223:74;;22306:93;22395:3;22306:93;:::i;:::-;22424:2;22419:3;22415:12;22408:19;;22067:366;;;:::o;22439:400::-;22599:3;22620:84;22702:1;22697:3;22620:84;:::i;:::-;22613:91;;22713:93;22802:3;22713:93;:::i;:::-;22831:1;22826:3;22822:11;22815:18;;22439:400;;;:::o;22845:402::-;23005:3;23026:85;23108:2;23103:3;23026:85;:::i;:::-;23019:92;;23120:93;23209:3;23120:93;:::i;:::-;23238:2;23233:3;23229:12;23222:19;;22845:402;;;:::o;23253:400::-;23413:3;23434:84;23516:1;23511:3;23434:84;:::i;:::-;23427:91;;23527:93;23616:3;23527:93;:::i;:::-;23645:1;23640:3;23636:11;23629:18;;23253:400;;;:::o;23659:402::-;23819:3;23840:85;23922:2;23917:3;23840:85;:::i;:::-;23833:92;;23934:93;24023:3;23934:93;:::i;:::-;24052:2;24047:3;24043:12;24036:19;;23659:402;;;:::o;24067:::-;24227:3;24248:85;24330:2;24325:3;24248:85;:::i;:::-;24241:92;;24342:93;24431:3;24342:93;:::i;:::-;24460:2;24455:3;24451:12;24444:19;;24067:402;;;:::o;24475:::-;24635:3;24656:85;24738:2;24733:3;24656:85;:::i;:::-;24649:92;;24750:93;24839:3;24750:93;:::i;:::-;24868:2;24863:3;24859:12;24852:19;;24475:402;;;:::o;24883:::-;25043:3;25064:85;25146:2;25141:3;25064:85;:::i;:::-;25057:92;;25158:93;25247:3;25158:93;:::i;:::-;25276:2;25271:3;25267:12;25260:19;;24883:402;;;:::o;25291:400::-;25451:3;25472:84;25554:1;25549:3;25472:84;:::i;:::-;25465:91;;25565:93;25654:3;25565:93;:::i;:::-;25683:1;25678:3;25674:11;25667:18;;25291:400;;;:::o;25697:118::-;25784:24;25802:5;25784:24;:::i;:::-;25779:3;25772:37;25697:118;;:::o;25821:157::-;25926:45;25946:24;25964:5;25946:24;:::i;:::-;25926:45;:::i;:::-;25921:3;25914:58;25821:157;;:::o;25984:4373::-;27621:3;27643:148;27787:3;27643:148;:::i;:::-;27636:155;;27808:148;27952:3;27808:148;:::i;:::-;27801:155;;27973:95;28064:3;28055:6;27973:95;:::i;:::-;27966:102;;28085:148;28229:3;28085:148;:::i;:::-;28078:155;;28250:148;28394:3;28250:148;:::i;:::-;28243:155;;28415:95;28506:3;28497:6;28415:95;:::i;:::-;28408:102;;28527:148;28671:3;28527:148;:::i;:::-;28520:155;;28692:148;28836:3;28692:148;:::i;:::-;28685:155;;28857:95;28948:3;28939:6;28857:95;:::i;:::-;28850:102;;28969:148;29113:3;28969:148;:::i;:::-;28962:155;;29134:148;29278:3;29134:148;:::i;:::-;29127:155;;29299:95;29390:3;29381:6;29299:95;:::i;:::-;29292:102;;29411:148;29555:3;29411:148;:::i;:::-;29404:155;;29576:148;29720:3;29576:148;:::i;:::-;29569:155;;29741:95;29832:3;29823:6;29741:95;:::i;:::-;29734:102;;29853:148;29997:3;29853:148;:::i;:::-;29846:155;;30018:148;30162:3;30018:148;:::i;:::-;30011:155;;30183:148;30327:3;30183:148;:::i;:::-;30176:155;;30348:3;30341:10;;25984:4373;;;;;;;;:::o;30363:6343::-;32697:3;32719:148;32863:3;32719:148;:::i;:::-;32712:155;;32884:148;33028:3;32884:148;:::i;:::-;32877:155;;33049:95;33140:3;33131:6;33049:95;:::i;:::-;33042:102;;33161:148;33305:3;33161:148;:::i;:::-;33154:155;;33326:95;33417:3;33408:6;33326:95;:::i;:::-;33319:102;;33438:148;33582:3;33438:148;:::i;:::-;33431:155;;33603:95;33694:3;33685:6;33603:95;:::i;:::-;33596:102;;33715:148;33859:3;33715:148;:::i;:::-;33708:155;;33880:148;34024:3;33880:148;:::i;:::-;33873:155;;34045:95;34136:3;34127:6;34045:95;:::i;:::-;34038:102;;34157:148;34301:3;34157:148;:::i;:::-;34150:155;;34322:95;34413:3;34404:6;34322:95;:::i;:::-;34315:102;;34434:148;34578:3;34434:148;:::i;:::-;34427:155;;34599:148;34743:3;34599:148;:::i;:::-;34592:155;;34764:95;34855:3;34846:6;34764:95;:::i;:::-;34757:102;;34876:148;35020:3;34876:148;:::i;:::-;34869:155;;35041:148;35185:3;35041:148;:::i;:::-;35034:155;;35206:148;35350:3;35206:148;:::i;:::-;35199:155;;35371:95;35462:3;35453:6;35371:95;:::i;:::-;35364:102;;35483:148;35627:3;35483:148;:::i;:::-;35476:155;;35648:148;35792:3;35648:148;:::i;:::-;35641:155;;35813:95;35904:3;35895:6;35813:95;:::i;:::-;35806:102;;35925:148;36069:3;35925:148;:::i;:::-;35918:155;;36090:148;36234:3;36090:148;:::i;:::-;36083:155;;36255:95;36346:3;36337:6;36255:95;:::i;:::-;36248:102;;36367:148;36511:3;36367:148;:::i;:::-;36360:155;;36532:148;36676:3;36532:148;:::i;:::-;36525:155;;36697:3;36690:10;;30363:6343;;;;;;;;;;;;:::o;36712:541::-;36945:3;36967:148;37111:3;36967:148;:::i;:::-;36960:155;;37132:95;37223:3;37214:6;37132:95;:::i;:::-;37125:102;;37244:3;37237:10;;36712:541;;;;:::o;37259:379::-;37443:3;37465:147;37608:3;37465:147;:::i;:::-;37458:154;;37629:3;37622:10;;37259:379;;;:::o;37644:679::-;37840:3;37855:75;37926:3;37917:6;37855:75;:::i;:::-;37955:2;37950:3;37946:12;37939:19;;37968:75;38039:3;38030:6;37968:75;:::i;:::-;38068:2;38063:3;38059:12;38052:19;;38081:75;38152:3;38143:6;38081:75;:::i;:::-;38181:2;38176:3;38172:12;38165:19;;38194:75;38265:3;38256:6;38194:75;:::i;:::-;38294:2;38289:3;38285:12;38278:19;;38314:3;38307:10;;37644:679;;;;;;;:::o;38329:222::-;38422:4;38460:2;38449:9;38445:18;38437:26;;38473:71;38541:1;38530:9;38526:17;38517:6;38473:71;:::i;:::-;38329:222;;;;:::o;38557:640::-;38752:4;38790:3;38779:9;38775:19;38767:27;;38804:71;38872:1;38861:9;38857:17;38848:6;38804:71;:::i;:::-;38885:72;38953:2;38942:9;38938:18;38929:6;38885:72;:::i;:::-;38967;39035:2;39024:9;39020:18;39011:6;38967:72;:::i;:::-;39086:9;39080:4;39076:20;39071:2;39060:9;39056:18;39049:48;39114:76;39185:4;39176:6;39114:76;:::i;:::-;39106:84;;38557:640;;;;;;;:::o;39203:210::-;39290:4;39328:2;39317:9;39313:18;39305:26;;39341:65;39403:1;39392:9;39388:17;39379:6;39341:65;:::i;:::-;39203:210;;;;:::o;39419:313::-;39532:4;39570:2;39559:9;39555:18;39547:26;;39619:9;39613:4;39609:20;39605:1;39594:9;39590:17;39583:47;39647:78;39720:4;39711:6;39647:78;:::i;:::-;39639:86;;39419:313;;;;:::o;39738:1523::-;40139:4;40177:3;40166:9;40162:19;40154:27;;40227:9;40221:4;40217:20;40213:1;40202:9;40198:17;40191:47;40255:78;40328:4;40319:6;40255:78;:::i;:::-;40247:86;;40380:9;40374:4;40370:20;40365:2;40354:9;40350:18;40343:48;40408:78;40481:4;40472:6;40408:78;:::i;:::-;40400:86;;40533:9;40527:4;40523:20;40518:2;40507:9;40503:18;40496:48;40561:78;40634:4;40625:6;40561:78;:::i;:::-;40553:86;;40686:9;40680:4;40676:20;40671:2;40660:9;40656:18;40649:48;40714:78;40787:4;40778:6;40714:78;:::i;:::-;40706:86;;40840:9;40834:4;40830:20;40824:3;40813:9;40809:19;40802:49;40868:78;40941:4;40932:6;40868:78;:::i;:::-;40860:86;;40994:9;40988:4;40984:20;40978:3;40967:9;40963:19;40956:49;41022:78;41095:4;41086:6;41022:78;:::i;:::-;41014:86;;41148:9;41142:4;41138:20;41132:3;41121:9;41117:19;41110:49;41176:78;41249:4;41240:6;41176:78;:::i;:::-;41168:86;;39738:1523;;;;;;;;;;:::o;41267:419::-;41433:4;41471:2;41460:9;41456:18;41448:26;;41520:9;41514:4;41510:20;41506:1;41495:9;41491:17;41484:47;41548:131;41674:4;41548:131;:::i;:::-;41540:139;;41267:419;;;:::o;41692:::-;41858:4;41896:2;41885:9;41881:18;41873:26;;41945:9;41939:4;41935:20;41931:1;41920:9;41916:17;41909:47;41973:131;42099:4;41973:131;:::i;:::-;41965:139;;41692:419;;;:::o;42117:::-;42283:4;42321:2;42310:9;42306:18;42298:26;;42370:9;42364:4;42360:20;42356:1;42345:9;42341:17;42334:47;42398:131;42524:4;42398:131;:::i;:::-;42390:139;;42117:419;;;:::o;42542:::-;42708:4;42746:2;42735:9;42731:18;42723:26;;42795:9;42789:4;42785:20;42781:1;42770:9;42766:17;42759:47;42823:131;42949:4;42823:131;:::i;:::-;42815:139;;42542:419;;;:::o;42967:::-;43133:4;43171:2;43160:9;43156:18;43148:26;;43220:9;43214:4;43210:20;43206:1;43195:9;43191:17;43184:47;43248:131;43374:4;43248:131;:::i;:::-;43240:139;;42967:419;;;:::o;43392:::-;43558:4;43596:2;43585:9;43581:18;43573:26;;43645:9;43639:4;43635:20;43631:1;43620:9;43616:17;43609:47;43673:131;43799:4;43673:131;:::i;:::-;43665:139;;43392:419;;;:::o;43817:::-;43983:4;44021:2;44010:9;44006:18;43998:26;;44070:9;44064:4;44060:20;44056:1;44045:9;44041:17;44034:47;44098:131;44224:4;44098:131;:::i;:::-;44090:139;;43817:419;;;:::o;44242:::-;44408:4;44446:2;44435:9;44431:18;44423:26;;44495:9;44489:4;44485:20;44481:1;44470:9;44466:17;44459:47;44523:131;44649:4;44523:131;:::i;:::-;44515:139;;44242:419;;;:::o;44667:::-;44833:4;44871:2;44860:9;44856:18;44848:26;;44920:9;44914:4;44910:20;44906:1;44895:9;44891:17;44884:47;44948:131;45074:4;44948:131;:::i;:::-;44940:139;;44667:419;;;:::o;45092:::-;45258:4;45296:2;45285:9;45281:18;45273:26;;45345:9;45339:4;45335:20;45331:1;45320:9;45316:17;45309:47;45373:131;45499:4;45373:131;:::i;:::-;45365:139;;45092:419;;;:::o;45517:::-;45683:4;45721:2;45710:9;45706:18;45698:26;;45770:9;45764:4;45760:20;45756:1;45745:9;45741:17;45734:47;45798:131;45924:4;45798:131;:::i;:::-;45790:139;;45517:419;;;:::o;45942:::-;46108:4;46146:2;46135:9;46131:18;46123:26;;46195:9;46189:4;46185:20;46181:1;46170:9;46166:17;46159:47;46223:131;46349:4;46223:131;:::i;:::-;46215:139;;45942:419;;;:::o;46367:::-;46533:4;46571:2;46560:9;46556:18;46548:26;;46620:9;46614:4;46610:20;46606:1;46595:9;46591:17;46584:47;46648:131;46774:4;46648:131;:::i;:::-;46640:139;;46367:419;;;:::o;46792:::-;46958:4;46996:2;46985:9;46981:18;46973:26;;47045:9;47039:4;47035:20;47031:1;47020:9;47016:17;47009:47;47073:131;47199:4;47073:131;:::i;:::-;47065:139;;46792:419;;;:::o;47217:::-;47383:4;47421:2;47410:9;47406:18;47398:26;;47470:9;47464:4;47460:20;47456:1;47445:9;47441:17;47434:47;47498:131;47624:4;47498:131;:::i;:::-;47490:139;;47217:419;;;:::o;47642:::-;47808:4;47846:2;47835:9;47831:18;47823:26;;47895:9;47889:4;47885:20;47881:1;47870:9;47866:17;47859:47;47923:131;48049:4;47923:131;:::i;:::-;47915:139;;47642:419;;;:::o;48067:::-;48233:4;48271:2;48260:9;48256:18;48248:26;;48320:9;48314:4;48310:20;48306:1;48295:9;48291:17;48284:47;48348:131;48474:4;48348:131;:::i;:::-;48340:139;;48067:419;;;:::o;48492:::-;48658:4;48696:2;48685:9;48681:18;48673:26;;48745:9;48739:4;48735:20;48731:1;48720:9;48716:17;48709:47;48773:131;48899:4;48773:131;:::i;:::-;48765:139;;48492:419;;;:::o;48917:222::-;49010:4;49048:2;49037:9;49033:18;49025:26;;49061:71;49129:1;49118:9;49114:17;49105:6;49061:71;:::i;:::-;48917:222;;;;:::o;49145:129::-;49179:6;49206:20;;:::i;:::-;49196:30;;49235:33;49263:4;49255:6;49235:33;:::i;:::-;49145:129;;;:::o;49280:75::-;49313:6;49346:2;49340:9;49330:19;;49280:75;:::o;49361:307::-;49422:4;49512:18;49504:6;49501:30;49498:56;;;49534:18;;:::i;:::-;49498:56;49572:29;49594:6;49572:29;:::i;:::-;49564:37;;49656:4;49650;49646:15;49638:23;;49361:307;;;:::o;49674:98::-;49725:6;49759:5;49753:12;49743:22;;49674:98;;;:::o;49778:99::-;49830:6;49864:5;49858:12;49848:22;;49778:99;;;:::o;49883:168::-;49966:11;50000:6;49995:3;49988:19;50040:4;50035:3;50031:14;50016:29;;49883:168;;;;:::o;50057:147::-;50158:11;50195:3;50180:18;;50057:147;;;;:::o;50210:169::-;50294:11;50328:6;50323:3;50316:19;50368:4;50363:3;50359:14;50344:29;;50210:169;;;;:::o;50385:148::-;50487:11;50524:3;50509:18;;50385:148;;;;:::o;50539:305::-;50579:3;50598:20;50616:1;50598:20;:::i;:::-;50593:25;;50632:20;50650:1;50632:20;:::i;:::-;50627:25;;50786:1;50718:66;50714:74;50711:1;50708:81;50705:107;;;50792:18;;:::i;:::-;50705:107;50836:1;50833;50829:9;50822:16;;50539:305;;;;:::o;50850:185::-;50890:1;50907:20;50925:1;50907:20;:::i;:::-;50902:25;;50941:20;50959:1;50941:20;:::i;:::-;50936:25;;50980:1;50970:35;;50985:18;;:::i;:::-;50970:35;51027:1;51024;51020:9;51015:14;;50850:185;;;;:::o;51041:348::-;51081:7;51104:20;51122:1;51104:20;:::i;:::-;51099:25;;51138:20;51156:1;51138:20;:::i;:::-;51133:25;;51326:1;51258:66;51254:74;51251:1;51248:81;51243:1;51236:9;51229:17;51225:105;51222:131;;;51333:18;;:::i;:::-;51222:131;51381:1;51378;51374:9;51363:20;;51041:348;;;;:::o;51395:191::-;51435:4;51455:20;51473:1;51455:20;:::i;:::-;51450:25;;51489:20;51507:1;51489:20;:::i;:::-;51484:25;;51528:1;51525;51522:8;51519:34;;;51533:18;;:::i;:::-;51519:34;51578:1;51575;51571:9;51563:17;;51395:191;;;;:::o;51592:96::-;51629:7;51658:24;51676:5;51658:24;:::i;:::-;51647:35;;51592:96;;;:::o;51694:90::-;51728:7;51771:5;51764:13;51757:21;51746:32;;51694:90;;;:::o;51790:149::-;51826:7;51866:66;51859:5;51855:78;51844:89;;51790:149;;;:::o;51945:126::-;51982:7;52022:42;52015:5;52011:54;52000:65;;51945:126;;;:::o;52077:77::-;52114:7;52143:5;52132:16;;52077:77;;;:::o;52160:154::-;52244:6;52239:3;52234;52221:30;52306:1;52297:6;52292:3;52288:16;52281:27;52160:154;;;:::o;52320:307::-;52388:1;52398:113;52412:6;52409:1;52406:13;52398:113;;;52497:1;52492:3;52488:11;52482:18;52478:1;52473:3;52469:11;52462:39;52434:2;52431:1;52427:10;52422:15;;52398:113;;;52529:6;52526:1;52523:13;52520:101;;;52609:1;52600:6;52595:3;52591:16;52584:27;52520:101;52369:258;52320:307;;;:::o;52633:320::-;52677:6;52714:1;52708:4;52704:12;52694:22;;52761:1;52755:4;52751:12;52782:18;52772:81;;52838:4;52830:6;52826:17;52816:27;;52772:81;52900:2;52892:6;52889:14;52869:18;52866:38;52863:84;;;52919:18;;:::i;:::-;52863:84;52684:269;52633:320;;;:::o;52959:281::-;53042:27;53064:4;53042:27;:::i;:::-;53034:6;53030:40;53172:6;53160:10;53157:22;53136:18;53124:10;53121:34;53118:62;53115:88;;;53183:18;;:::i;:::-;53115:88;53223:10;53219:2;53212:22;53002:238;52959:281;;:::o;53246:233::-;53285:3;53308:24;53326:5;53308:24;:::i;:::-;53299:33;;53354:66;53347:5;53344:77;53341:103;;;53424:18;;:::i;:::-;53341:103;53471:1;53464:5;53460:13;53453:20;;53246:233;;;:::o;53485:100::-;53524:7;53553:26;53573:5;53553:26;:::i;:::-;53542:37;;53485:100;;;:::o;53591:94::-;53630:7;53659:20;53673:5;53659:20;:::i;:::-;53648:31;;53591:94;;;:::o;53691:79::-;53730:7;53759:5;53748:16;;53691:79;;;:::o;53776:176::-;53808:1;53825:20;53843:1;53825:20;:::i;:::-;53820:25;;53859:20;53877:1;53859:20;:::i;:::-;53854:25;;53898:1;53888:35;;53903:18;;:::i;:::-;53888:35;53944:1;53941;53937:9;53932:14;;53776:176;;;;:::o;53958:180::-;54006:77;54003:1;53996:88;54103:4;54100:1;54093:15;54127:4;54124:1;54117:15;54144:180;54192:77;54189:1;54182:88;54289:4;54286:1;54279:15;54313:4;54310:1;54303:15;54330:180;54378:77;54375:1;54368:88;54475:4;54472:1;54465:15;54499:4;54496:1;54489:15;54516:180;54564:77;54561:1;54554:88;54661:4;54658:1;54651:15;54685:4;54682:1;54675:15;54702:180;54750:77;54747:1;54740:88;54847:4;54844:1;54837:15;54871:4;54868:1;54861:15;54888:180;54936:77;54933:1;54926:88;55033:4;55030:1;55023:15;55057:4;55054:1;55047:15;55074:117;55183:1;55180;55173:12;55197:117;55306:1;55303;55296:12;55320:117;55429:1;55426;55419:12;55443:117;55552:1;55549;55542:12;55566:102;55607:6;55658:2;55654:7;55649:2;55642:5;55638:14;55634:28;55624:38;;55566:102;;;:::o;55674:94::-;55707:8;55755:5;55751:2;55747:14;55726:35;;55674:94;;;:::o;55774:230::-;55914:34;55910:1;55902:6;55898:14;55891:58;55983:13;55978:2;55970:6;55966:15;55959:38;55774:230;:::o;56010:237::-;56150:34;56146:1;56138:6;56134:14;56127:58;56219:20;56214:2;56206:6;56202:15;56195:45;56010:237;:::o;56253:152::-;56393:4;56389:1;56381:6;56377:14;56370:28;56253:152;:::o;56411:315::-;56551:66;56547:1;56539:6;56535:14;56528:90;56652:66;56647:2;56639:6;56635:15;56628:91;56411:315;:::o;56732:225::-;56872:34;56868:1;56860:6;56856:14;56849:58;56941:8;56936:2;56928:6;56924:15;56917:33;56732:225;:::o;56963:214::-;57103:66;57099:1;57091:6;57087:14;57080:90;56963:214;:::o;57183:315::-;57323:66;57319:1;57311:6;57307:14;57300:90;57424:66;57419:2;57411:6;57407:15;57400:91;57183:315;:::o;57504:178::-;57644:30;57640:1;57632:6;57628:14;57621:54;57504:178;:::o;57688:214::-;57828:66;57824:1;57816:6;57812:14;57805:90;57688:214;:::o;57908:223::-;58048:34;58044:1;58036:6;58032:14;58025:58;58117:6;58112:2;58104:6;58100:15;58093:31;57908:223;:::o;58137:175::-;58277:27;58273:1;58265:6;58261:14;58254:51;58137:175;:::o;58318:231::-;58458:34;58454:1;58446:6;58442:14;58435:58;58527:14;58522:2;58514:6;58510:15;58503:39;58318:231;:::o;58555:243::-;58695:34;58691:1;58683:6;58679:14;58672:58;58764:26;58759:2;58751:6;58747:15;58740:51;58555:243;:::o;58804:229::-;58944:34;58940:1;58932:6;58928:14;58921:58;59013:12;59008:2;59000:6;58996:15;58989:37;58804:229;:::o;59039:228::-;59179:34;59175:1;59167:6;59163:14;59156:58;59248:11;59243:2;59235:6;59231:15;59224:36;59039:228;:::o;59273:353::-;59413:66;59409:1;59401:6;59397:14;59390:90;59514:66;59509:2;59501:6;59497:15;59490:91;59615:3;59610:2;59602:6;59598:15;59591:28;59273:353;:::o;59632:315::-;59772:66;59768:1;59760:6;59756:14;59749:90;59873:66;59868:2;59860:6;59856:15;59849:91;59632:315;:::o;59953:::-;60093:66;60089:1;60081:6;60077:14;60070:90;60194:66;60189:2;60181:6;60177:15;60170:91;59953:315;:::o;60274:255::-;60414:66;60410:1;60402:6;60398:14;60391:90;60515:6;60510:2;60502:6;60498:15;60491:31;60274:255;:::o;60535:214::-;60675:66;60671:1;60663:6;60659:14;60652:90;60535:214;:::o;60755:157::-;60895:9;60891:1;60883:6;60879:14;60872:33;60755:157;:::o;60918:182::-;61058:34;61054:1;61046:6;61042:14;61035:58;60918:182;:::o;61106:231::-;61246:34;61242:1;61234:6;61230:14;61223:58;61315:14;61310:2;61302:6;61298:15;61291:39;61106:231;:::o;61343:182::-;61483:34;61479:1;61471:6;61467:14;61460:58;61343:182;:::o;61531:228::-;61671:34;61667:1;61659:6;61655:14;61648:58;61740:11;61735:2;61727:6;61723:15;61716:36;61531:228;:::o;61765:234::-;61905:34;61901:1;61893:6;61889:14;61882:58;61974:17;61969:2;61961:6;61957:15;61950:42;61765:234;:::o;62005:155::-;62145:3;62141:1;62133:6;62129:14;62122:27;62005:155;:::o;62170:222::-;62314:66;62310:1;62302:6;62298:14;62291:90;62170:222;:::o;62402:152::-;62542:4;62538:1;62530:6;62526:14;62519:28;62402:152;:::o;62560:315::-;62700:66;62696:1;62688:6;62684:14;62677:90;62801:66;62796:2;62788:6;62784:15;62777:91;62560:315;:::o;62881:214::-;63021:66;63017:1;63009:6;63005:14;62998:90;62881:214;:::o;63101:220::-;63241:34;63237:1;63229:6;63225:14;63218:58;63310:3;63305:2;63297:6;63293:15;63286:28;63101:220;:::o;63327:179::-;63467:31;63463:1;63455:6;63451:14;63444:55;63327:179;:::o;63512:114::-;;:::o;63632:236::-;63772:34;63768:1;63760:6;63756:14;63749:58;63841:19;63836:2;63828:6;63824:15;63817:44;63632:236;:::o;63874:315::-;64014:66;64010:1;64002:6;63998:14;63991:90;64115:66;64110:2;64102:6;64098:15;64091:91;63874:315;:::o;64195:231::-;64335:34;64331:1;64323:6;64319:14;64312:58;64404:14;64399:2;64391:6;64387:15;64380:39;64195:231;:::o;64432:214::-;64572:66;64568:1;64560:6;64556:14;64549:90;64432:214;:::o;64652:::-;64792:66;64788:1;64780:6;64776:14;64769:90;64652:214;:::o;64872:154::-;65012:6;65008:1;65000:6;64996:14;64989:30;64872:154;:::o;65032:214::-;65172:66;65168:1;65160:6;65156:14;65149:90;65032:214;:::o;65252:315::-;65392:66;65388:1;65380:6;65376:14;65369:90;65493:66;65488:2;65480:6;65476:15;65469:91;65252:315;:::o;65573:::-;65713:66;65709:1;65701:6;65697:14;65690:90;65814:66;65809:2;65801:6;65797:15;65790:91;65573:315;:::o;65894:::-;66034:66;66030:1;66022:6;66018:14;66011:90;66135:66;66130:2;66122:6;66118:15;66111:91;65894:315;:::o;66215:156::-;66355:8;66351:1;66343:6;66339:14;66332:32;66215:156;:::o;66377:122::-;66450:24;66468:5;66450:24;:::i;:::-;66443:5;66440:35;66430:63;;66489:1;66486;66479:12;66430:63;66377:122;:::o;66505:116::-;66575:21;66590:5;66575:21;:::i;:::-;66568:5;66565:32;66555:60;;66611:1;66608;66601:12;66555:60;66505:116;:::o;66627:120::-;66699:23;66716:5;66699:23;:::i;:::-;66692:5;66689:34;66679:62;;66737:1;66734;66727:12;66679:62;66627:120;:::o;66753:122::-;66826:24;66844:5;66826:24;:::i;:::-;66819:5;66816:35;66806:63;;66865:1;66862;66855:12;66806:63;66753:122;:::o
Swarm Source
ipfs://ed4c14961e45307162eac33201abb544e63c1b2e11a3ddfadc6fecfcb77ee1cf
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.