Contract
0x14b685ff39c42d05f83c0cd8b58fe5bb6e84efa5
1
Contract Overview
Balance:
0 MATIC
My Name Tag:
Not Available
TokenTracker:
[ Download CSV Export ]
Contract Name:
WasBorn
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-09-18 */ /** *Submitted for verification at Etherscan.io on 2021-08-27 */ // SPDX-License-Identifier: MIT 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); } /** * @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; } /** * @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); } } /* * @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; } } /** * @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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /** * @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); } /** * @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); } /** * @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); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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); } } } } /** * @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; } } /** * @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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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 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(to).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 {} } /** * @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); } /** * @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(); } } contract WasBorn is ERC721Enumerable, ReentrancyGuard, Ownable { string[] private fontcolor = [ "white", "black", "blue", "red", "green", "orange", "purple", "pink", "yellow", "lightskyblue", "green", "tomato" ]; string[] private backgroundcolor = [ "ghostwhite", "lightcyan", "honeydew", "beige", "lightgoldenrodyellow", "cornsilk", "lavenderblush", "lightgray", "mintcream", "azure", "aliceblue", "mistyrose" ]; function random(string memory input) internal pure returns (uint256) { return uint256(keccak256(abi.encodePacked(input))); } function getFontColor(uint256 tokenId) public view returns (string memory) { return pluck(tokenId, "FONTCOLOR", fontcolor); } function getBackgroundColor(uint256 tokenId) public view returns (string memory) { return pluck(tokenId, "BACKGROUNDCOLOR", backgroundcolor); } function pluck(uint256 tokenId, string memory keyPrefix, string[] memory sourceArray) internal pure returns (string memory) { uint256 rand = random(string(abi.encodePacked(keyPrefix, toString(tokenId)))); string memory output = sourceArray[rand % sourceArray.length]; return output; } function date(uint tokenId) internal pure returns (string memory) { string memory output; if (tokenId <= 31) { output = string(abi.encodePacked("1/", toString(tokenId))); } else if ((32 <= tokenId) && (tokenId <= 60)) { output = string(abi.encodePacked("2/", toString(tokenId - 31))); } else if ((61 <= tokenId) && (tokenId <= 91)) { output = string(abi.encodePacked("3/", toString(tokenId - 60))); } else if ((92 <= tokenId) && (tokenId <= 121)) { output = string(abi.encodePacked("4/", toString(tokenId - 91))); } else if ((122 <= tokenId) && (tokenId <= 152)) { output = string(abi.encodePacked("5/", toString(tokenId - 121))); } else if ((153 <= tokenId) && (tokenId <= 182)) { output = string(abi.encodePacked("6/", toString(tokenId - 152))); } else if ((183 <= tokenId) && (tokenId <= 213)) { output = string(abi.encodePacked("7/", toString(tokenId - 182))); } else if ((214 <= tokenId) && (tokenId <= 244)) { output = string(abi.encodePacked("8/", toString(tokenId - 213))); } else if ((245 <= tokenId) && (tokenId <= 274)) { output = string(abi.encodePacked("9/", toString(tokenId - 244))); } else if ((275 <= tokenId) && (tokenId <= 305)) { output = string(abi.encodePacked("10/", toString(tokenId - 274))); } else if ((306 <= tokenId) && (tokenId <= 335)) { output = string(abi.encodePacked("11/", toString(tokenId - 305))); } else if ((336 <= tokenId) && (tokenId <= 366)) { output = string(abi.encodePacked("12/", toString(tokenId - 335))); } return output; } function tokenURI(uint256 tokenId) override public view returns (string memory) { string[17] memory parts; parts[0] = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350"><style>.base { fill: '; parts[1] = getFontColor(tokenId); parts[2] = '; font-family: serif; font-size: 14px; }</style><rect width="100%" height="100%" fill="'; parts[3] = getBackgroundColor(tokenId); parts[4] = '" /><text x="160" y="175" class="base">'; parts[5] = date(tokenId); parts[6] = '</text></svg>'; string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6])); string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "#', date(tokenId), '", "description": "I was born.", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"}')))); output = string(abi.encodePacked('data:application/json;base64,', json)); return output; } function claim(uint256 tokenId) public nonReentrant { require(tokenId > 0 && tokenId < 367, "Token ID invalid"); _safeMint(_msgSender(), tokenId); } function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT license // 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); } constructor() ERC721("Loot", "LOOT") Ownable() {} } /// [MIT License] /// @title Base64 /// @notice Provides a function for encoding some bytes in base64 /// @author Brecht Devos <[email protected]> library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } }
[{"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":"tokenId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getBackgroundColor","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getFontColor","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"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"}]
Contract Creation Code
60806040526040518061018001604052806040518060400160405280600581526020017f776869746500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f626c61636b00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f626c75650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f726564000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f677265656e00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f6f72616e6765000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f707572706c65000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f70696e6b0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f79656c6c6f77000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f6c69676874736b79626c7565000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f677265656e00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f746f6d61746f0000000000000000000000000000000000000000000000000000815250815250600c90600c620002e492919062000770565b506040518061018001604052806040518060400160405280600a81526020017f67686f737477686974650000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f6c696768746379616e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f686f6e657964657700000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f626569676500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280601481526020017f6c69676874676f6c64656e726f6479656c6c6f7700000000000000000000000081525081526020016040518060400160405280600881526020017f636f726e73696c6b00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f6c6176656e646572626c7573680000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f6c6967687467726179000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f6d696e74637265616d000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f617a75726500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f616c696365626c7565000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f6d69737479726f73650000000000000000000000000000000000000000000000815250815250600d90600c620005c592919062000770565b50348015620005d357600080fd5b506040518060400160405280600481526020017f4c6f6f74000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4c4f4f5400000000000000000000000000000000000000000000000000000000815250816000908051906020019062000658929190620007d7565b50806001908051906020019062000671929190620007d7565b5050506001600a819055506200069c62000690620006a260201b60201c565b620006aa60201b60201c565b6200095a565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054828255906000526020600020908101928215620007c4579160200282015b82811115620007c3578251829080519060200190620007b2929190620007d7565b509160200191906001019062000791565b5b509050620007d3919062000868565b5090565b828054620007e590620008f5565b90600052602060002090601f01602090048101928262000809576000855562000855565b82601f106200082457805160ff191683800117855562000855565b8280016001018555821562000855579182015b828111156200085457825182559160200191906001019062000837565b5b50905062000864919062000890565b5090565b5b808211156200088c5760008181620008829190620008af565b5060010162000869565b5090565b5b80821115620008ab57600081600090555060010162000891565b5090565b508054620008bd90620008f5565b6000825580601f10620008d15750620008f2565b601f016020900490600052602060002090810190620008f1919062000890565b5b50565b600060028204905060018216806200090e57607f821691505b602082108114156200092557620009246200092b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614861806200096a6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80636352211e116100b857806395d89b411161007c57806395d89b411461039b578063a22cb465146103b9578063b88d4fde146103d5578063c87b56dd146103f1578063e985e9c514610421578063f2fde38b1461045157610142565b80636352211e146102e357806370a0823114610313578063715018a61461034357806381f9eaf41461034d5780638da5cb5b1461037d57610142565b806323b872dd1161010a57806323b872dd146101ff5780632f745c591461021b578063379607f51461024b57806342842e0e146102675780634671059f146102835780634f6ccce7146102b357610142565b806301ffc9a71461014757806306fdde0314610177578063081812fc14610195578063095ea7b3146101c557806318160ddd146101e1575b600080fd5b610161600480360381019061015c91906130af565b61046d565b60405161016e9190613ffa565b60405180910390f35b61017f6104e7565b60405161018c9190614015565b60405180910390f35b6101af60048036038101906101aa9190613101565b610579565b6040516101bc9190613f93565b60405180910390f35b6101df60048036038101906101da9190613073565b6105fe565b005b6101e9610716565b6040516101f69190614297565b60405180910390f35b61021960048036038101906102149190612f6d565b610723565b005b61023560048036038101906102309190613073565b610783565b6040516102429190614297565b60405180910390f35b61026560048036038101906102609190613101565b610828565b005b610281600480360381019061027c9190612f6d565b6108e2565b005b61029d60048036038101906102989190613101565b610902565b6040516102aa9190614015565b60405180910390f35b6102cd60048036038101906102c89190613101565b610a1c565b6040516102da9190614297565b60405180910390f35b6102fd60048036038101906102f89190613101565b610ab3565b60405161030a9190613f93565b60405180910390f35b61032d60048036038101906103289190612f08565b610b65565b60405161033a9190614297565b60405180910390f35b61034b610c1d565b005b61036760048036038101906103629190613101565b610ca5565b6040516103749190614015565b60405180910390f35b610385610dbf565b6040516103929190613f93565b60405180910390f35b6103a3610de9565b6040516103b09190614015565b60405180910390f35b6103d360048036038101906103ce9190613037565b610e7b565b005b6103ef60048036038101906103ea9190612fbc565b610ffc565b005b61040b60048036038101906104069190613101565b61105e565b6040516104189190614015565b60405180910390f35b61043b60048036038101906104369190612f31565b61151f565b6040516104489190613ffa565b60405180910390f35b61046b60048036038101906104669190612f08565b6115b3565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104e057506104df826116ab565b5b9050919050565b6060600080546104f690614521565b80601f016020809104026020016040519081016040528092919081815260200182805461052290614521565b801561056f5780601f106105445761010080835404028352916020019161056f565b820191906000526020600020905b81548152906001019060200180831161055257829003601f168201915b5050505050905090565b60006105848261178d565b6105c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ba90614197565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061060982610ab3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561067a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067190614217565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106996117f9565b73ffffffffffffffffffffffffffffffffffffffff1614806106c857506106c7816106c26117f9565b61151f565b5b610707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fe90614117565b60405180910390fd5b6107118383611801565b505050565b6000600880549050905090565b61073461072e6117f9565b826118ba565b610773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076a90614237565b60405180910390fd5b61077e838383611998565b505050565b600061078e83610b65565b82106107cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c690614037565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6002600a54141561086e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086590614277565b60405180910390fd5b6002600a81905550600081118015610887575061016f81105b6108c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bd906141d7565b60405180910390fd5b6108d76108d16117f9565b82611bf4565b6001600a8190555050565b6108fd83838360405180602001604052806000815250610ffc565b505050565b6060610a15826040518060400160405280600f81526020017f4241434b47524f554e44434f4c4f520000000000000000000000000000000000815250600d805480602002602001604051908101604052809291908181526020016000905b82821015610a0c57838290600052602060002001805461097f90614521565b80601f01602080910402602001604051908101604052809291908181526020018280546109ab90614521565b80156109f85780601f106109cd576101008083540402835291602001916109f8565b820191906000526020600020905b8154815290600101906020018083116109db57829003601f168201915b505050505081526020019060010190610960565b50505050611c12565b9050919050565b6000610a26610716565b8210610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e90614257565b60405180910390fd5b60088281548110610aa1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5390614157565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcd90614137565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c256117f9565b73ffffffffffffffffffffffffffffffffffffffff16610c43610dbf565b73ffffffffffffffffffffffffffffffffffffffff1614610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c90906141b7565b60405180910390fd5b610ca36000611ca7565b565b6060610db8826040518060400160405280600981526020017f464f4e54434f4c4f520000000000000000000000000000000000000000000000815250600c805480602002602001604051908101604052809291908181526020016000905b82821015610daf578382906000526020600020018054610d2290614521565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4e90614521565b8015610d9b5780601f10610d7057610100808354040283529160200191610d9b565b820191906000526020600020905b815481529060010190602001808311610d7e57829003601f168201915b505050505081526020019060010190610d03565b50505050611c12565b9050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610df890614521565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2490614521565b8015610e715780601f10610e4657610100808354040283529160200191610e71565b820191906000526020600020905b815481529060010190602001808311610e5457829003601f168201915b5050505050905090565b610e836117f9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee8906140d7565b60405180910390fd5b8060056000610efe6117f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610fab6117f9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ff09190613ffa565b60405180910390a35050565b61100d6110076117f9565b836118ba565b61104c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104390614237565b60405180910390fd5b61105884848484611d6d565b50505050565b6060611068612e0f565b6040518060a001604052806077815260200161474e60779139816000601181106110bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506110cc83610ca5565b81600160118110611106577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506040518060800160405280605781526020016146f76057913981600260118110611161577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525061117283610902565b816003601181106111ac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506040518060600160405280602781526020016147c56027913981600460118110611207577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525061121883611dc9565b81600560118110611252577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506040518060400160405280600d81526020017f3c2f746578743e3c2f7376673e00000000000000000000000000000000000000815250816006601181106112ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060008160006011811061130e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201518260016011811061134d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201518360026011811061138c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151846003601181106113cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201518560046011811061140a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015186600560118110611449577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015187600660118110611488577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201516040516020016114a39796959493929190613d2f565b604051602081830303815290604052905060006114f06114c286611dc9565b6114cb846121a3565b6040516020016114dc929190613e1c565b6040516020818303038152906040526121a3565b9050806040516020016115039190613f2d565b6040516020818303038152906040529150819350505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115bb6117f9565b73ffffffffffffffffffffffffffffffffffffffff166115d9610dbf565b73ffffffffffffffffffffffffffffffffffffffff161461162f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611626906141b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561169f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169690614077565b60405180910390fd5b6116a881611ca7565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061177657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611786575061178582612361565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661187483610ab3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006118c58261178d565b611904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fb906140f7565b60405180910390fd5b600061190f83610ab3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061197e57508373ffffffffffffffffffffffffffffffffffffffff1661196684610579565b73ffffffffffffffffffffffffffffffffffffffff16145b8061198f575061198e818561151f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119b882610ab3565b73ffffffffffffffffffffffffffffffffffffffff1614611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a05906141f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a75906140b7565b60405180910390fd5b611a898383836123cb565b611a94600082611801565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ae49190614437565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b3b9190614356565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611c0e8282604051806020016040528060008152506124df565b5050565b60606000611c4884611c238761253a565b604051602001611c34929190613d0b565b6040516020818303038152906040526126e7565b9050600083845183611c5a919061459c565b81518110611c91577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905080925050509392505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611d78848484611998565b611d848484848461271a565b611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba90614057565b60405180910390fd5b50505050565b606080601f8311611e0357611ddd8361253a565b604051602001611ded9190613db6565b604051602081830303815290604052905061219a565b82602011158015611e155750603c8311155b15611e5557611e2f601f84611e2a9190614437565b61253a565b604051602001611e3f9190613ee9565b6040516020818303038152906040529050612199565b82603d11158015611e675750605b8311155b15611ea757611e81603c84611e7c9190614437565b61253a565b604051602001611e919190613dfa565b6040516020818303038152906040529050612198565b82605c11158015611eb9575060798311155b15611ef957611ed3605b84611ece9190614437565b61253a565b604051602001611ee39190613e61565b6040516020818303038152906040529050612197565b82607a11158015611f0b575060988311155b15611f4b57611f25607984611f209190614437565b61253a565b604051602001611f359190613d94565b6040516020818303038152906040529050612196565b82609911158015611f5d575060b68311155b15611f9d57611f77609884611f729190614437565b61253a565b604051602001611f879190613ec7565b6040516020818303038152906040529050612195565b8260b711158015611faf575060d58311155b15611fef57611fc960b684611fc49190614437565b61253a565b604051602001611fd99190613dd8565b6040516020818303038152906040529050612194565b8260d611158015612001575060f48311155b156120415761201b60d5846120169190614437565b61253a565b60405160200161202b9190613f71565b6040516020818303038152906040529050612193565b8260f51115801561205457506101128311155b156120945761206e60f4846120699190614437565b61253a565b60405160200161207e9190613ea5565b6040516020818303038152906040529050612192565b82610113111580156120a857506101318311155b156120e9576120c3610112846120be9190614437565b61253a565b6040516020016120d39190613e83565b6040516020818303038152906040529050612191565b82610132111580156120fd575061014f8311155b1561213e57612118610131846121139190614437565b61253a565b6040516020016121289190613f4f565b6040516020818303038152906040529050612190565b8261015011158015612152575061016e8311155b1561218f5761216d61014f846121689190614437565b61253a565b60405160200161217d9190613f0b565b60405160208183030381529060405290505b5b5b5b5b5b5b5b5b5b5b5b80915050919050565b606060008251905060008114156121cc576040518060200160405280600081525091505061235c565b600060036002836121dd9190614356565b6121e791906143ac565b60046121f391906143dd565b905060006020826122049190614356565b67ffffffffffffffff811115612243577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156122755781602001600182028036833780820191505090505b50905060006040518060600160405280604081526020016147ec604091399050600181016020830160005b868110156123195760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b905080845260048401935050506122a0565b50600386066001811461233357600281146123435761234e565b613d3d60f01b600283035261234e565b603d60f81b60018303525b508484525050819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6123d68383836128b1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561241957612414816128b6565b612458565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146124575761245683826128ff565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561249b5761249681612a6c565b6124da565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146124d9576124d88282612baf565b5b5b505050565b6124e98383612c2e565b6124f6600084848461271a565b612535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252c90614057565b60405180910390fd5b505050565b60606000821415612582576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126e2565b600082905060005b600082146125b457808061259d90614553565b915050600a826125ad91906143ac565b915061258a565b60008167ffffffffffffffff8111156125f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156126285781602001600182028036833780820191505090505b5090505b600085146126db576001826126419190614437565b9150600a85612650919061459c565b603061265c9190614356565b60f81b818381518110612698577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126d491906143ac565b945061262c565b8093505050505b919050565b6000816040516020016126fa9190613cf4565b6040516020818303038152906040528051906020012060001c9050919050565b600061273b8473ffffffffffffffffffffffffffffffffffffffff16612dfc565b156128a4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127646117f9565b8786866040518563ffffffff1660e01b81526004016127869493929190613fae565b602060405180830381600087803b1580156127a057600080fd5b505af19250505080156127d157506040513d601f19601f820116820180604052508101906127ce91906130d8565b60015b612854573d8060008114612801576040519150601f19603f3d011682016040523d82523d6000602084013e612806565b606091505b5060008151141561284c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284390614057565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128a9565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161290c84610b65565b6129169190614437565b90506000600760008481526020019081526020016000205490508181146129fb576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612a809190614437565b9050600060096000848152602001908152602001600020549050600060088381548110612ad6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612b1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612b93577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612bba83610b65565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9590614177565b60405180910390fd5b612ca78161178d565b15612ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cde90614097565b60405180910390fd5b612cf3600083836123cb565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d439190614356565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6040518061022001604052806011905b6060815260200190600190039081612e1f5790505090565b6000612e4a612e45846142e3565b6142b2565b905082815260208101848484011115612e6257600080fd5b612e6d8482856144df565b509392505050565b600081359050612e848161469a565b92915050565b600081359050612e99816146b1565b92915050565b600081359050612eae816146c8565b92915050565b600081519050612ec3816146c8565b92915050565b600082601f830112612eda57600080fd5b8135612eea848260208601612e37565b91505092915050565b600081359050612f02816146df565b92915050565b600060208284031215612f1a57600080fd5b6000612f2884828501612e75565b91505092915050565b60008060408385031215612f4457600080fd5b6000612f5285828601612e75565b9250506020612f6385828601612e75565b9150509250929050565b600080600060608486031215612f8257600080fd5b6000612f9086828701612e75565b9350506020612fa186828701612e75565b9250506040612fb286828701612ef3565b9150509250925092565b60008060008060808587031215612fd257600080fd5b6000612fe087828801612e75565b9450506020612ff187828801612e75565b935050604061300287828801612ef3565b925050606085013567ffffffffffffffff81111561301f57600080fd5b61302b87828801612ec9565b91505092959194509250565b6000806040838503121561304a57600080fd5b600061305885828601612e75565b925050602061306985828601612e8a565b9150509250929050565b6000806040838503121561308657600080fd5b600061309485828601612e75565b92505060206130a585828601612ef3565b9150509250929050565b6000602082840312156130c157600080fd5b60006130cf84828501612e9f565b91505092915050565b6000602082840312156130ea57600080fd5b60006130f884828501612eb4565b91505092915050565b60006020828403121561311357600080fd5b600061312184828501612ef3565b91505092915050565b6131338161446b565b82525050565b6131428161447d565b82525050565b600061315382614313565b61315d8185614329565b935061316d8185602086016144ee565b61317681614689565b840191505092915050565b600061318c8261431e565b613196818561433a565b93506131a68185602086016144ee565b6131af81614689565b840191505092915050565b60006131c58261431e565b6131cf818561434b565b93506131df8185602086016144ee565b80840191505092915050565b60006131f860028361434b565b91507f352f0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b6000613238602b8361433a565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b600061329e60328361433a565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061330460268361433a565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061336a601c8361433a565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006133aa60028361434b565b91507f312f0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006133ea60248361433a565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061345060198361433a565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b600061349060028361434b565b91507f372f0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006134d060028361434b565b91507f332f0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b6000613510600b8361434b565b91507f7b226e616d65223a2022230000000000000000000000000000000000000000006000830152600b82019050919050565b6000613550602c8361433a565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006135b660028361434b565b91507f342f0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006135f660388361433a565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061365c602a8361433a565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006136c260298361433a565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061372860028361434b565b91507f227d0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061376860208361433a565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006137a860038361434b565b91507f31302f00000000000000000000000000000000000000000000000000000000006000830152600382019050919050565b60006137e8602c8361433a565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061384e60028361434b565b91507f392f0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061388e60208361433a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006138ce60108361433a565b91507f546f6b656e20494420696e76616c6964000000000000000000000000000000006000830152602082019050919050565b600061390e60028361434b565b91507f362f0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061394e60298361433a565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006139b460028361434b565b91507f322f0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006139f460038361434b565b91507f31322f00000000000000000000000000000000000000000000000000000000006000830152600382019050919050565b6000613a3460218361433a565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a9a601d8361434b565b91507f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000006000830152601d82019050919050565b6000613ada60318361433a565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613b4060038361434b565b91507f31312f00000000000000000000000000000000000000000000000000000000006000830152600382019050919050565b6000613b80602c8361433a565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613be660458361434b565b91507f222c20226465736372697074696f6e223a2022492077617320626f726e2e222c60008301527f2022696d616765223a2022646174613a696d6167652f7376672b786d6c3b626160208301527f736536342c0000000000000000000000000000000000000000000000000000006040830152604582019050919050565b6000613c72601f8361433a565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000613cb260028361434b565b91507f382f0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b613cee816144d5565b82525050565b6000613d0082846131ba565b915081905092915050565b6000613d1782856131ba565b9150613d2382846131ba565b91508190509392505050565b6000613d3b828a6131ba565b9150613d4782896131ba565b9150613d5382886131ba565b9150613d5f82876131ba565b9150613d6b82866131ba565b9150613d7782856131ba565b9150613d8382846131ba565b915081905098975050505050505050565b6000613d9f826131eb565b9150613dab82846131ba565b915081905092915050565b6000613dc18261339d565b9150613dcd82846131ba565b915081905092915050565b6000613de382613483565b9150613def82846131ba565b915081905092915050565b6000613e05826134c3565b9150613e1182846131ba565b915081905092915050565b6000613e2782613503565b9150613e3382856131ba565b9150613e3e82613bd9565b9150613e4a82846131ba565b9150613e558261371b565b91508190509392505050565b6000613e6c826135a9565b9150613e7882846131ba565b915081905092915050565b6000613e8e8261379b565b9150613e9a82846131ba565b915081905092915050565b6000613eb082613841565b9150613ebc82846131ba565b915081905092915050565b6000613ed282613901565b9150613ede82846131ba565b915081905092915050565b6000613ef4826139a7565b9150613f0082846131ba565b915081905092915050565b6000613f16826139e7565b9150613f2282846131ba565b915081905092915050565b6000613f3882613a8d565b9150613f4482846131ba565b915081905092915050565b6000613f5a82613b33565b9150613f6682846131ba565b915081905092915050565b6000613f7c82613ca5565b9150613f8882846131ba565b915081905092915050565b6000602082019050613fa8600083018461312a565b92915050565b6000608082019050613fc3600083018761312a565b613fd0602083018661312a565b613fdd6040830185613ce5565b8181036060830152613fef8184613148565b905095945050505050565b600060208201905061400f6000830184613139565b92915050565b6000602082019050818103600083015261402f8184613181565b905092915050565b600060208201905081810360008301526140508161322b565b9050919050565b6000602082019050818103600083015261407081613291565b9050919050565b60006020820190508181036000830152614090816132f7565b9050919050565b600060208201905081810360008301526140b08161335d565b9050919050565b600060208201905081810360008301526140d0816133dd565b9050919050565b600060208201905081810360008301526140f081613443565b9050919050565b6000602082019050818103600083015261411081613543565b9050919050565b60006020820190508181036000830152614130816135e9565b9050919050565b600060208201905081810360008301526141508161364f565b9050919050565b60006020820190508181036000830152614170816136b5565b9050919050565b600060208201905081810360008301526141908161375b565b9050919050565b600060208201905081810360008301526141b0816137db565b9050919050565b600060208201905081810360008301526141d081613881565b9050919050565b600060208201905081810360008301526141f0816138c1565b9050919050565b6000602082019050818103600083015261421081613941565b9050919050565b6000602082019050818103600083015261423081613a27565b9050919050565b6000602082019050818103600083015261425081613acd565b9050919050565b6000602082019050818103600083015261427081613b73565b9050919050565b6000602082019050818103600083015261429081613c65565b9050919050565b60006020820190506142ac6000830184613ce5565b92915050565b6000604051905081810181811067ffffffffffffffff821117156142d9576142d861465a565b5b8060405250919050565b600067ffffffffffffffff8211156142fe576142fd61465a565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614361826144d5565b915061436c836144d5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143a1576143a06145cd565b5b828201905092915050565b60006143b7826144d5565b91506143c2836144d5565b9250826143d2576143d16145fc565b5b828204905092915050565b60006143e8826144d5565b91506143f3836144d5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561442c5761442b6145cd565b5b828202905092915050565b6000614442826144d5565b915061444d836144d5565b9250828210156144605761445f6145cd565b5b828203905092915050565b6000614476826144b5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561450c5780820151818401526020810190506144f1565b8381111561451b576000848401525b50505050565b6000600282049050600182168061453957607f821691505b6020821081141561454d5761454c61462b565b5b50919050565b600061455e826144d5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614591576145906145cd565b5b600182019050919050565b60006145a7826144d5565b91506145b2836144d5565b9250826145c2576145c16145fc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6146a38161446b565b81146146ae57600080fd5b50565b6146ba8161447d565b81146146c557600080fd5b50565b6146d181614489565b81146146dc57600080fd5b50565b6146e8816144d5565b81146146f357600080fd5b5056fe3b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d223c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2022202f3e3c7465787420783d223136302220793d223137352220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212201d21736616f5fc90c0d08d621fa08f1b0188fe5b11a5f3fc90a68eee4e8a052d64736f6c63430008000033
Deployed ByteCode Sourcemap
44571:5295:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38421:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25535:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27094:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26617:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39061:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27984:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38729:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48904:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28394:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45545:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39251:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25229:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24959:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9927:94;;;:::i;:::-;;45394:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9276:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25704:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27387:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28650:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47815:1081;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27753:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10176:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38421:224;38523:4;38562:35;38547:50;;;:11;:50;;;;:90;;;;38601:36;38625:11;38601:23;:36::i;:::-;38547:90;38540:97;;38421:224;;;:::o;25535:100::-;25589:13;25622:5;25615:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25535:100;:::o;27094:221::-;27170:7;27198:16;27206:7;27198;:16::i;:::-;27190:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27283:15;:24;27299:7;27283:24;;;;;;;;;;;;;;;;;;;;;27276:31;;27094:221;;;:::o;26617:411::-;26698:13;26714:23;26729:7;26714:14;:23::i;:::-;26698:39;;26762:5;26756:11;;:2;:11;;;;26748:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26856:5;26840:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26865:37;26882:5;26889:12;:10;:12::i;:::-;26865:16;:37::i;:::-;26840:62;26818:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26999:21;27008:2;27012:7;26999:8;:21::i;:::-;26617:411;;;:::o;39061:113::-;39122:7;39149:10;:17;;;;39142:24;;39061:113;:::o;27984:339::-;28179:41;28198:12;:10;:12::i;:::-;28212:7;28179:18;:41::i;:::-;28171:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28287:28;28297:4;28303:2;28307:7;28287:9;:28::i;:::-;27984:339;;;:::o;38729:256::-;38826:7;38862:23;38879:5;38862:16;:23::i;:::-;38854:5;:31;38846:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38951:12;:19;38964:5;38951:19;;;;;;;;;;;;;;;:26;38971:5;38951:26;;;;;;;;;;;;38944:33;;38729:256;;;;:::o;48904:171::-;12215:1;12811:7;;:19;;12803:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;12215:1;12944:7;:18;;;;48985:1:::1;48975:7;:11;:28;;;;;49000:3;48990:7;:13;48975:28;48967:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;49035:32;49045:12;:10;:12::i;:::-;49059:7;49035:9;:32::i;:::-;12171:1:::0;13123:7;:22;;;;48904:171;:::o;28394:185::-;28532:39;28549:4;28555:2;28559:7;28532:39;;;;;;;;;;;;:16;:39::i;:::-;28394:185;;;:::o;45545:157::-;45611:13;45644:50;45650:7;45644:50;;;;;;;;;;;;;;;;;45678:15;45644:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;:50::i;:::-;45637:57;;45545:157;;;:::o;39251:233::-;39326:7;39362:30;:28;:30::i;:::-;39354:5;:38;39346:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39459:10;39470:5;39459:17;;;;;;;;;;;;;;;;;;;;;;;;39452:24;;39251:233;;;:::o;25229:239::-;25301:7;25321:13;25337:7;:16;25345:7;25337:16;;;;;;;;;;;;;;;;;;;;;25321:32;;25389:1;25372:19;;:5;:19;;;;25364:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25455:5;25448:12;;;25229:239;;;:::o;24959:208::-;25031:7;25076:1;25059:19;;:5;:19;;;;25051:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25143:9;:16;25153:5;25143:16;;;;;;;;;;;;;;;;25136:23;;24959:208;;;:::o;9927:94::-;9507:12;:10;:12::i;:::-;9496:23;;:7;:5;:7::i;:::-;:23;;;9488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9992:21:::1;10010:1;9992:9;:21::i;:::-;9927:94::o:0;45394:139::-;45454:13;45487:38;45493:7;45487:38;;;;;;;;;;;;;;;;;45515:9;45487:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;:38::i;:::-;45480:45;;45394:139;;;:::o;9276:87::-;9322:7;9349:6;;;;;;;;;;;9342:13;;9276:87;:::o;25704:104::-;25760:13;25793:7;25786:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25704:104;:::o;27387:295::-;27502:12;:10;:12::i;:::-;27490:24;;:8;:24;;;;27482:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27602:8;27557:18;:32;27576:12;:10;:12::i;:::-;27557:32;;;;;;;;;;;;;;;:42;27590:8;27557:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27655:8;27626:48;;27641:12;:10;:12::i;:::-;27626:48;;;27665:8;27626:48;;;;;;:::i;:::-;;;;;;;;27387:295;;:::o;28650:328::-;28825:41;28844:12;:10;:12::i;:::-;28858:7;28825:18;:41::i;:::-;28817:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28931:39;28945:4;28951:2;28955:7;28964:5;28931:13;:39::i;:::-;28650:328;;;;:::o;47815:1081::-;47880:13;47906:23;;:::i;:::-;47940:132;;;;;;;;;;;;;;;;;:5;47946:1;47940:8;;;;;;;;;;;;;;;;;;:132;;;;48096:21;48109:7;48096:12;:21::i;:::-;48085:5;48091:1;48085:8;;;;;;;;;;;;;;;;;;:32;;;;48130:100;;;;;;;;;;;;;;;;;:5;48136:1;48130:8;;;;;;;;;;;;;;;;;;:100;;;;48254:27;48273:7;48254:18;:27::i;:::-;48243:5;48249:1;48243:8;;;;;;;;;;;;;;;;;;:38;;;;48294:52;;;;;;;;;;;;;;;;;:5;48300:1;48294:8;;;;;;;;;;;;;;;;;;:52;;;;48370:13;48375:7;48370:4;:13::i;:::-;48359:5;48365:1;48359:8;;;;;;;;;;;;;;;;;;:24;;;;48396:26;;;;;;;;;;;;;;;;;:5;48402:1;48396:8;;;;;;;;;;;;;;;;;;:26;;;;48435:20;48482:5;48488:1;48482:8;;;;;;;;;;;;;;;;;;;48492:5;48498:1;48492:8;;;;;;;;;;;;;;;;;;;48502:5;48508:1;48502:8;;;;;;;;;;;;;;;;;;;48512:5;48518:1;48512:8;;;;;;;;;;;;;;;;;;;48522:5;48528:1;48522:8;;;;;;;;;;;;;;;;;;;48532:5;48538:1;48532:8;;;;;;;;;;;;;;;;;;;48542:5;48548:1;48542:8;;;;;;;;;;;;;;;;;;;48465:86;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48435:117;;48573:18;48594:185;48653:13;48658:7;48653:4;:13::i;:::-;48741:28;48761:6;48741:13;:28::i;:::-;48621:155;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48594:13;:185::i;:::-;48573:206;;48856:4;48806:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;48790:72;;48882:6;48875:13;;;;;47815:1081;;;:::o;27753:164::-;27850:4;27874:18;:25;27893:5;27874:25;;;;;;;;;;;;;;;:35;27900:8;27874:35;;;;;;;;;;;;;;;;;;;;;;;;;27867:42;;27753:164;;;;:::o;10176:192::-;9507:12;:10;:12::i;:::-;9496:23;;:7;:5;:7::i;:::-;:23;;;9488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10285:1:::1;10265:22;;:8;:22;;;;10257:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10341:19;10351:8;10341:9;:19::i;:::-;10176:192:::0;:::o;24590:305::-;24692:4;24744:25;24729:40;;;:11;:40;;;;:105;;;;24801:33;24786:48;;;:11;:48;;;;24729:105;:158;;;;24851:36;24875:11;24851:23;:36::i;:::-;24729:158;24709:178;;24590:305;;;:::o;30488:127::-;30553:4;30605:1;30577:30;;:7;:16;30585:7;30577:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30570:37;;30488:127;;;:::o;8136:98::-;8189:7;8216:10;8209:17;;8136:98;:::o;34470:174::-;34572:2;34545:15;:24;34561:7;34545:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34628:7;34624:2;34590:46;;34599:23;34614:7;34599:14;:23::i;:::-;34590:46;;;;;;;;;;;;34470:174;;:::o;30782:348::-;30875:4;30900:16;30908:7;30900;:16::i;:::-;30892:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30976:13;30992:23;31007:7;30992:14;:23::i;:::-;30976:39;;31045:5;31034:16;;:7;:16;;;:51;;;;31078:7;31054:31;;:20;31066:7;31054:11;:20::i;:::-;:31;;;31034:51;:87;;;;31089:32;31106:5;31113:7;31089:16;:32::i;:::-;31034:87;31026:96;;;30782:348;;;;:::o;33774:578::-;33933:4;33906:31;;:23;33921:7;33906:14;:23::i;:::-;:31;;;33898:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34016:1;34002:16;;:2;:16;;;;33994:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34072:39;34093:4;34099:2;34103:7;34072:20;:39::i;:::-;34176:29;34193:1;34197:7;34176:8;:29::i;:::-;34237:1;34218:9;:15;34228:4;34218:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34266:1;34249:9;:13;34259:2;34249:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34297:2;34278:7;:16;34286:7;34278:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34336:7;34332:2;34317:27;;34326:4;34317:27;;;;;;;;;;;;33774:578;;;:::o;31472:110::-;31548:26;31558:2;31562:7;31548:26;;;;;;;;;;;;:9;:26::i;:::-;31472:110;;:::o;45714:316::-;45823:13;45849:12;45864:62;45895:9;45906:17;45915:7;45906:8;:17::i;:::-;45878:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45864:6;:62::i;:::-;45849:77;;45937:20;45960:11;45979;:18;45972:4;:25;;;;:::i;:::-;45960:38;;;;;;;;;;;;;;;;;;;;;;45937:61;;46016:6;46009:13;;;;45714:316;;;;;:::o;10376:173::-;10432:16;10451:6;;;;;;;;;;;10432:25;;10477:8;10468:6;;:17;;;;;;;;;;;;;;;;;;10532:8;10501:40;;10522:8;10501:40;;;;;;;;;;;;10376:173;;:::o;29860:315::-;30017:28;30027:4;30033:2;30037:7;30017:9;:28::i;:::-;30064:48;30087:4;30093:2;30097:7;30106:5;30064:22;:48::i;:::-;30056:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29860:315;;;;:::o;46038:1769::-;46089:13;46115:20;46161:2;46150:7;:13;46146:1629;;46220:17;46229:7;46220:8;:17::i;:::-;46197:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;46180:59;;46146:1629;;;46268:7;46262:2;:13;;46261:34;;;;;46292:2;46281:7;:13;;46261:34;46257:1518;;;46351:22;46370:2;46360:7;:12;;;;:::i;:::-;46351:8;:22::i;:::-;46328:46;;;;;;;;:::i;:::-;;;;;;;;;;;;;46312:63;;46257:1518;;;46404:7;46398:2;:13;;46397:34;;;;;46428:2;46417:7;:13;;46397:34;46393:1382;;;46487:22;46506:2;46496:7;:12;;;;:::i;:::-;46487:8;:22::i;:::-;46464:46;;;;;;;;:::i;:::-;;;;;;;;;;;;;46448:63;;46393:1382;;;46540:7;46534:2;:13;;46533:35;;;;;46564:3;46553:7;:14;;46533:35;46529:1246;;;46624:22;46643:2;46633:7;:12;;;;:::i;:::-;46624:8;:22::i;:::-;46601:46;;;;;;;;:::i;:::-;;;;;;;;;;;;;46585:63;;46529:1246;;;46678:7;46671:3;:14;;46670:36;;;;;46702:3;46691:7;:14;;46670:36;46666:1109;;;46762:23;46781:3;46771:7;:13;;;;:::i;:::-;46762:8;:23::i;:::-;46739:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;46723:64;;46666:1109;;;46817:7;46810:3;:14;;46809:36;;;;;46841:3;46830:7;:14;;46809:36;46805:970;;;46901:23;46920:3;46910:7;:13;;;;:::i;:::-;46901:8;:23::i;:::-;46878:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;46862:64;;46805:970;;;46956:7;46949:3;:14;;46948:36;;;;;46980:3;46969:7;:14;;46948:36;46944:831;;;47040:23;47059:3;47049:7;:13;;;;:::i;:::-;47040:8;:23::i;:::-;47017:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;47001:64;;46944:831;;;47095:7;47088:3;:14;;47087:36;;;;;47119:3;47108:7;:14;;47087:36;47083:692;;;47179:23;47198:3;47188:7;:13;;;;:::i;:::-;47179:8;:23::i;:::-;47156:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;47140:64;;47083:692;;;47234:7;47227:3;:14;;47226:36;;;;;47258:3;47247:7;:14;;47226:36;47222:553;;;47318:23;47337:3;47327:7;:13;;;;:::i;:::-;47318:8;:23::i;:::-;47295:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;47279:64;;47222:553;;;47373:7;47366:3;:14;;47365:36;;;;;47397:3;47386:7;:14;;47365:36;47361:414;;;47458:23;47477:3;47467:7;:13;;;;:::i;:::-;47458:8;:23::i;:::-;47434:48;;;;;;;;:::i;:::-;;;;;;;;;;;;;47418:65;;47361:414;;;47513:7;47506:3;:14;;47505:36;;;;;47537:3;47526:7;:14;;47505:36;47501:274;;;47598:23;47617:3;47607:7;:13;;;;:::i;:::-;47598:8;:23::i;:::-;47574:48;;;;;;;;:::i;:::-;;;;;;;;;;;;;47558:65;;47501:274;;;47653:7;47646:3;:14;;47645:36;;;;;47677:3;47666:7;:14;;47645:36;47641:134;;;47738:23;47757:3;47747:7;:13;;;;:::i;:::-;47738:8;:23::i;:::-;47714:48;;;;;;;;:::i;:::-;;;;;;;;;;;;;47698:65;;47641:134;47501:274;47361:414;47222:553;47083:692;46944:831;46805:970;46666:1109;46529:1246;46393:1382;46257:1518;46146:1629;47793:6;47786:13;;;46038:1769;;;:::o;50217:1607::-;50275:13;50301:11;50315:4;:11;50301:25;;50348:1;50341:3;:8;50337:23;;;50351:9;;;;;;;;;;;;;;;;;50337:23;50412:18;50450:1;50445;50439:3;:7;;;;:::i;:::-;50438:13;;;;:::i;:::-;50433:1;:19;;;;:::i;:::-;50412:40;;50510:19;50555:2;50542:10;:15;;;;:::i;:::-;50532:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50510:48;;50571:18;50592:5;;;;;;;;;;;;;;;;;50571:26;;50661:1;50654:5;50650:13;50706:2;50698:6;50694:15;50757:1;50725:777;50780:3;50777:1;50774:10;50725:777;;;50835:1;50832;50828:9;50823:14;;50893:8;50888:1;50882:4;50878:12;50872:19;50868:34;50973:4;50965:5;50961:2;50957:14;50953:25;50943:8;50939:40;50933:47;51012:3;51009:1;51005:11;50998:18;;51103:4;51094;51086:5;51082:2;51078:14;51074:25;51064:8;51060:40;51054:47;51050:58;51045:3;51041:68;51034:75;;51141:3;51138:1;51134:11;51127:18;;51231:4;51222;51214:5;51211:1;51207:13;51203:24;51193:8;51189:39;51183:46;51179:57;51174:3;51170:67;51163:74;;51269:3;51266:1;51262:11;51255:18;;51351:4;51342;51335:5;51331:16;51321:8;51317:31;51311:38;51307:49;51302:3;51298:59;51291:66;;51391:3;51386;51382:13;51375:20;;51433:3;51422:9;51415:22;51485:1;51474:9;51470:17;51457:30;;50804:698;;50725:777;;;50729:44;51534:1;51529:3;51525:11;51555:1;51550:84;;;;51653:1;51648:82;;;;51518:212;;51550:84;51611:6;51606:3;51602:16;51598:1;51587:9;51583:17;51576:43;51550:84;;51648:82;51709:4;51704:3;51700:14;51696:1;51685:9;51681:17;51674:41;51518:212;;51761:10;51753:6;51746:26;50619:1164;;51809:6;51795:21;;;;;;50217:1607;;;;:::o;23197:157::-;23282:4;23321:25;23306:40;;;:11;:40;;;;23299:47;;23197:157;;;:::o;40097:589::-;40241:45;40268:4;40274:2;40278:7;40241:26;:45::i;:::-;40319:1;40303:18;;:4;:18;;;40299:187;;;40338:40;40370:7;40338:31;:40::i;:::-;40299:187;;;40408:2;40400:10;;:4;:10;;;40396:90;;40427:47;40460:4;40466:7;40427:32;:47::i;:::-;40396:90;40299:187;40514:1;40500:16;;:2;:16;;;40496:183;;;40533:45;40570:7;40533:36;:45::i;:::-;40496:183;;;40606:4;40600:10;;:2;:10;;;40596:83;;40627:40;40655:2;40659:7;40627:27;:40::i;:::-;40596:83;40496:183;40097:589;;;:::o;31809:321::-;31939:18;31945:2;31949:7;31939:5;:18::i;:::-;31990:54;32021:1;32025:2;32029:7;32038:5;31990:22;:54::i;:::-;31968:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31809:321;;;:::o;49087:715::-;49143:13;49365:1;49356:5;:10;49352:53;;;49383:10;;;;;;;;;;;;;;;;;;;;;49352:53;49415:12;49430:5;49415:20;;49446:14;49471:78;49486:1;49478:4;:9;49471:78;;49504:8;;;;;:::i;:::-;;;;49535:2;49527:10;;;;;:::i;:::-;;;49471:78;;;49559:19;49591:6;49581:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49559:39;;49609:154;49625:1;49616:5;:10;49609:154;;49653:1;49643:11;;;;;:::i;:::-;;;49720:2;49712:5;:10;;;;:::i;:::-;49699:2;:24;;;;:::i;:::-;49686:39;;49669:6;49676;49669:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;49749:2;49740:11;;;;;:::i;:::-;;;49609:154;;;49787:6;49773:21;;;;;49087:715;;;;:::o;45244:138::-;45304:7;45366:5;45349:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;45339:34;;;;;;45331:43;;45324:50;;45244:138;;;:::o;35209:803::-;35364:4;35385:15;:2;:13;;;:15::i;:::-;35381:624;;;35437:2;35421:36;;;35458:12;:10;:12::i;:::-;35472:4;35478:7;35487:5;35421:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35417:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35684:1;35667:6;:13;:18;35663:272;;;35710:60;;;;;;;;;;:::i;:::-;;;;;;;;35663:272;35885:6;35879:13;35870:6;35866:2;35862:15;35855:38;35417:533;35554:45;;;35544:55;;;:6;:55;;;;35537:62;;;;;35381:624;35989:4;35982:11;;35209:803;;;;;;;:::o;36584:126::-;;;;:::o;41409:164::-;41513:10;:17;;;;41486:15;:24;41502:7;41486:24;;;;;;;;;;;:44;;;;41541:10;41557:7;41541:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41409:164;:::o;42200:988::-;42466:22;42516:1;42491:22;42508:4;42491:16;:22::i;:::-;:26;;;;:::i;:::-;42466:51;;42528:18;42549:17;:26;42567:7;42549:26;;;;;;;;;;;;42528:47;;42696:14;42682:10;:28;42678:328;;42727:19;42749:12;:18;42762:4;42749:18;;;;;;;;;;;;;;;:34;42768:14;42749:34;;;;;;;;;;;;42727:56;;42833:11;42800:12;:18;42813:4;42800:18;;;;;;;;;;;;;;;:30;42819:10;42800:30;;;;;;;;;;;:44;;;;42950:10;42917:17;:30;42935:11;42917:30;;;;;;;;;;;:43;;;;42678:328;;43102:17;:26;43120:7;43102:26;;;;;;;;;;;43095:33;;;43146:12;:18;43159:4;43146:18;;;;;;;;;;;;;;;:34;43165:14;43146:34;;;;;;;;;;;43139:41;;;42200:988;;;;:::o;43483:1079::-;43736:22;43781:1;43761:10;:17;;;;:21;;;;:::i;:::-;43736:46;;43793:18;43814:15;:24;43830:7;43814:24;;;;;;;;;;;;43793:45;;44165:19;44187:10;44198:14;44187:26;;;;;;;;;;;;;;;;;;;;;;;;44165:48;;44251:11;44226:10;44237;44226:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;44362:10;44331:15;:28;44347:11;44331:28;;;;;;;;;;;:41;;;;44503:15;:24;44519:7;44503:24;;;;;;;;;;;44496:31;;;44538:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43483:1079;;;;:::o;40987:221::-;41072:14;41089:20;41106:2;41089:16;:20::i;:::-;41072:37;;41147:7;41120:12;:16;41133:2;41120:16;;;;;;;;;;;;;;;:24;41137:6;41120:24;;;;;;;;;;;:34;;;;41194:6;41165:17;:26;41183:7;41165:26;;;;;;;;;;;:35;;;;40987:221;;;:::o;32466:382::-;32560:1;32546:16;;:2;:16;;;;32538:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32619:16;32627:7;32619;:16::i;:::-;32618:17;32610:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32681:45;32710:1;32714:2;32718:7;32681:20;:45::i;:::-;32756:1;32739:9;:13;32749:2;32739:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32787:2;32768:7;:16;32776:7;32768:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32832:7;32828:2;32807:33;;32824:1;32807:33;;;;;;;;;;;;32466:382;;:::o;15369:387::-;15429:4;15637:12;15704:7;15692:20;15684:28;;15747:1;15740:4;:8;15733:15;;;15369:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:139::-;;439:6;426:20;417:29;;455:33;482:5;455:33;:::i;:::-;407:87;;;;:::o;500:133::-;;581:6;568:20;559:29;;597:30;621:5;597:30;:::i;:::-;549:84;;;;:::o;639:137::-;;722:6;709:20;700:29;;738:32;764:5;738:32;:::i;:::-;690:86;;;;:::o;782:141::-;;869:6;863:13;854:22;;885:32;911:5;885:32;:::i;:::-;844:79;;;;:::o;942:271::-;;1046:3;1039:4;1031:6;1027:17;1023:27;1013:2;;1064:1;1061;1054:12;1013:2;1104:6;1091:20;1129:78;1203:3;1195:6;1188:4;1180:6;1176:17;1129:78;:::i;:::-;1120:87;;1003:210;;;;;:::o;1219:139::-;;1303:6;1290:20;1281:29;;1319:33;1346:5;1319:33;:::i;:::-;1271:87;;;;:::o;1364:262::-;;1472:2;1460:9;1451:7;1447:23;1443:32;1440:2;;;1488:1;1485;1478:12;1440:2;1531:1;1556:53;1601:7;1592:6;1581:9;1577:22;1556:53;:::i;:::-;1546:63;;1502:117;1430:196;;;;:::o;1632:407::-;;;1757:2;1745:9;1736:7;1732:23;1728:32;1725:2;;;1773:1;1770;1763:12;1725:2;1816:1;1841:53;1886:7;1877:6;1866:9;1862:22;1841:53;:::i;:::-;1831:63;;1787:117;1943:2;1969:53;2014:7;2005:6;1994:9;1990:22;1969:53;:::i;:::-;1959:63;;1914:118;1715:324;;;;;:::o;2045:552::-;;;;2187:2;2175:9;2166:7;2162:23;2158:32;2155:2;;;2203:1;2200;2193:12;2155:2;2246:1;2271:53;2316:7;2307:6;2296:9;2292:22;2271:53;:::i;:::-;2261:63;;2217:117;2373:2;2399:53;2444:7;2435:6;2424:9;2420:22;2399:53;:::i;:::-;2389:63;;2344:118;2501:2;2527:53;2572:7;2563:6;2552:9;2548:22;2527:53;:::i;:::-;2517:63;;2472:118;2145:452;;;;;:::o;2603:809::-;;;;;2771:3;2759:9;2750:7;2746:23;2742:33;2739:2;;;2788:1;2785;2778:12;2739:2;2831:1;2856:53;2901:7;2892:6;2881:9;2877:22;2856:53;:::i;:::-;2846:63;;2802:117;2958:2;2984:53;3029:7;3020:6;3009:9;3005:22;2984:53;:::i;:::-;2974:63;;2929:118;3086:2;3112:53;3157:7;3148:6;3137:9;3133:22;3112:53;:::i;:::-;3102:63;;3057:118;3242:2;3231:9;3227:18;3214:32;3273:18;3265:6;3262:30;3259:2;;;3305:1;3302;3295:12;3259:2;3333:62;3387:7;3378:6;3367:9;3363:22;3333:62;:::i;:::-;3323:72;;3185:220;2729:683;;;;;;;:::o;3418:401::-;;;3540:2;3528:9;3519:7;3515:23;3511:32;3508:2;;;3556:1;3553;3546:12;3508:2;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:50;3794:7;3785:6;3774:9;3770:22;3752:50;:::i;:::-;3742:60;;3697:115;3498:321;;;;;:::o;3825:407::-;;;3950:2;3938:9;3929:7;3925:23;3921:32;3918:2;;;3966:1;3963;3956:12;3918:2;4009:1;4034:53;4079:7;4070:6;4059:9;4055:22;4034:53;:::i;:::-;4024:63;;3980:117;4136:2;4162:53;4207:7;4198:6;4187:9;4183:22;4162:53;:::i;:::-;4152:63;;4107:118;3908:324;;;;;:::o;4238:260::-;;4345:2;4333:9;4324:7;4320:23;4316:32;4313:2;;;4361:1;4358;4351:12;4313:2;4404:1;4429:52;4473:7;4464:6;4453:9;4449:22;4429:52;:::i;:::-;4419:62;;4375:116;4303:195;;;;:::o;4504:282::-;;4622:2;4610:9;4601:7;4597:23;4593:32;4590:2;;;4638:1;4635;4628:12;4590:2;4681:1;4706:63;4761:7;4752:6;4741:9;4737:22;4706:63;:::i;:::-;4696:73;;4652:127;4580:206;;;;:::o;4792:262::-;;4900:2;4888:9;4879:7;4875:23;4871:32;4868:2;;;4916:1;4913;4906:12;4868:2;4959:1;4984:53;5029:7;5020:6;5009:9;5005:22;4984:53;:::i;:::-;4974:63;;4930:117;4858:196;;;;:::o;5060:118::-;5147:24;5165:5;5147:24;:::i;:::-;5142:3;5135:37;5125:53;;:::o;5184:109::-;5265:21;5280:5;5265:21;:::i;:::-;5260:3;5253:34;5243:50;;:::o;5299:360::-;;5413:38;5445:5;5413:38;:::i;:::-;5467:70;5530:6;5525:3;5467:70;:::i;:::-;5460:77;;5546:52;5591:6;5586:3;5579:4;5572:5;5568:16;5546:52;:::i;:::-;5623:29;5645:6;5623:29;:::i;:::-;5618:3;5614:39;5607:46;;5389:270;;;;;:::o;5665:364::-;;5781:39;5814:5;5781:39;:::i;:::-;5836:71;5900:6;5895:3;5836:71;:::i;:::-;5829:78;;5916:52;5961:6;5956:3;5949:4;5942:5;5938:16;5916:52;:::i;:::-;5993:29;6015:6;5993:29;:::i;:::-;5988:3;5984:39;5977:46;;5757:272;;;;;:::o;6035:377::-;;6169:39;6202:5;6169:39;:::i;:::-;6224:89;6306:6;6301:3;6224:89;:::i;:::-;6217:96;;6322:52;6367:6;6362:3;6355:4;6348:5;6344:16;6322:52;:::i;:::-;6399:6;6394:3;6390:16;6383:23;;6145:267;;;;;:::o;6418:334::-;;6599:84;6681:1;6676:3;6599:84;:::i;:::-;6592:91;;6713:4;6709:1;6704:3;6700:11;6693:25;6744:1;6739:3;6735:11;6728:18;;6582:170;;;:::o;6758:375::-;;6921:67;6985:2;6980:3;6921:67;:::i;:::-;6914:74;;7018:34;7014:1;7009:3;7005:11;6998:55;7084:13;7079:2;7074:3;7070:12;7063:35;7124:2;7119:3;7115:12;7108:19;;6904:229;;;:::o;7139:382::-;;7302:67;7366:2;7361:3;7302:67;:::i;:::-;7295:74;;7399:34;7395:1;7390:3;7386:11;7379:55;7465:20;7460:2;7455:3;7451:12;7444:42;7512:2;7507:3;7503:12;7496:19;;7285:236;;;:::o;7527:370::-;;7690:67;7754:2;7749:3;7690:67;:::i;:::-;7683:74;;7787:34;7783:1;7778:3;7774:11;7767:55;7853:8;7848:2;7843:3;7839:12;7832:30;7888:2;7883:3;7879:12;7872:19;;7673:224;;;:::o;7903:326::-;;8066:67;8130:2;8125:3;8066:67;:::i;:::-;8059:74;;8163:30;8159:1;8154:3;8150:11;8143:51;8220:2;8215:3;8211:12;8204:19;;8049:180;;;:::o;8235:334::-;;8416:84;8498:1;8493:3;8416:84;:::i;:::-;8409:91;;8530:4;8526:1;8521:3;8517:11;8510:25;8561:1;8556:3;8552:11;8545:18;;8399:170;;;:::o;8575:368::-;;8738:67;8802:2;8797:3;8738:67;:::i;:::-;8731:74;;8835:34;8831:1;8826:3;8822:11;8815:55;8901:6;8896:2;8891:3;8887:12;8880:28;8934:2;8929:3;8925:12;8918:19;;8721:222;;;:::o;8949:323::-;;9112:67;9176:2;9171:3;9112:67;:::i;:::-;9105:74;;9209:27;9205:1;9200:3;9196:11;9189:48;9263:2;9258:3;9254:12;9247:19;;9095:177;;;:::o;9278:334::-;;9459:84;9541:1;9536:3;9459:84;:::i;:::-;9452:91;;9573:4;9569:1;9564:3;9560:11;9553:25;9604:1;9599:3;9595:11;9588:18;;9442:170;;;:::o;9618:334::-;;9799:84;9881:1;9876:3;9799:84;:::i;:::-;9792:91;;9913:4;9909:1;9904:3;9900:11;9893:25;9944:1;9939:3;9935:11;9928:18;;9782:170;;;:::o;9958:398::-;;10139:85;10221:2;10216:3;10139:85;:::i;:::-;10132:92;;10254:66;10250:1;10245:3;10241:11;10234:87;10347:2;10342:3;10338:12;10331:19;;10122:234;;;:::o;10362:376::-;;10525:67;10589:2;10584:3;10525:67;:::i;:::-;10518:74;;10622:34;10618:1;10613:3;10609:11;10602:55;10688:14;10683:2;10678:3;10674:12;10667:36;10729:2;10724:3;10720:12;10713:19;;10508:230;;;:::o;10744:334::-;;10925:84;11007:1;11002:3;10925:84;:::i;:::-;10918:91;;11039:4;11035:1;11030:3;11026:11;11019:25;11070:1;11065:3;11061:11;11054:18;;10908:170;;;:::o;11084:388::-;;11247:67;11311:2;11306:3;11247:67;:::i;:::-;11240:74;;11344:34;11340:1;11335:3;11331:11;11324:55;11410:26;11405:2;11400:3;11396:12;11389:48;11463:2;11458:3;11454:12;11447:19;;11230:242;;;:::o;11478:374::-;;11641:67;11705:2;11700:3;11641:67;:::i;:::-;11634:74;;11738:34;11734:1;11729:3;11725:11;11718:55;11804:12;11799:2;11794:3;11790:12;11783:34;11843:2;11838:3;11834:12;11827:19;;11624:228;;;:::o;11858:373::-;;12021:67;12085:2;12080:3;12021:67;:::i;:::-;12014:74;;12118:34;12114:1;12109:3;12105:11;12098:55;12184:11;12179:2;12174:3;12170:12;12163:33;12222:2;12217:3;12213:12;12206:19;;12004:227;;;:::o;12237:396::-;;12418:84;12500:1;12495:3;12418:84;:::i;:::-;12411:91;;12532:66;12528:1;12523:3;12519:11;12512:87;12625:1;12620:3;12616:11;12609:18;;12401:232;;;:::o;12639:330::-;;12802:67;12866:2;12861:3;12802:67;:::i;:::-;12795:74;;12899:34;12895:1;12890:3;12886:11;12879:55;12960:2;12955:3;12951:12;12944:19;;12785:184;;;:::o;12975:335::-;;13156:84;13238:1;13233:3;13156:84;:::i;:::-;13149:91;;13270:5;13266:1;13261:3;13257:11;13250:26;13302:1;13297:3;13293:11;13286:18;;13139:171;;;:::o;13316:376::-;;13479:67;13543:2;13538:3;13479:67;:::i;:::-;13472:74;;13576:34;13572:1;13567:3;13563:11;13556:55;13642:14;13637:2;13632:3;13628:12;13621:36;13683:2;13678:3;13674:12;13667:19;;13462:230;;;:::o;13698:334::-;;13879:84;13961:1;13956:3;13879:84;:::i;:::-;13872:91;;13993:4;13989:1;13984:3;13980:11;13973:25;14024:1;14019:3;14015:11;14008:18;;13862:170;;;:::o;14038:330::-;;14201:67;14265:2;14260:3;14201:67;:::i;:::-;14194:74;;14298:34;14294:1;14289:3;14285:11;14278:55;14359:2;14354:3;14350:12;14343:19;;14184:184;;;:::o;14374:314::-;;14537:67;14601:2;14596:3;14537:67;:::i;:::-;14530:74;;14634:18;14630:1;14625:3;14621:11;14614:39;14679:2;14674:3;14670:12;14663:19;;14520:168;;;:::o;14694:334::-;;14875:84;14957:1;14952:3;14875:84;:::i;:::-;14868:91;;14989:4;14985:1;14980:3;14976:11;14969:25;15020:1;15015:3;15011:11;15004:18;;14858:170;;;:::o;15034:373::-;;15197:67;15261:2;15256:3;15197:67;:::i;:::-;15190:74;;15294:34;15290:1;15285:3;15281:11;15274:55;15360:11;15355:2;15350:3;15346:12;15339:33;15398:2;15393:3;15389:12;15382:19;;15180:227;;;:::o;15413:334::-;;15594:84;15676:1;15671:3;15594:84;:::i;:::-;15587:91;;15708:4;15704:1;15699:3;15695:11;15688:25;15739:1;15734:3;15730:11;15723:18;;15577:170;;;:::o;15753:335::-;;15934:84;16016:1;16011:3;15934:84;:::i;:::-;15927:91;;16048:5;16044:1;16039:3;16035:11;16028:26;16080:1;16075:3;16071:11;16064:18;;15917:171;;;:::o;16094:365::-;;16257:67;16321:2;16316:3;16257:67;:::i;:::-;16250:74;;16354:34;16350:1;16345:3;16341:11;16334:55;16420:3;16415:2;16410:3;16406:12;16399:25;16450:2;16445:3;16441:12;16434:19;;16240:219;;;:::o;16465:363::-;;16646:85;16728:2;16723:3;16646:85;:::i;:::-;16639:92;;16761:31;16757:1;16752:3;16748:11;16741:52;16819:2;16814:3;16810:12;16803:19;;16629:199;;;:::o;16834:381::-;;16997:67;17061:2;17056:3;16997:67;:::i;:::-;16990:74;;17094:34;17090:1;17085:3;17081:11;17074:55;17160:19;17155:2;17150:3;17146:12;17139:41;17206:2;17201:3;17197:12;17190:19;;16980:235;;;:::o;17221:335::-;;17402:84;17484:1;17479:3;17402:84;:::i;:::-;17395:91;;17516:5;17512:1;17507:3;17503:11;17496:26;17548:1;17543:3;17539:11;17532:18;;17385:171;;;:::o;17562:376::-;;17725:67;17789:2;17784:3;17725:67;:::i;:::-;17718:74;;17822:34;17818:1;17813:3;17809:11;17802:55;17888:14;17883:2;17878:3;17874:12;17867:36;17929:2;17924:3;17920:12;17913:19;;17708:230;;;:::o;17944:535::-;;18125:85;18207:2;18202:3;18125:85;:::i;:::-;18118:92;;18240:66;18236:1;18231:3;18227:11;18220:87;18338:66;18333:2;18328:3;18324:12;18317:88;18436:7;18431:2;18426:3;18422:12;18415:29;18470:2;18465:3;18461:12;18454:19;;18108:371;;;:::o;18485:329::-;;18648:67;18712:2;18707:3;18648:67;:::i;:::-;18641:74;;18745:33;18741:1;18736:3;18732:11;18725:54;18805:2;18800:3;18796:12;18789:19;;18631:183;;;:::o;18820:334::-;;19001:84;19083:1;19078:3;19001:84;:::i;:::-;18994:91;;19115:4;19111:1;19106:3;19102:11;19095:25;19146:1;19141:3;19137:11;19130:18;;18984:170;;;:::o;19160:118::-;19247:24;19265:5;19247:24;:::i;:::-;19242:3;19235:37;19225:53;;:::o;19284:275::-;;19438:95;19529:3;19520:6;19438:95;:::i;:::-;19431:102;;19550:3;19543:10;;19420:139;;;;:::o;19565:435::-;;19767:95;19858:3;19849:6;19767:95;:::i;:::-;19760:102;;19879:95;19970:3;19961:6;19879:95;:::i;:::-;19872:102;;19991:3;19984:10;;19749:251;;;;;:::o;20006:1235::-;;20448:95;20539:3;20530:6;20448:95;:::i;:::-;20441:102;;20560:95;20651:3;20642:6;20560:95;:::i;:::-;20553:102;;20672:95;20763:3;20754:6;20672:95;:::i;:::-;20665:102;;20784:95;20875:3;20866:6;20784:95;:::i;:::-;20777:102;;20896:95;20987:3;20978:6;20896:95;:::i;:::-;20889:102;;21008:95;21099:3;21090:6;21008:95;:::i;:::-;21001:102;;21120:95;21211:3;21202:6;21120:95;:::i;:::-;21113:102;;21232:3;21225:10;;20430:811;;;;;;;;;;:::o;21247:541::-;;21502:148;21646:3;21502:148;:::i;:::-;21495:155;;21667:95;21758:3;21749:6;21667:95;:::i;:::-;21660:102;;21779:3;21772:10;;21484:304;;;;:::o;21794:541::-;;22049:148;22193:3;22049:148;:::i;:::-;22042:155;;22214:95;22305:3;22296:6;22214:95;:::i;:::-;22207:102;;22326:3;22319:10;;22031:304;;;;:::o;22341:541::-;;22596:148;22740:3;22596:148;:::i;:::-;22589:155;;22761:95;22852:3;22843:6;22761:95;:::i;:::-;22754:102;;22873:3;22866:10;;22578:304;;;;:::o;22888:541::-;;23143:148;23287:3;23143:148;:::i;:::-;23136:155;;23308:95;23399:3;23390:6;23308:95;:::i;:::-;23301:102;;23420:3;23413:10;;23125:304;;;;:::o;23435:1233::-;;23940:148;24084:3;23940:148;:::i;:::-;23933:155;;24105:95;24196:3;24187:6;24105:95;:::i;:::-;24098:102;;24217:148;24361:3;24217:148;:::i;:::-;24210:155;;24382:95;24473:3;24464:6;24382:95;:::i;:::-;24375:102;;24494:148;24638:3;24494:148;:::i;:::-;24487:155;;24659:3;24652:10;;23922:746;;;;;:::o;24674:541::-;;24929:148;25073:3;24929:148;:::i;:::-;24922:155;;25094:95;25185:3;25176:6;25094:95;:::i;:::-;25087:102;;25206:3;25199:10;;24911:304;;;;:::o;25221:541::-;;25476:148;25620:3;25476:148;:::i;:::-;25469:155;;25641:95;25732:3;25723:6;25641:95;:::i;:::-;25634:102;;25753:3;25746:10;;25458:304;;;;:::o;25768:541::-;;26023:148;26167:3;26023:148;:::i;:::-;26016:155;;26188:95;26279:3;26270:6;26188:95;:::i;:::-;26181:102;;26300:3;26293:10;;26005:304;;;;:::o;26315:541::-;;26570:148;26714:3;26570:148;:::i;:::-;26563:155;;26735:95;26826:3;26817:6;26735:95;:::i;:::-;26728:102;;26847:3;26840:10;;26552:304;;;;:::o;26862:541::-;;27117:148;27261:3;27117:148;:::i;:::-;27110:155;;27282:95;27373:3;27364:6;27282:95;:::i;:::-;27275:102;;27394:3;27387:10;;27099:304;;;;:::o;27409:541::-;;27664:148;27808:3;27664:148;:::i;:::-;27657:155;;27829:95;27920:3;27911:6;27829:95;:::i;:::-;27822:102;;27941:3;27934:10;;27646:304;;;;:::o;27956:541::-;;28211:148;28355:3;28211:148;:::i;:::-;28204:155;;28376:95;28467:3;28458:6;28376:95;:::i;:::-;28369:102;;28488:3;28481:10;;28193:304;;;;:::o;28503:541::-;;28758:148;28902:3;28758:148;:::i;:::-;28751:155;;28923:95;29014:3;29005:6;28923:95;:::i;:::-;28916:102;;29035:3;29028:10;;28740:304;;;;:::o;29050:541::-;;29305:148;29449:3;29305:148;:::i;:::-;29298:155;;29470:95;29561:3;29552:6;29470:95;:::i;:::-;29463:102;;29582:3;29575:10;;29287:304;;;;:::o;29597:222::-;;29728:2;29717:9;29713:18;29705:26;;29741:71;29809:1;29798:9;29794:17;29785:6;29741:71;:::i;:::-;29695:124;;;;:::o;29825:640::-;;30058:3;30047:9;30043:19;30035:27;;30072:71;30140:1;30129:9;30125:17;30116:6;30072:71;:::i;:::-;30153:72;30221:2;30210:9;30206:18;30197:6;30153:72;:::i;:::-;30235;30303:2;30292:9;30288:18;30279:6;30235:72;:::i;:::-;30354:9;30348:4;30344:20;30339:2;30328:9;30324:18;30317:48;30382:76;30453:4;30444:6;30382:76;:::i;:::-;30374:84;;30025:440;;;;;;;:::o;30471:210::-;;30596:2;30585:9;30581:18;30573:26;;30609:65;30671:1;30660:9;30656:17;30647:6;30609:65;:::i;:::-;30563:118;;;;:::o;30687:313::-;;30838:2;30827:9;30823:18;30815:26;;30887:9;30881:4;30877:20;30873:1;30862:9;30858:17;30851:47;30915:78;30988:4;30979:6;30915:78;:::i;:::-;30907:86;;30805:195;;;;:::o;31006:419::-;;31210:2;31199:9;31195:18;31187:26;;31259:9;31253:4;31249:20;31245:1;31234:9;31230:17;31223:47;31287:131;31413:4;31287:131;:::i;:::-;31279:139;;31177:248;;;:::o;31431:419::-;;31635:2;31624:9;31620:18;31612:26;;31684:9;31678:4;31674:20;31670:1;31659:9;31655:17;31648:47;31712:131;31838:4;31712:131;:::i;:::-;31704:139;;31602:248;;;:::o;31856:419::-;;32060:2;32049:9;32045:18;32037:26;;32109:9;32103:4;32099:20;32095:1;32084:9;32080:17;32073:47;32137:131;32263:4;32137:131;:::i;:::-;32129:139;;32027:248;;;:::o;32281:419::-;;32485:2;32474:9;32470:18;32462:26;;32534:9;32528:4;32524:20;32520:1;32509:9;32505:17;32498:47;32562:131;32688:4;32562:131;:::i;:::-;32554:139;;32452:248;;;:::o;32706:419::-;;32910:2;32899:9;32895:18;32887:26;;32959:9;32953:4;32949:20;32945:1;32934:9;32930:17;32923:47;32987:131;33113:4;32987:131;:::i;:::-;32979:139;;32877:248;;;:::o;33131:419::-;;33335:2;33324:9;33320:18;33312:26;;33384:9;33378:4;33374:20;33370:1;33359:9;33355:17;33348:47;33412:131;33538:4;33412:131;:::i;:::-;33404:139;;33302:248;;;:::o;33556:419::-;;33760:2;33749:9;33745:18;33737:26;;33809:9;33803:4;33799:20;33795:1;33784:9;33780:17;33773:47;33837:131;33963:4;33837:131;:::i;:::-;33829:139;;33727:248;;;:::o;33981:419::-;;34185:2;34174:9;34170:18;34162:26;;34234:9;34228:4;34224:20;34220:1;34209:9;34205:17;34198:47;34262:131;34388:4;34262:131;:::i;:::-;34254:139;;34152:248;;;:::o;34406:419::-;;34610:2;34599:9;34595:18;34587:26;;34659:9;34653:4;34649:20;34645:1;34634:9;34630:17;34623:47;34687:131;34813:4;34687:131;:::i;:::-;34679:139;;34577:248;;;:::o;34831:419::-;;35035:2;35024:9;35020:18;35012:26;;35084:9;35078:4;35074:20;35070:1;35059:9;35055:17;35048:47;35112:131;35238:4;35112:131;:::i;:::-;35104:139;;35002:248;;;:::o;35256:419::-;;35460:2;35449:9;35445:18;35437:26;;35509:9;35503:4;35499:20;35495:1;35484:9;35480:17;35473:47;35537:131;35663:4;35537:131;:::i;:::-;35529:139;;35427:248;;;:::o;35681:419::-;;35885:2;35874:9;35870:18;35862:26;;35934:9;35928:4;35924:20;35920:1;35909:9;35905:17;35898:47;35962:131;36088:4;35962:131;:::i;:::-;35954:139;;35852:248;;;:::o;36106:419::-;;36310:2;36299:9;36295:18;36287:26;;36359:9;36353:4;36349:20;36345:1;36334:9;36330:17;36323:47;36387:131;36513:4;36387:131;:::i;:::-;36379:139;;36277:248;;;:::o;36531:419::-;;36735:2;36724:9;36720:18;36712:26;;36784:9;36778:4;36774:20;36770:1;36759:9;36755:17;36748:47;36812:131;36938:4;36812:131;:::i;:::-;36804:139;;36702:248;;;:::o;36956:419::-;;37160:2;37149:9;37145:18;37137:26;;37209:9;37203:4;37199:20;37195:1;37184:9;37180:17;37173:47;37237:131;37363:4;37237:131;:::i;:::-;37229:139;;37127:248;;;:::o;37381:419::-;;37585:2;37574:9;37570:18;37562:26;;37634:9;37628:4;37624:20;37620:1;37609:9;37605:17;37598:47;37662:131;37788:4;37662:131;:::i;:::-;37654:139;;37552:248;;;:::o;37806:419::-;;38010:2;37999:9;37995:18;37987:26;;38059:9;38053:4;38049:20;38045:1;38034:9;38030:17;38023:47;38087:131;38213:4;38087:131;:::i;:::-;38079:139;;37977:248;;;:::o;38231:419::-;;38435:2;38424:9;38420:18;38412:26;;38484:9;38478:4;38474:20;38470:1;38459:9;38455:17;38448:47;38512:131;38638:4;38512:131;:::i;:::-;38504:139;;38402:248;;;:::o;38656:419::-;;38860:2;38849:9;38845:18;38837:26;;38909:9;38903:4;38899:20;38895:1;38884:9;38880:17;38873:47;38937:131;39063:4;38937:131;:::i;:::-;38929:139;;38827:248;;;:::o;39081:222::-;;39212:2;39201:9;39197:18;39189:26;;39225:71;39293:1;39282:9;39278:17;39269:6;39225:71;:::i;:::-;39179:124;;;;:::o;39309:283::-;;39375:2;39369:9;39359:19;;39417:4;39409:6;39405:17;39524:6;39512:10;39509:22;39488:18;39476:10;39473:34;39470:62;39467:2;;;39535:18;;:::i;:::-;39467:2;39575:10;39571:2;39564:22;39349:243;;;;:::o;39598:331::-;;39749:18;39741:6;39738:30;39735:2;;;39771:18;;:::i;:::-;39735:2;39856:4;39852:9;39845:4;39837:6;39833:17;39829:33;39821:41;;39917:4;39911;39907:15;39899:23;;39664:265;;;:::o;39935:98::-;;40020:5;40014:12;40004:22;;39993:40;;;:::o;40039:99::-;;40125:5;40119:12;40109:22;;40098:40;;;:::o;40144:168::-;;40261:6;40256:3;40249:19;40301:4;40296:3;40292:14;40277:29;;40239:73;;;;:::o;40318:169::-;;40436:6;40431:3;40424:19;40476:4;40471:3;40467:14;40452:29;;40414:73;;;;:::o;40493:148::-;;40632:3;40617:18;;40607:34;;;;:::o;40647:305::-;;40706:20;40724:1;40706:20;:::i;:::-;40701:25;;40740:20;40758:1;40740:20;:::i;:::-;40735:25;;40894:1;40826:66;40822:74;40819:1;40816:81;40813:2;;;40900:18;;:::i;:::-;40813:2;40944:1;40941;40937:9;40930:16;;40691:261;;;;:::o;40958:185::-;;41015:20;41033:1;41015:20;:::i;:::-;41010:25;;41049:20;41067:1;41049:20;:::i;:::-;41044:25;;41088:1;41078:2;;41093:18;;:::i;:::-;41078:2;41135:1;41132;41128:9;41123:14;;41000:143;;;;:::o;41149:348::-;;41212:20;41230:1;41212:20;:::i;:::-;41207:25;;41246:20;41264:1;41246:20;:::i;:::-;41241:25;;41434:1;41366:66;41362:74;41359:1;41356:81;41351:1;41344:9;41337:17;41333:105;41330:2;;;41441:18;;:::i;:::-;41330:2;41489:1;41486;41482:9;41471:20;;41197:300;;;;:::o;41503:191::-;;41563:20;41581:1;41563:20;:::i;:::-;41558:25;;41597:20;41615:1;41597:20;:::i;:::-;41592:25;;41636:1;41633;41630:8;41627:2;;;41641:18;;:::i;:::-;41627:2;41686:1;41683;41679:9;41671:17;;41548:146;;;;:::o;41700:96::-;;41766:24;41784:5;41766:24;:::i;:::-;41755:35;;41745:51;;;:::o;41802:90::-;;41879:5;41872:13;41865:21;41854:32;;41844:48;;;:::o;41898:149::-;;41974:66;41967:5;41963:78;41952:89;;41942:105;;;:::o;42053:126::-;;42130:42;42123:5;42119:54;42108:65;;42098:81;;;:::o;42185:77::-;;42251:5;42240:16;;42230:32;;;:::o;42268:154::-;42352:6;42347:3;42342;42329:30;42414:1;42405:6;42400:3;42396:16;42389:27;42319:103;;;:::o;42428:307::-;42496:1;42506:113;42520:6;42517:1;42514:13;42506:113;;;42605:1;42600:3;42596:11;42590:18;42586:1;42581:3;42577:11;42570:39;42542:2;42539:1;42535:10;42530:15;;42506:113;;;42637:6;42634:1;42631:13;42628:2;;;42717:1;42708:6;42703:3;42699:16;42692:27;42628:2;42477:258;;;;:::o;42741:320::-;;42822:1;42816:4;42812:12;42802:22;;42869:1;42863:4;42859:12;42890:18;42880:2;;42946:4;42938:6;42934:17;42924:27;;42880:2;43008;43000:6;42997:14;42977:18;42974:38;42971:2;;;43027:18;;:::i;:::-;42971:2;42792:269;;;;:::o;43067:233::-;;43129:24;43147:5;43129:24;:::i;:::-;43120:33;;43175:66;43168:5;43165:77;43162:2;;;43245:18;;:::i;:::-;43162:2;43292:1;43285:5;43281:13;43274:20;;43110:190;;;:::o;43306:176::-;;43355:20;43373:1;43355:20;:::i;:::-;43350:25;;43389:20;43407:1;43389:20;:::i;:::-;43384:25;;43428:1;43418:2;;43433:18;;:::i;:::-;43418:2;43474:1;43471;43467:9;43462:14;;43340:142;;;;:::o;43488:180::-;43536:77;43533:1;43526:88;43633:4;43630:1;43623:15;43657:4;43654:1;43647:15;43674:180;43722:77;43719:1;43712:88;43819:4;43816:1;43809:15;43843:4;43840:1;43833:15;43860:180;43908:77;43905:1;43898:88;44005:4;44002:1;43995:15;44029:4;44026:1;44019:15;44046:180;44094:77;44091:1;44084:88;44191:4;44188:1;44181:15;44215:4;44212:1;44205:15;44232:102;;44324:2;44320:7;44315:2;44308:5;44304:14;44300:28;44290:38;;44280:54;;;:::o;44340:122::-;44413:24;44431:5;44413:24;:::i;:::-;44406:5;44403:35;44393:2;;44452:1;44449;44442:12;44393:2;44383:79;:::o;44468:116::-;44538:21;44553:5;44538:21;:::i;:::-;44531:5;44528:32;44518:2;;44574:1;44571;44564:12;44518:2;44508:76;:::o;44590:120::-;44662:23;44679:5;44662:23;:::i;:::-;44655:5;44652:34;44642:2;;44700:1;44697;44690:12;44642:2;44632:78;:::o;44716:122::-;44789:24;44807:5;44789:24;:::i;:::-;44782:5;44779:35;44769:2;;44828:1;44825;44818:12;44769:2;44759:79;:::o
Swarm Source
ipfs://1d21736616f5fc90c0d08d621fa08f1b0188fe5b11a5f3fc90a68eee4e8a052d
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|