Contract
0x15c115f72e4da34054e28fc308be7fbd4b577684
2
Contract Overview
Balance:
0 AVAX
AVAX Value:
$0.00
[ Download CSV Export ]
Contract Name:
Airbus
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at snowtrace.io on 2022-10-07 */ // Sources flattened with hardhat v2.4.1 https://hardhat.org // File @openzeppelin/contracts/utils/math/[email protected] // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File @openzeppelin/contracts/access/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping (uint256 => address) private _owners; // Mapping owner address to token count mapping (address => uint256) private _balances; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. 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 { // solhint-disable-next-line no-inline-assembly 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` 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 { } } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File @openzeppelin/contracts-upgradeable/proxy/utils/[email protected] pragma solidity ^0.8.0; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } } // File @openzeppelin/contracts-upgradeable/utils/[email protected] pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract ContextUpgradeable is Initializable { function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } uint256[50] private __gap; } // File @openzeppelin/contracts-upgradeable/access/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { _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); } uint256[49] private __gap; } // File contracts/EIP2981Royalties/IERC2981Royalties.sol pragma solidity 0.8.7; /// @title IERC2981Royalties /// @dev Interface for the ERC2981 - Token Royalty standard interface IERC2981Royalties { /// @notice Called with the sale price to determine how much royalty // is owed and to whom. /// @param _tokenId - the NFT asset queried for royalty information /// @param _value - the sale price of the NFT asset specified by _tokenId /// @return _receiver - address of who should be sent the royalty payment /// @return _royaltyAmount - the royalty payment amount for value sale price function royaltyInfo(uint256 _tokenId, uint256 _value) external view returns (address _receiver, uint256 _royaltyAmount); } // File contracts/EIP2981Royalties/ERC2981Base.sol pragma solidity ^0.8.0; /// @dev This is a contract used to add ERC2981 support to ERC721 and 1155 abstract contract ERC2981Base is ERC165, IERC2981Royalties { struct RoyaltyInfo { address recipient; uint24 amount; } /// @inheritdoc ERC165 function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC2981Royalties).interfaceId || super.supportsInterface(interfaceId); } } // File contracts/EIP2981Royalties/ERC2981ContractWideRoyalties.sol pragma solidity ^0.8.0; /// @dev This is a contract used to add ERC2981 support to ERC721 and 1155 /// @dev This implementation has the same royalties for each and every tokens abstract contract ERC2981ContractWideRoyalties is ERC2981Base { RoyaltyInfo private _royalties; /// @dev Sets token royalties /// @param recipient recipient of the royalties /// @param value percentage (using 2 decimals - 10000 = 100, 0 = 0) function _setRoyalties(address recipient, uint256 value) internal { require(value <= 10000, 'ERC2981Royalties: Too high'); _royalties = RoyaltyInfo(recipient, uint24(value)); } /// @inheritdoc IERC2981Royalties function royaltyInfo(uint256, uint256 value) external view override returns (address receiver, uint256 royaltyAmount) { RoyaltyInfo memory royalties = _royalties; receiver = royalties.recipient; royaltyAmount = (value * royalties.amount) / 10000; } } // File contracts/Airbus.sol pragma solidity ^0.8.7; /** * @title RACER by AirbusHelicopters * RACER by AirbusHelicopters */ contract Airbus is ERC721Enumerable, ERC2981ContractWideRoyalties, Ownable { using SafeMath for uint256; uint256 private _currentTokenId; //Forwarder singleton we accept calls from address public trustedForwarder; ////////////////////////// uint256 public constant MAX_SUPPLY = 21000; string public constant ARTIST_NAME = "GIO MANETTA"; address public constant ARTIST_WALLET = 0xEEC675Eab2995D968E19Fd43949666f86bF50c29; string public constant ARTIST_BIO = "French Air Force Artist - Peintre de l'air et de l'espace - Car designer"; string public constant ARTIST_EMAIL = "[email protected]"; string public constant DESCRIPTION = "The RACER artwork, made by the artist Gio Manetta, celebrates the 30th anniversary of Airbus Helicopters. Airbus Helicopters and its employees keep on pioneering sustainable aerospace for a safe and united world."; string public constant TERMS_IPFS_HASH = "QmeAUuZswjPmWB7tm4jwG7pVBniA7J7NktwWE8n2eNcyMC"; string public constant IMAGE_IPFS_HASH = "QmTKJsBLVD6u5XqQJWUkdLW5aLv2UN8M1DkWe7Cc3RxqJr"; string public constant TERMS_ARWEAVE_HASH = "iCQbCPvA2kC5c0USV8QYcLDOs20yh7e_8B3ZkhtiUwQ"; string public constant IMAGE_ARWEAVE_HASH = "fSXG0uqsAxECuTBhyK8dd9z6EVu72zTiEZrlhOYoXSA"; string public constant TERMS_SHA256_HASH_PROVENANCE = "2b09e63451b3008af15758d7fd43c7cb2dae7097413df76d2a6223cfbacc4f27"; string public constant IMAGE_SHA256_HASH_PROVENANCE = "0970ac84994a8026d2bf96afd240a0c1747a8660bedfc5606249b96cd8c1d3b8"; string public txHashImgData; bool public termsDataLocked = false; bool public imgDataLocked = false; bool public mintLocked = false; string public jsonForFetchingOnly = "https://fetch.opengem.com/airbus/metadata.json"; string public termsForFetchingOnly = "https://fetch.opengem.com/airbus/assets/terms.pdf"; event Data(string imagedata); /////////////////////////// constructor(string memory _name, string memory _symbol, address forwarder) ERC721(_name, _symbol) { _setRoyalties(ARTIST_WALLET, 700); _currentTokenId = 0; trustedForwarder = forwarder; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC2981Base, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } function isTrustedForwarder(address forwarder) public view returns (bool) { return forwarder == trustedForwarder; } /** * return the sender of this call. * if the call came through our trusted forwarder, return the original sender. * otherwise, return `msg.sender`. * should be used in the contract anywhere instead of msg.sender */ function _msgSender() internal override view returns (address ret) { if (msg.data.length >= 20 && isTrustedForwarder(msg.sender)) { // At this point we know that the sender is a trusted forwarder, // so we trust that the last bytes of msg.data are the verified sender address. // extract sender address from the end of msg.data assembly { ret := shr(96, calldataload(sub(calldatasize(), 20))) } } else { return payable(msg.sender); } } /** * return the msg.data of this call. * if the call came through our trusted forwarder, then the real sender was appended as the last 20 bytes * of the msg.data - so this method will strip those 20 bytes off. * otherwise, return `msg.data` * should be used in the contract instead of msg.data, where the difference matters (e.g. when explicitly * signing or hashing the */ function _msgData() internal override view returns (bytes memory ret) { if (msg.data.length >= 20 && isTrustedForwarder(msg.sender)) { return msg.data[0 : msg.data.length - 20]; } else { return msg.data; } } /** * @dev calculates the next token ID based on value of _currentTokenId * @return uint256 for the next token ID */ function _getNextTokenId() private view returns (uint256) { return _currentTokenId.add(1); } /** * @dev increments the value of _currentTokenId */ function _incrementTokenId() private { _currentTokenId++; } /** * @dev Mints a token to an address with a tokenURI. * @param _to address of the future owner of the token * @param _tokenURI URI of the token */ function mintTo(address _to, string memory _tokenURI) public onlyOwner { uint256 newTokenId = _getNextTokenId(); require(newTokenId <= MAX_SUPPLY, "Exceeds maximum supply"); require(!mintLocked, "Mint are locked."); _mint(_to, newTokenId); _incrementTokenId(); } function lockMint() public onlyOwner { require(!mintLocked, "Mint are locked."); mintLocked = true; } function updateJsonFetching(string memory link) public onlyOwner { jsonForFetchingOnly = link; } function updateTermsFetching(string memory link) public onlyOwner { require(!termsDataLocked, "Terms data locked"); termsForFetchingOnly = link; termsDataLocked = true; } function tokenURI(uint256 tokenId) public view override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return jsonForFetchingOnly; } function setImgData(string calldata imagedata) public onlyOwner { emit Data(imagedata); } function setTxHashImgData(string memory txHash) public onlyOwner { require(!imgDataLocked, "Image data locked"); txHashImgData = txHash; imgDataLocked = true; } }
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"forwarder","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"imagedata","type":"string"}],"name":"Data","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ARTIST_BIO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ARTIST_EMAIL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ARTIST_NAME","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ARTIST_WALLET","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DESCRIPTION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IMAGE_ARWEAVE_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IMAGE_IPFS_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IMAGE_SHA256_HASH_PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TERMS_ARWEAVE_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TERMS_IPFS_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TERMS_SHA256_HASH_PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"imgDataLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jsonForFetchingOnly","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"mintTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"imagedata","type":"string"}],"name":"setImgData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"txHash","type":"string"}],"name":"setTxHashImgData","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":[],"name":"termsDataLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"termsForFetchingOnly","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"trustedForwarder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"txHashImgData","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"link","type":"string"}],"name":"updateJsonFetching","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"link","type":"string"}],"name":"updateTermsFetching","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506000600f60026101000a81548160ff0219169083151502179055506040518060600160405280602e81526020016200503d602e91396010908051906020019062000086929190620003dc565b506040518060600160405280603181526020016200506b6031913960119080519060200190620000b8929190620003dc565b50348015620000c657600080fd5b506040516200509c3803806200509c8339818101604052810190620000ec919062000521565b8282816000908051906020019062000106929190620003dc565b5080600190805190602001906200011f929190620003dc565b5050506000620001346200024d60201b60201c565b905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001fb73eec675eab2995d968e19fd43949666f86bf50c296102bc6200029560201b60201c565b6000600c8190555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505062000810565b6000601460003690501015801562000272575062000271336200038260201b60201c565b5b156200028857601436033560601c905062000291565b33905062000292565b5b90565b612710811115620002dd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002d490620005e2565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff16815250600a60008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548162ffffff021916908362ffffff1602179055509050505050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b828054620003ea90620006de565b90600052602060002090601f0160209004810192826200040e57600085556200045a565b82601f106200042957805160ff19168380011785556200045a565b828001600101855582156200045a579182015b82811115620004595782518255916020019190600101906200043c565b5b5090506200046991906200046d565b5090565b5b80821115620004885760008160009055506001016200046e565b5090565b6000620004a36200049d846200062d565b62000604565b905082815260208101848484011115620004c257620004c1620007ad565b5b620004cf848285620006a8565b509392505050565b600081519050620004e881620007f6565b92915050565b600082601f830112620005065762000505620007a8565b5b8151620005188482602086016200048c565b91505092915050565b6000806000606084860312156200053d576200053c620007b7565b5b600084015167ffffffffffffffff8111156200055e576200055d620007b2565b5b6200056c86828701620004ee565b935050602084015167ffffffffffffffff81111562000590576200058f620007b2565b5b6200059e86828701620004ee565b9250506040620005b186828701620004d7565b9150509250925092565b6000620005ca601a8362000663565b9150620005d782620007cd565b602082019050919050565b60006020820190508181036000830152620005fd81620005bb565b9050919050565b60006200061062000623565b90506200061e828262000714565b919050565b6000604051905090565b600067ffffffffffffffff8211156200064b576200064a62000779565b5b6200065682620007bc565b9050602081019050919050565b600082825260208201905092915050565b6000620006818262000688565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620006c8578082015181840152602081019050620006ab565b83811115620006d8576000848401525b50505050565b60006002820490506001821680620006f757607f821691505b602082108114156200070e576200070d6200074a565b5b50919050565b6200071f82620007bc565b810181811067ffffffffffffffff8211171562000741576200074062000779565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332393831526f79616c746965733a20546f6f2068696768000000000000600082015250565b620008018162000674565b81146200080d57600080fd5b50565b61481d80620008206000396000f3fe608060405234801561001057600080fd5b50600436106102895760003560e01c806370a082311161015c578063a22cb465116100ce578063e66b2a7b11610087578063e66b2a7b146107a7578063e820763f146107c3578063e985e9c5146107e1578063f1ae885614610811578063f2fde38b1461082f578063f500ea001461084b57610289565b8063a22cb465146106fb578063b88d4fde14610717578063baae28e114610733578063c87b56dd1461074f578063df3c3a301461077f578063e0b6bb671461079d57610289565b806384bc41ca1161012057806384bc41ca146106475780638da5cb5b146106655780638fae82751461068357806395d89b41146106a1578063980c08a1146106bf578063a0c2717e146106dd57610289565b806370a08231146105b3578063715018a6146105e357806378fac768146105ed5780637da0a8771461060b5780637dd9bb531461062957610289565b806332cb6b0c1161020057806357b98d84116101b957806357b98d84146104ef5780636352211e1461050d57806365f81c961461053d5780636720c81b1461055b57806369a3a4d5146105795780636db4bf351461059757610289565b806332cb6b0c1461041957806342842e0e14610437578063461ec2cd146104535780634c23b7fa146104715780634f6ccce71461048f578063572b6c05146104bf57610289565b80630afce53a116102525780630afce53a1461034457806318160ddd146103605780631f6af5c21461037e57806323b872dd1461039c5780632a55205a146103b85780632f745c59146103e957610289565b806275a3171461028e57806301ffc9a7146102aa57806306fdde03146102da578063081812fc146102f8578063095ea7b314610328575b600080fd5b6102a860048036038101906102a39190613191565b610869565b005b6102c460048036038101906102bf919061322d565b61099d565b6040516102d191906137e8565b60405180910390f35b6102e26109af565b6040516102ef9190613827565b60405180910390f35b610312600480360381019061030d919061331d565b610a41565b60405161031f9190613758565b60405180910390f35b610342600480360381019061033d91906131ed565b610ac6565b005b61035e600480360381019061035991906132d4565b610bde565b005b610368610cdf565b6040516103759190613b09565b60405180910390f35b610386610cec565b60405161039391906137e8565b60405180910390f35b6103b660048036038101906103b1919061307b565b610cff565b005b6103d260048036038101906103cd919061334a565b610d5f565b6040516103e09291906137bf565b60405180910390f35b61040360048036038101906103fe91906131ed565b610e1f565b6040516104109190613b09565b60405180910390f35b610421610ec4565b60405161042e9190613b09565b60405180910390f35b610451600480360381019061044c919061307b565b610eca565b005b61045b610eea565b6040516104689190613827565b60405180910390f35b610479610f23565b6040516104869190613827565b60405180910390f35b6104a960048036038101906104a4919061331d565b610f3f565b6040516104b69190613b09565b60405180910390f35b6104d960048036038101906104d4919061300e565b610fb0565b6040516104e691906137e8565b60405180910390f35b6104f761100a565b6040516105049190613827565b60405180910390f35b6105276004803603810190610522919061331d565b611098565b6040516105349190613758565b60405180910390f35b61054561114a565b6040516105529190613827565b60405180910390f35b610563611166565b6040516105709190613827565b60405180910390f35b6105816111f4565b60405161058e9190613827565b60405180910390f35b6105b160048036038101906105ac91906132d4565b611282565b005b6105cd60048036038101906105c8919061300e565b611318565b6040516105da9190613b09565b60405180910390f35b6105eb6113d0565b005b6105f561150d565b6040516106029190613827565b60405180910390f35b610613611529565b6040516106209190613758565b60405180910390f35b61063161154f565b60405161063e9190613827565b60405180910390f35b61064f61156b565b60405161065c9190613827565b60405180910390f35b61066d611587565b60405161067a9190613758565b60405180910390f35b61068b6115b1565b6040516106989190613827565b60405180910390f35b6106a96115cd565b6040516106b69190613827565b60405180910390f35b6106c761165f565b6040516106d49190613758565b60405180910390f35b6106e5611677565b6040516106f291906137e8565b60405180910390f35b61071560048036038101906107109190613151565b61168a565b005b610731600480360381019061072c91906130ce565b61180b565b005b61074d60048036038101906107489190613287565b61186d565b005b6107696004803603810190610764919061331d565b611926565b6040516107769190613827565b60405180910390f35b610787611a02565b60405161079491906137e8565b60405180910390f35b6107a5611a15565b005b6107c160048036038101906107bc91906132d4565b611afe565b005b6107cb611bff565b6040516107d89190613827565b60405180910390f35b6107fb60048036038101906107f6919061303b565b611c1b565b60405161080891906137e8565b60405180910390f35b610819611caf565b6040516108269190613827565b60405180910390f35b6108496004803603810190610844919061300e565b611ccc565b005b610853611e78565b6040516108609190613827565b60405180910390f35b610871611eb1565b73ffffffffffffffffffffffffffffffffffffffff1661088f611587565b73ffffffffffffffffffffffffffffffffffffffff16146108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90613a09565b60405180910390fd5b60006108ef611eed565b9050615208811115610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092d90613aa9565b60405180910390fd5b600f60029054906101000a900460ff1615610986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097d906139e9565b60405180910390fd5b6109908382611f0a565b6109986120d8565b505050565b60006109a8826120f2565b9050919050565b6060600080546109be90613dae565b80601f01602080910402602001604051908101604052809291908181526020018280546109ea90613dae565b8015610a375780601f10610a0c57610100808354040283529160200191610a37565b820191906000526020600020905b815481529060010190602001808311610a1a57829003601f168201915b5050505050905090565b6000610a4c8261216c565b610a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a82906139c9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ad182611098565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990613a89565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b61611eb1565b73ffffffffffffffffffffffffffffffffffffffff161480610b905750610b8f81610b8a611eb1565b611c1b565b5b610bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc690613949565b60405180910390fd5b610bd983836121d8565b505050565b610be6611eb1565b73ffffffffffffffffffffffffffffffffffffffff16610c04611587565b73ffffffffffffffffffffffffffffffffffffffff1614610c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5190613a09565b60405180910390fd5b600f60019054906101000a900460ff1615610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190613889565b60405180910390fd5b80600e9080519060200190610cc0929190612dcc565b506001600f60016101000a81548160ff02191690831515021790555050565b6000600880549050905090565b600f60019054906101000a900460ff1681565b610d10610d0a611eb1565b82612291565b610d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4690613ac9565b60405180910390fd5b610d5a83838361236f565b505050565b6000806000600a6040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900462ffffff1662ffffff1662ffffff1681525050905080600001519250612710816020015162ffffff1685610e0b9190613c6a565b610e159190613c39565b9150509250929050565b6000610e2a83611318565b8210610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6290613849565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61520881565b610ee58383836040518060200160405280600081525061180b565b505050565b6040518060400160405280600b81526020017f47494f204d414e4554544100000000000000000000000000000000000000000081525081565b6040518060800160405280604881526020016146736048913981565b6000610f49610cdf565b8210610f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8190613ae9565b60405180910390fd5b60088281548110610f9e57610f9d613f16565b5b90600052602060002001549050919050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6011805461101790613dae565b80601f016020809104026020016040519081016040528092919081815260200182805461104390613dae565b80156110905780601f1061106557610100808354040283529160200191611090565b820191906000526020600020905b81548152906001019060200180831161107357829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113890613989565b60405180910390fd5b80915050919050565b6040518060600160405280602e81526020016147ba602e913981565b6010805461117390613dae565b80601f016020809104026020016040519081016040528092919081815260200182805461119f90613dae565b80156111ec5780601f106111c1576101008083540402835291602001916111ec565b820191906000526020600020905b8154815290600101906020018083116111cf57829003601f168201915b505050505081565b600e805461120190613dae565b80601f016020809104026020016040519081016040528092919081815260200182805461122d90613dae565b801561127a5780601f1061124f5761010080835404028352916020019161127a565b820191906000526020600020905b81548152906001019060200180831161125d57829003601f168201915b505050505081565b61128a611eb1565b73ffffffffffffffffffffffffffffffffffffffff166112a8611587565b73ffffffffffffffffffffffffffffffffffffffff16146112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590613a09565b60405180910390fd5b8060109080519060200190611314929190612dcc565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138090613969565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113d8611eb1565b73ffffffffffffffffffffffffffffffffffffffff166113f6611587565b73ffffffffffffffffffffffffffffffffffffffff161461144c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144390613a09565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6040518060600160405280602b81526020016146bb602b913981565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060600160405280604081526020016145c86040913981565b6040518060600160405280604081526020016146086040913981565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060600160405280602b8152602001614648602b913981565b6060600180546115dc90613dae565b80601f016020809104026020016040519081016040528092919081815260200182805461160890613dae565b80156116555780601f1061162a57610100808354040283529160200191611655565b820191906000526020600020905b81548152906001019060200180831161163857829003601f168201915b5050505050905090565b73eec675eab2995d968e19fd43949666f86bf50c2981565b600f60009054906101000a900460ff1681565b611692611eb1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790613909565b60405180910390fd5b806005600061170d611eb1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117ba611eb1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117ff91906137e8565b60405180910390a35050565b61181c611816611eb1565b83612291565b61185b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185290613ac9565b60405180910390fd5b611867848484846125cb565b50505050565b611875611eb1565b73ffffffffffffffffffffffffffffffffffffffff16611893611587565b73ffffffffffffffffffffffffffffffffffffffff16146118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090613a09565b60405180910390fd5b7fe8e349d9d60379b7e0a717f216d3d9efaf00b5dce8b634a63f24a5d76251059f828260405161191a929190613803565b60405180910390a15050565b60606119318261216c565b611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196790613a69565b60405180910390fd5b6010805461197d90613dae565b80601f01602080910402602001604051908101604052809291908181526020018280546119a990613dae565b80156119f65780601f106119cb576101008083540402835291602001916119f6565b820191906000526020600020905b8154815290600101906020018083116119d957829003601f168201915b50505050509050919050565b600f60029054906101000a900460ff1681565b611a1d611eb1565b73ffffffffffffffffffffffffffffffffffffffff16611a3b611587565b73ffffffffffffffffffffffffffffffffffffffff1614611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8890613a09565b60405180910390fd5b600f60029054906101000a900460ff1615611ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad8906139e9565b60405180910390fd5b6001600f60026101000a81548160ff021916908315150217905550565b611b06611eb1565b73ffffffffffffffffffffffffffffffffffffffff16611b24611587565b73ffffffffffffffffffffffffffffffffffffffff1614611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613a09565b60405180910390fd5b600f60009054906101000a900460ff1615611bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc190613a29565b60405180910390fd5b8060119080519060200190611be0929190612dcc565b506001600f60006101000a81548160ff02191690831515021790555050565b6040518060600160405280602e815260200161459a602e913981565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60405180610100016040528060d481526020016146e660d4913981565b611cd4611eb1565b73ffffffffffffffffffffffffffffffffffffffff16611cf2611587565b73ffffffffffffffffffffffffffffffffffffffff1614611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90613a09565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf906138a9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060400160405280601981526020017f63656c696e656d616e6574746140686f746d61696c2e636f6d0000000000000081525081565b60006014600036905010158015611ecd5750611ecc33610fb0565b5b15611ee157601436033560601c9050611ee9565b339050611eea565b5b90565b6000611f056001600c5461262790919063ffffffff16565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f71906139a9565b60405180910390fd5b611f838161216c565b15611fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fba906138c9565b60405180910390fd5b611fcf6000838361263d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461201f9190613be3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600c60008154809291906120eb90613e11565b9190505550565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612165575061216482612751565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661224b83611098565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061229c8261216c565b6122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290613929565b60405180910390fd5b60006122e683611098565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061235557508373ffffffffffffffffffffffffffffffffffffffff1661233d84610a41565b73ffffffffffffffffffffffffffffffffffffffff16145b8061236657506123658185611c1b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661238f82611098565b73ffffffffffffffffffffffffffffffffffffffff16146123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc90613a49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c906138e9565b60405180910390fd5b61246083838361263d565b61246b6000826121d8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124bb9190613cc4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125129190613be3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6125d684848461236f565b6125e2848484846127cb565b612621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261890613869565b60405180910390fd5b50505050565b600081836126359190613be3565b905092915050565b612648838383612962565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561268b5761268681612967565b6126ca565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126c9576126c883826129b0565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561270d5761270881612b1d565b61274c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461274b5761274a8282612bee565b5b5b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127c457506127c382612c6d565b5b9050919050565b60006127ec8473ffffffffffffffffffffffffffffffffffffffff16612d4f565b15612955578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612815611eb1565b8786866040518563ffffffff1660e01b81526004016128379493929190613773565b602060405180830381600087803b15801561285157600080fd5b505af192505050801561288257506040513d601f19601f8201168201806040525081019061287f919061325a565b60015b612905573d80600081146128b2576040519150601f19603f3d011682016040523d82523d6000602084013e6128b7565b606091505b506000815114156128fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f490613869565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061295a565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129bd84611318565b6129c79190613cc4565b9050600060076000848152602001908152602001600020549050818114612aac576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b319190613cc4565b9050600060096000848152602001908152602001600020549050600060088381548110612b6157612b60613f16565b5b906000526020600020015490508060088381548110612b8357612b82613f16565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612bd257612bd1613ee7565b5b6001900381819060005260206000200160009055905550505050565b6000612bf983611318565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612d3857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d485750612d4782612d62565b5b9050919050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b828054612dd890613dae565b90600052602060002090601f016020900481019282612dfa5760008555612e41565b82601f10612e1357805160ff1916838001178555612e41565b82800160010185558215612e41579182015b82811115612e40578251825591602001919060010190612e25565b5b509050612e4e9190612e52565b5090565b5b80821115612e6b576000816000905550600101612e53565b5090565b6000612e82612e7d84613b49565b613b24565b905082815260208101848484011115612e9e57612e9d613f83565b5b612ea9848285613d6c565b509392505050565b6000612ec4612ebf84613b7a565b613b24565b905082815260208101848484011115612ee057612edf613f83565b5b612eeb848285613d6c565b509392505050565b600081359050612f028161453d565b92915050565b600081359050612f1781614554565b92915050565b600081359050612f2c8161456b565b92915050565b600081519050612f418161456b565b92915050565b600082601f830112612f5c57612f5b613f79565b5b8135612f6c848260208601612e6f565b91505092915050565b60008083601f840112612f8b57612f8a613f79565b5b8235905067ffffffffffffffff811115612fa857612fa7613f74565b5b602083019150836001820283011115612fc457612fc3613f7e565b5b9250929050565b600082601f830112612fe057612fdf613f79565b5b8135612ff0848260208601612eb1565b91505092915050565b60008135905061300881614582565b92915050565b60006020828403121561302457613023613f8d565b5b600061303284828501612ef3565b91505092915050565b6000806040838503121561305257613051613f8d565b5b600061306085828601612ef3565b925050602061307185828601612ef3565b9150509250929050565b60008060006060848603121561309457613093613f8d565b5b60006130a286828701612ef3565b93505060206130b386828701612ef3565b92505060406130c486828701612ff9565b9150509250925092565b600080600080608085870312156130e8576130e7613f8d565b5b60006130f687828801612ef3565b945050602061310787828801612ef3565b935050604061311887828801612ff9565b925050606085013567ffffffffffffffff81111561313957613138613f88565b5b61314587828801612f47565b91505092959194509250565b6000806040838503121561316857613167613f8d565b5b600061317685828601612ef3565b925050602061318785828601612f08565b9150509250929050565b600080604083850312156131a8576131a7613f8d565b5b60006131b685828601612ef3565b925050602083013567ffffffffffffffff8111156131d7576131d6613f88565b5b6131e385828601612fcb565b9150509250929050565b6000806040838503121561320457613203613f8d565b5b600061321285828601612ef3565b925050602061322385828601612ff9565b9150509250929050565b60006020828403121561324357613242613f8d565b5b600061325184828501612f1d565b91505092915050565b6000602082840312156132705761326f613f8d565b5b600061327e84828501612f32565b91505092915050565b6000806020838503121561329e5761329d613f8d565b5b600083013567ffffffffffffffff8111156132bc576132bb613f88565b5b6132c885828601612f75565b92509250509250929050565b6000602082840312156132ea576132e9613f8d565b5b600082013567ffffffffffffffff81111561330857613307613f88565b5b61331484828501612fcb565b91505092915050565b60006020828403121561333357613332613f8d565b5b600061334184828501612ff9565b91505092915050565b6000806040838503121561336157613360613f8d565b5b600061336f85828601612ff9565b925050602061338085828601612ff9565b9150509250929050565b61339381613cf8565b82525050565b6133a281613d0a565b82525050565b60006133b382613bab565b6133bd8185613bc1565b93506133cd818560208601613d7b565b6133d681613f92565b840191505092915050565b60006133ed8385613bd2565b93506133fa838584613d6c565b61340383613f92565b840190509392505050565b600061341982613bb6565b6134238185613bd2565b9350613433818560208601613d7b565b61343c81613f92565b840191505092915050565b6000613454602b83613bd2565b915061345f82613fa3565b604082019050919050565b6000613477603283613bd2565b915061348282613ff2565b604082019050919050565b600061349a601183613bd2565b91506134a582614041565b602082019050919050565b60006134bd602683613bd2565b91506134c88261406a565b604082019050919050565b60006134e0601c83613bd2565b91506134eb826140b9565b602082019050919050565b6000613503602483613bd2565b915061350e826140e2565b604082019050919050565b6000613526601983613bd2565b915061353182614131565b602082019050919050565b6000613549602c83613bd2565b91506135548261415a565b604082019050919050565b600061356c603883613bd2565b9150613577826141a9565b604082019050919050565b600061358f602a83613bd2565b915061359a826141f8565b604082019050919050565b60006135b2602983613bd2565b91506135bd82614247565b604082019050919050565b60006135d5602083613bd2565b91506135e082614296565b602082019050919050565b60006135f8602c83613bd2565b9150613603826142bf565b604082019050919050565b600061361b601083613bd2565b91506136268261430e565b602082019050919050565b600061363e602083613bd2565b915061364982614337565b602082019050919050565b6000613661601183613bd2565b915061366c82614360565b602082019050919050565b6000613684602983613bd2565b915061368f82614389565b604082019050919050565b60006136a7602f83613bd2565b91506136b2826143d8565b604082019050919050565b60006136ca602183613bd2565b91506136d582614427565b604082019050919050565b60006136ed601683613bd2565b91506136f882614476565b602082019050919050565b6000613710603183613bd2565b915061371b8261449f565b604082019050919050565b6000613733602c83613bd2565b915061373e826144ee565b604082019050919050565b61375281613d62565b82525050565b600060208201905061376d600083018461338a565b92915050565b6000608082019050613788600083018761338a565b613795602083018661338a565b6137a26040830185613749565b81810360608301526137b481846133a8565b905095945050505050565b60006040820190506137d4600083018561338a565b6137e16020830184613749565b9392505050565b60006020820190506137fd6000830184613399565b92915050565b6000602082019050818103600083015261381e8184866133e1565b90509392505050565b60006020820190508181036000830152613841818461340e565b905092915050565b6000602082019050818103600083015261386281613447565b9050919050565b600060208201905081810360008301526138828161346a565b9050919050565b600060208201905081810360008301526138a28161348d565b9050919050565b600060208201905081810360008301526138c2816134b0565b9050919050565b600060208201905081810360008301526138e2816134d3565b9050919050565b60006020820190508181036000830152613902816134f6565b9050919050565b6000602082019050818103600083015261392281613519565b9050919050565b600060208201905081810360008301526139428161353c565b9050919050565b600060208201905081810360008301526139628161355f565b9050919050565b6000602082019050818103600083015261398281613582565b9050919050565b600060208201905081810360008301526139a2816135a5565b9050919050565b600060208201905081810360008301526139c2816135c8565b9050919050565b600060208201905081810360008301526139e2816135eb565b9050919050565b60006020820190508181036000830152613a028161360e565b9050919050565b60006020820190508181036000830152613a2281613631565b9050919050565b60006020820190508181036000830152613a4281613654565b9050919050565b60006020820190508181036000830152613a6281613677565b9050919050565b60006020820190508181036000830152613a828161369a565b9050919050565b60006020820190508181036000830152613aa2816136bd565b9050919050565b60006020820190508181036000830152613ac2816136e0565b9050919050565b60006020820190508181036000830152613ae281613703565b9050919050565b60006020820190508181036000830152613b0281613726565b9050919050565b6000602082019050613b1e6000830184613749565b92915050565b6000613b2e613b3f565b9050613b3a8282613de0565b919050565b6000604051905090565b600067ffffffffffffffff821115613b6457613b63613f45565b5b613b6d82613f92565b9050602081019050919050565b600067ffffffffffffffff821115613b9557613b94613f45565b5b613b9e82613f92565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613bee82613d62565b9150613bf983613d62565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c2e57613c2d613e5a565b5b828201905092915050565b6000613c4482613d62565b9150613c4f83613d62565b925082613c5f57613c5e613e89565b5b828204905092915050565b6000613c7582613d62565b9150613c8083613d62565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cb957613cb8613e5a565b5b828202905092915050565b6000613ccf82613d62565b9150613cda83613d62565b925082821015613ced57613cec613e5a565b5b828203905092915050565b6000613d0382613d42565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d99578082015181840152602081019050613d7e565b83811115613da8576000848401525b50505050565b60006002820490506001821680613dc657607f821691505b60208210811415613dda57613dd9613eb8565b5b50919050565b613de982613f92565b810181811067ffffffffffffffff82111715613e0857613e07613f45565b5b80604052505050565b6000613e1c82613d62565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e4f57613e4e613e5a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f496d6167652064617461206c6f636b6564000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e7420617265206c6f636b65642e00000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5465726d732064617461206c6f636b6564000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61454681613cf8565b811461455157600080fd5b50565b61455d81613d0a565b811461456857600080fd5b50565b61457481613d16565b811461457f57600080fd5b50565b61458b81613d62565b811461459657600080fd5b5056fe516d654155755a73776a506d574237746d346a7747377056426e6941374a374e6b74775745386e32654e63794d4330393730616338343939346138303236643262663936616664323430613063313734376138363630626564666335363036323439623936636438633164336238326230396536333435316233303038616631353735386437666434336337636232646165373039373431336466373664326136323233636662616363346632376943516243507641326b43356330555356385159634c444f733230796837655f3842335a6b6874695577514672656e63682041697220466f72636520417274697374202d205065696e747265206465206c27616972206574206465206c27657370616365202d204361722064657369676e657266535847307571734178454375544268794b386464397a3645567537327a5469455a726c684f596f58534154686520524143455220617274776f726b2c206d61646520627920746865206172746973742047696f204d616e657474612c2063656c6562726174657320746865203330746820616e6e6976657273617279206f66204169726275732048656c69636f70746572732e204169726275732048656c69636f707465727320616e642069747320656d706c6f79656573206b656570206f6e2070696f6e656572696e67207375737461696e61626c65206165726f737061636520666f722061207361666520616e6420756e6974656420776f726c642e516d544b4a73424c56443675355871514a57556b644c5735614c7632554e384d31446b5765374363335278714a72a2646970667358221220a8ffe7d5149932c8cd1c9753141d3025427e5039b265e5b7dee2d0de9b5c13b964736f6c6343000807003368747470733a2f2f66657463682e6f70656e67656d2e636f6d2f6169726275732f6d657461646174612e6a736f6e68747470733a2f2f66657463682e6f70656e67656d2e636f6d2f6169726275732f6173736574732f7465726d732e706466000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f3ab8e71fb4960186c697ac79f3e4d882e9cd604000000000000000000000000000000000000000000000000000000000000001b5241434552206279204169726275732048656c69636f7074657273000000000000000000000000000000000000000000000000000000000000000000000000055241434552000000000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f3ab8e71fb4960186c697ac79f3e4d882e9cd604000000000000000000000000000000000000000000000000000000000000001b5241434552206279204169726275732048656c69636f7074657273000000000000000000000000000000000000000000000000000000000000000000000000055241434552000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): RACER by Airbus Helicopters
Arg [1] : _symbol (string): RACER
Arg [2] : forwarder (address): 0xf3ab8e71fb4960186c697ac79f3e4d882e9cd604
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 000000000000000000000000f3ab8e71fb4960186c697ac79f3e4d882e9cd604
Arg [3] : 000000000000000000000000000000000000000000000000000000000000001b
Arg [4] : 5241434552206279204169726275732048656c69636f70746572730000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 5241434552000000000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
58133:5976:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62800:313;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60372:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31032:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32492:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32029:397;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;63914:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44488:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59808:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33382:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57653:321;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;44156:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58408:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33758:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58459:50;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58605:110;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44678:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60564:129;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59976:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30726:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59157:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59885:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59732:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63253:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30456:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9912:148;;;:::i;:::-;;59361:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58336:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59596:125;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59464;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9261:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59260:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31201:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58516:82;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59766:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32785:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33980:285;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;63803:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;63581:214;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59848:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63121:124;;;:::i;:::-;;63371:202;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59056:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33151:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58796:251;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10215:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58722:65;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62800:313;9492:12;:10;:12::i;:::-;9481:23;;:7;:5;:7::i;:::-;:23;;;9473:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62882:18:::1;62903:17;:15;:17::i;:::-;62882:38;;58445:5;62939:10;:24;;62931:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;63010:10;;;;;;;;;;;63009:11;63001:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;63053:22;63059:3;63064:10;63053:5;:22::i;:::-;63086:19;:17;:19::i;:::-;62871:242;62800:313:::0;;:::o;60372:184::-;60488:4;60512:36;60536:11;60512:23;:36::i;:::-;60505:43;;60372:184;;;:::o;31032:100::-;31086:13;31119:5;31112:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31032:100;:::o;32492:221::-;32568:7;32596:16;32604:7;32596;:16::i;:::-;32588:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32681:15;:24;32697:7;32681:24;;;;;;;;;;;;;;;;;;;;;32674:31;;32492:221;;;:::o;32029:397::-;32110:13;32126:23;32141:7;32126:14;:23::i;:::-;32110:39;;32174:5;32168:11;;:2;:11;;;;32160:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32254:5;32238:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32263:37;32280:5;32287:12;:10;:12::i;:::-;32263:16;:37::i;:::-;32238:62;32230:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32397:21;32406:2;32410:7;32397:8;:21::i;:::-;32099:327;32029:397;;:::o;63914:192::-;9492:12;:10;:12::i;:::-;9481:23;;:7;:5;:7::i;:::-;:23;;;9473:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;63999:13:::1;;;;;;;;;;;63998:14;63990:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;64061:6;64045:13;:22;;;;;;;;;;;;:::i;:::-;;64094:4;64078:13;;:20;;;;;;;;;;;;;;;;;;63914:192:::0;:::o;44488:113::-;44549:7;44576:10;:17;;;;44569:24;;44488:113;:::o;59808:33::-;;;;;;;;;;;;;:::o;33382:305::-;33543:41;33562:12;:10;:12::i;:::-;33576:7;33543:18;:41::i;:::-;33535:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33651:28;33661:4;33667:2;33671:7;33651:9;:28::i;:::-;33382:305;;;:::o;57653:321::-;57766:16;57784:21;57823:28;57854:10;57823:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57886:9;:19;;;57875:30;;57961:5;57941:9;:16;;;57933:24;;:5;:24;;;;:::i;:::-;57932:34;;;;:::i;:::-;57916:50;;57812:162;57653:321;;;;;:::o;44156:256::-;44253:7;44289:23;44306:5;44289:16;:23::i;:::-;44281:5;:31;44273:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;44378:12;:19;44391:5;44378:19;;;;;;;;;;;;;;;:26;44398:5;44378:26;;;;;;;;;;;;44371:33;;44156:256;;;;:::o;58408:42::-;58445:5;58408:42;:::o;33758:151::-;33862:39;33879:4;33885:2;33889:7;33862:39;;;;;;;;;;;;:16;:39::i;:::-;33758:151;;;:::o;58459:50::-;;;;;;;;;;;;;;;;;;;:::o;58605:110::-;;;;;;;;;;;;;;;;;;;:::o;44678:233::-;44753:7;44789:30;:28;:30::i;:::-;44781:5;:38;44773:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;44886:10;44897:5;44886:17;;;;;;;;:::i;:::-;;;;;;;;;;44879:24;;44678:233;;;:::o;60564:129::-;60632:4;60669:16;;;;;;;;;;;60656:29;;:9;:29;;;60649:36;;60564:129;;;:::o;59976:88::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30726:239::-;30798:7;30818:13;30834:7;:16;30842:7;30834:16;;;;;;;;;;;;;;;;;;;;;30818:32;;30886:1;30869:19;;:5;:19;;;;30861:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30952:5;30945:12;;;30726:239;;;:::o;59157:94::-;;;;;;;;;;;;;;;;;;;:::o;59885:84::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;59732:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;63253:110::-;9492:12;:10;:12::i;:::-;9481:23;;:7;:5;:7::i;:::-;:23;;;9473:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;63351:4:::1;63329:19;:26;;;;;;;;;;;;:::i;:::-;;63253:110:::0;:::o;30456:208::-;30528:7;30573:1;30556:19;;:5;:19;;;;30548:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30640:9;:16;30650:5;30640:16;;;;;;;;;;;;;;;;30633:23;;30456:208;;;:::o;9912:148::-;9492:12;:10;:12::i;:::-;9481:23;;:7;:5;:7::i;:::-;:23;;;9473:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10019:1:::1;9982:40;;10003:6;;;;;;;;;;;9982:40;;;;;;;;;;;;10050:1;10033:6;;:19;;;;;;;;;;;;;;;;;;9912:148::o:0;59361:94::-;;;;;;;;;;;;;;;;;;;:::o;58336:31::-;;;;;;;;;;;;;:::o;59596:125::-;;;;;;;;;;;;;;;;;;;:::o;59464:::-;;;;;;;;;;;;;;;;;;;:::o;9261:87::-;9307:7;9334:6;;;;;;;;;;;9327:13;;9261:87;:::o;59260:94::-;;;;;;;;;;;;;;;;;;;:::o;31201:104::-;31257:13;31290:7;31283:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31201:104;:::o;58516:82::-;58556:42;58516:82;:::o;59766:35::-;;;;;;;;;;;;;:::o;32785:295::-;32900:12;:10;:12::i;:::-;32888:24;;:8;:24;;;;32880:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33000:8;32955:18;:32;32974:12;:10;:12::i;:::-;32955:32;;;;;;;;;;;;;;;:42;32988:8;32955:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33053:8;33024:48;;33039:12;:10;:12::i;:::-;33024:48;;;33063:8;33024:48;;;;;;:::i;:::-;;;;;;;;32785:295;;:::o;33980:285::-;34112:41;34131:12;:10;:12::i;:::-;34145:7;34112:18;:41::i;:::-;34104:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34218:39;34232:4;34238:2;34242:7;34251:5;34218:13;:39::i;:::-;33980:285;;;;:::o;63803:103::-;9492:12;:10;:12::i;:::-;9481:23;;:7;:5;:7::i;:::-;:23;;;9473:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;63883:15:::1;63888:9;;63883:15;;;;;;;:::i;:::-;;;;;;;;63803:103:::0;;:::o;63581:214::-;63646:13;63682:16;63690:7;63682;:16::i;:::-;63673:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;63768:19;63761:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63581:214;;;:::o;59848:30::-;;;;;;;;;;;;;:::o;63121:124::-;9492:12;:10;:12::i;:::-;9481:23;;:7;:5;:7::i;:::-;:23;;;9473:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;63178:10:::1;;;;;;;;;;;63177:11;63169:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;63233:4;63220:10;;:17;;;;;;;;;;;;;;;;;;63121:124::o:0;63371:202::-;9492:12;:10;:12::i;:::-;9481:23;;:7;:5;:7::i;:::-;:23;;;9473:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;63457:15:::1;;;;;;;;;;;63456:16;63448:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;63528:4;63505:20;:27;;;;;;;;;;;;:::i;:::-;;63561:4;63543:15;;:22;;;;;;;;;;;;;;;;;;63371:202:::0;:::o;59056:94::-;;;;;;;;;;;;;;;;;;;:::o;33151:164::-;33248:4;33272:18;:25;33291:5;33272:25;;;;;;;;;;;;;;;:35;33298:8;33272:35;;;;;;;;;;;;;;;;;;;;;;;;;33265:42;;33151:164;;;;:::o;58796:251::-;;;;;;;;;;;;;;;;;;;:::o;10215:244::-;9492:12;:10;:12::i;:::-;9481:23;;:7;:5;:7::i;:::-;:23;;;9473:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10324:1:::1;10304:22;;:8;:22;;;;10296:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10414:8;10385:38;;10406:6;;;;;;;;;;;10385:38;;;;;;;;;;;;10443:8;10434:6;;:17;;;;;;;;;;;;;;;;;;10215:244:::0;:::o;58722:65::-;;;;;;;;;;;;;;;;;;;:::o;60953:562::-;61007:11;61054:2;61035:8;;:15;;:21;;:55;;;;;61060:30;61079:10;61060:18;:30::i;:::-;61035:55;61031:477;;;61418:2;61402:14;61398:23;61385:37;61381:2;61377:46;61370:53;;61031:477;;;61485:10;61470:26;;;;61031:477;60953:562;;:::o;62358:106::-;62407:7;62434:22;62454:1;62434:15;;:19;;:22;;;;:::i;:::-;62427:29;;62358:106;:::o;37639:382::-;37733:1;37719:16;;:2;:16;;;;37711:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37792:16;37800:7;37792;:16::i;:::-;37791:17;37783:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37854:45;37883:1;37887:2;37891:7;37854:20;:45::i;:::-;37929:1;37912:9;:13;37922:2;37912:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37960:2;37941:7;:16;37949:7;37941:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38005:7;38001:2;37980:33;;37997:1;37980:33;;;;;;;;;;;;37639:382;;:::o;62543:73::-;62591:15;;:17;;;;;;;;;:::i;:::-;;;;;;62543:73::o;56593:283::-;56723:4;56780:35;56765:50;;;:11;:50;;;;:103;;;;56832:36;56856:11;56832:23;:36::i;:::-;56765:103;56745:123;;56593:283;;;:::o;35732:127::-;35797:4;35849:1;35821:30;;:7;:16;35829:7;35821:16;;;;;;;;;;;;;;;;;;;;;:30;;;;35814:37;;35732:127;;;:::o;39609:174::-;39711:2;39684:15;:24;39700:7;39684:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;39767:7;39763:2;39729:46;;39738:23;39753:7;39738:14;:23::i;:::-;39729:46;;;;;;;;;;;;39609:174;;:::o;36026:348::-;36119:4;36144:16;36152:7;36144;:16::i;:::-;36136:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36220:13;36236:23;36251:7;36236:14;:23::i;:::-;36220:39;;36289:5;36278:16;;:7;:16;;;:51;;;;36322:7;36298:31;;:20;36310:7;36298:11;:20::i;:::-;:31;;;36278:51;:87;;;;36333:32;36350:5;36357:7;36333:16;:32::i;:::-;36278:87;36270:96;;;36026:348;;;;:::o;38947:544::-;39072:4;39045:31;;:23;39060:7;39045:14;:23::i;:::-;:31;;;39037:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39155:1;39141:16;;:2;:16;;;;39133:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39211:39;39232:4;39238:2;39242:7;39211:20;:39::i;:::-;39315:29;39332:1;39336:7;39315:8;:29::i;:::-;39376:1;39357:9;:15;39367:4;39357:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39405:1;39388:9;:13;39398:2;39388:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39436:2;39417:7;:16;39425:7;39417:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39475:7;39471:2;39456:27;;39465:4;39456:27;;;;;;;;;;;;38947:544;;;:::o;35147:272::-;35261:28;35271:4;35277:2;35281:7;35261:9;:28::i;:::-;35308:48;35331:4;35337:2;35341:7;35350:5;35308:22;:48::i;:::-;35300:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;35147:272;;;;:::o;2893:98::-;2951:7;2982:1;2978;:5;;;;:::i;:::-;2971:12;;2893:98;;;;:::o;45524:555::-;45634:45;45661:4;45667:2;45671:7;45634:26;:45::i;:::-;45712:1;45696:18;;:4;:18;;;45692:187;;;45731:40;45763:7;45731:31;:40::i;:::-;45692:187;;;45801:2;45793:10;;:4;:10;;;45789:90;;45820:47;45853:4;45859:7;45820:32;:47::i;:::-;45789:90;45692:187;45907:1;45893:16;;:2;:16;;;45889:183;;;45926:45;45963:7;45926:36;:45::i;:::-;45889:183;;;45999:4;45993:10;;:2;:10;;;45989:83;;46020:40;46048:2;46052:7;46020:27;:40::i;:::-;45989:83;45889:183;45524:555;;;:::o;43835:237::-;43937:4;43976:35;43961:50;;;:11;:50;;;;:103;;;;44028:36;44052:11;44028:23;:36::i;:::-;43961:103;43954:110;;43835:237;;;:::o;40348:843::-;40469:4;40495:15;:2;:13;;;:15::i;:::-;40491:693;;;40547:2;40531:36;;;40568:12;:10;:12::i;:::-;40582:4;40588:7;40597:5;40531:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40527:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40794:1;40777:6;:13;:18;40773:341;;;40820:60;;;;;;;;;;:::i;:::-;;;;;;;;40773:341;41064:6;41058:13;41049:6;41045:2;41041:15;41034:38;40527:602;40664:45;;;40654:55;;;:6;:55;;;;40647:62;;;;;40491:693;41168:4;41161:11;;40348:843;;;;;;;:::o;41804:93::-;;;;:::o;46802:164::-;46906:10;:17;;;;46879:15;:24;46895:7;46879:24;;;;;;;;;;;:44;;;;46934:10;46950:7;46934:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46802:164;:::o;47593:988::-;47859:22;47909:1;47884:22;47901:4;47884:16;:22::i;:::-;:26;;;;:::i;:::-;47859:51;;47921:18;47942:17;:26;47960:7;47942:26;;;;;;;;;;;;47921:47;;48089:14;48075:10;:28;48071:328;;48120:19;48142:12;:18;48155:4;48142:18;;;;;;;;;;;;;;;:34;48161:14;48142:34;;;;;;;;;;;;48120:56;;48226:11;48193:12;:18;48206:4;48193:18;;;;;;;;;;;;;;;:30;48212:10;48193:30;;;;;;;;;;;:44;;;;48343:10;48310:17;:30;48328:11;48310:30;;;;;;;;;;;:43;;;;48105:294;48071:328;48495:17;:26;48513:7;48495:26;;;;;;;;;;;48488:33;;;48539:12;:18;48552:4;48539:18;;;;;;;;;;;;;;;:34;48558:14;48539:34;;;;;;;;;;;48532:41;;;47674:907;;47593:988;;:::o;48876:1079::-;49129:22;49174:1;49154:10;:17;;;;:21;;;;:::i;:::-;49129:46;;49186:18;49207:15;:24;49223:7;49207:24;;;;;;;;;;;;49186:45;;49558:19;49580:10;49591:14;49580:26;;;;;;;;:::i;:::-;;;;;;;;;;49558:48;;49644:11;49619:10;49630;49619:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;49755:10;49724:15;:28;49740:11;49724:28;;;;;;;;;;;:41;;;;49896:15;:24;49912:7;49896:24;;;;;;;;;;;49889:31;;;49931:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48947:1008;;;48876:1079;:::o;46380:221::-;46465:14;46482:20;46499:2;46482:16;:20::i;:::-;46465:37;;46540:7;46513:12;:16;46526:2;46513:16;;;;;;;;;;;;;;;:24;46530:6;46513:24;;;;;;;;;;;:34;;;;46587:6;46558:17;:26;46576:7;46558:26;;;;;;;;;;;:35;;;;46454:147;46380:221;;:::o;30100:292::-;30202:4;30241:25;30226:40;;;:11;:40;;;;:105;;;;30298:33;30283:48;;;:11;:48;;;;30226:105;:158;;;;30348:36;30372:11;30348:23;:36::i;:::-;30226:158;30219:165;;30100:292;;;:::o;18463:422::-;18523:4;18731:12;18842:7;18830:20;18822:28;;18876:1;18869:4;:8;18862:15;;;18463:422;;;:::o;28594:157::-;28679:4;28718:25;28703:40;;;:11;:40;;;;28696:47;;28594:157;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:553::-;1844:8;1854:6;1904:3;1897:4;1889:6;1885:17;1881:27;1871:122;;1912:79;;:::i;:::-;1871:122;2025:6;2012:20;2002:30;;2055:18;2047:6;2044:30;2041:117;;;2077:79;;:::i;:::-;2041:117;2191:4;2183:6;2179:17;2167:29;;2245:3;2237:4;2229:6;2225:17;2215:8;2211:32;2208:41;2205:128;;;2252:79;;:::i;:::-;2205:128;1786:553;;;;;:::o;2359:340::-;2415:5;2464:3;2457:4;2449:6;2445:17;2441:27;2431:122;;2472:79;;:::i;:::-;2431:122;2589:6;2576:20;2614:79;2689:3;2681:6;2674:4;2666:6;2662:17;2614:79;:::i;:::-;2605:88;;2421:278;2359:340;;;;:::o;2705:139::-;2751:5;2789:6;2776:20;2767:29;;2805:33;2832:5;2805:33;:::i;:::-;2705:139;;;;:::o;2850:329::-;2909:6;2958:2;2946:9;2937:7;2933:23;2929:32;2926:119;;;2964:79;;:::i;:::-;2926:119;3084:1;3109:53;3154:7;3145:6;3134:9;3130:22;3109:53;:::i;:::-;3099:63;;3055:117;2850:329;;;;:::o;3185:474::-;3253:6;3261;3310:2;3298:9;3289:7;3285:23;3281:32;3278:119;;;3316:79;;:::i;:::-;3278:119;3436:1;3461:53;3506:7;3497:6;3486:9;3482:22;3461:53;:::i;:::-;3451:63;;3407:117;3563:2;3589:53;3634:7;3625:6;3614:9;3610:22;3589:53;:::i;:::-;3579:63;;3534:118;3185:474;;;;;:::o;3665:619::-;3742:6;3750;3758;3807:2;3795:9;3786:7;3782:23;3778:32;3775:119;;;3813:79;;:::i;:::-;3775:119;3933:1;3958:53;4003:7;3994:6;3983:9;3979:22;3958:53;:::i;:::-;3948:63;;3904:117;4060:2;4086:53;4131:7;4122:6;4111:9;4107:22;4086:53;:::i;:::-;4076:63;;4031:118;4188:2;4214:53;4259:7;4250:6;4239:9;4235:22;4214:53;:::i;:::-;4204:63;;4159:118;3665:619;;;;;:::o;4290:943::-;4385:6;4393;4401;4409;4458:3;4446:9;4437:7;4433:23;4429:33;4426:120;;;4465:79;;:::i;:::-;4426:120;4585:1;4610:53;4655:7;4646:6;4635:9;4631:22;4610:53;:::i;:::-;4600:63;;4556:117;4712:2;4738:53;4783:7;4774:6;4763:9;4759:22;4738:53;:::i;:::-;4728:63;;4683:118;4840:2;4866:53;4911:7;4902:6;4891:9;4887:22;4866:53;:::i;:::-;4856:63;;4811:118;4996:2;4985:9;4981:18;4968:32;5027:18;5019:6;5016:30;5013:117;;;5049:79;;:::i;:::-;5013:117;5154:62;5208:7;5199:6;5188:9;5184:22;5154:62;:::i;:::-;5144:72;;4939:287;4290:943;;;;;;;:::o;5239:468::-;5304:6;5312;5361:2;5349:9;5340:7;5336:23;5332:32;5329:119;;;5367:79;;:::i;:::-;5329:119;5487:1;5512:53;5557:7;5548:6;5537:9;5533:22;5512:53;:::i;:::-;5502:63;;5458:117;5614:2;5640:50;5682:7;5673:6;5662:9;5658:22;5640:50;:::i;:::-;5630:60;;5585:115;5239:468;;;;;:::o;5713:654::-;5791:6;5799;5848:2;5836:9;5827:7;5823:23;5819:32;5816:119;;;5854:79;;:::i;:::-;5816:119;5974:1;5999:53;6044:7;6035:6;6024:9;6020:22;5999:53;:::i;:::-;5989:63;;5945:117;6129:2;6118:9;6114:18;6101:32;6160:18;6152:6;6149:30;6146:117;;;6182:79;;:::i;:::-;6146:117;6287:63;6342:7;6333:6;6322:9;6318:22;6287:63;:::i;:::-;6277:73;;6072:288;5713:654;;;;;:::o;6373:474::-;6441:6;6449;6498:2;6486:9;6477:7;6473:23;6469:32;6466:119;;;6504:79;;:::i;:::-;6466:119;6624:1;6649:53;6694:7;6685:6;6674:9;6670:22;6649:53;:::i;:::-;6639:63;;6595:117;6751:2;6777:53;6822:7;6813:6;6802:9;6798:22;6777:53;:::i;:::-;6767:63;;6722:118;6373:474;;;;;:::o;6853:327::-;6911:6;6960:2;6948:9;6939:7;6935:23;6931:32;6928:119;;;6966:79;;:::i;:::-;6928:119;7086:1;7111:52;7155:7;7146:6;7135:9;7131:22;7111:52;:::i;:::-;7101:62;;7057:116;6853:327;;;;:::o;7186:349::-;7255:6;7304:2;7292:9;7283:7;7279:23;7275:32;7272:119;;;7310:79;;:::i;:::-;7272:119;7430:1;7455:63;7510:7;7501:6;7490:9;7486:22;7455:63;:::i;:::-;7445:73;;7401:127;7186:349;;;;:::o;7541:529::-;7612:6;7620;7669:2;7657:9;7648:7;7644:23;7640:32;7637:119;;;7675:79;;:::i;:::-;7637:119;7823:1;7812:9;7808:17;7795:31;7853:18;7845:6;7842:30;7839:117;;;7875:79;;:::i;:::-;7839:117;7988:65;8045:7;8036:6;8025:9;8021:22;7988:65;:::i;:::-;7970:83;;;;7766:297;7541:529;;;;;:::o;8076:509::-;8145:6;8194:2;8182:9;8173:7;8169:23;8165:32;8162:119;;;8200:79;;:::i;:::-;8162:119;8348:1;8337:9;8333:17;8320:31;8378:18;8370:6;8367:30;8364:117;;;8400:79;;:::i;:::-;8364:117;8505:63;8560:7;8551:6;8540:9;8536:22;8505:63;:::i;:::-;8495:73;;8291:287;8076:509;;;;:::o;8591:329::-;8650:6;8699:2;8687:9;8678:7;8674:23;8670:32;8667:119;;;8705:79;;:::i;:::-;8667:119;8825:1;8850:53;8895:7;8886:6;8875:9;8871:22;8850:53;:::i;:::-;8840:63;;8796:117;8591:329;;;;:::o;8926:474::-;8994:6;9002;9051:2;9039:9;9030:7;9026:23;9022:32;9019:119;;;9057:79;;:::i;:::-;9019:119;9177:1;9202:53;9247:7;9238:6;9227:9;9223:22;9202:53;:::i;:::-;9192:63;;9148:117;9304:2;9330:53;9375:7;9366:6;9355:9;9351:22;9330:53;:::i;:::-;9320:63;;9275:118;8926:474;;;;;:::o;9406:118::-;9493:24;9511:5;9493:24;:::i;:::-;9488:3;9481:37;9406:118;;:::o;9530:109::-;9611:21;9626:5;9611:21;:::i;:::-;9606:3;9599:34;9530:109;;:::o;9645:360::-;9731:3;9759:38;9791:5;9759:38;:::i;:::-;9813:70;9876:6;9871:3;9813:70;:::i;:::-;9806:77;;9892:52;9937:6;9932:3;9925:4;9918:5;9914:16;9892:52;:::i;:::-;9969:29;9991:6;9969:29;:::i;:::-;9964:3;9960:39;9953:46;;9735:270;9645:360;;;;:::o;10035:304::-;10133:3;10154:71;10218:6;10213:3;10154:71;:::i;:::-;10147:78;;10235:43;10271:6;10266:3;10259:5;10235:43;:::i;:::-;10303:29;10325:6;10303:29;:::i;:::-;10298:3;10294:39;10287:46;;10035:304;;;;;:::o;10345:364::-;10433:3;10461:39;10494:5;10461:39;:::i;:::-;10516:71;10580:6;10575:3;10516:71;:::i;:::-;10509:78;;10596:52;10641:6;10636:3;10629:4;10622:5;10618:16;10596:52;:::i;:::-;10673:29;10695:6;10673:29;:::i;:::-;10668:3;10664:39;10657:46;;10437:272;10345:364;;;;:::o;10715:366::-;10857:3;10878:67;10942:2;10937:3;10878:67;:::i;:::-;10871:74;;10954:93;11043:3;10954:93;:::i;:::-;11072:2;11067:3;11063:12;11056:19;;10715:366;;;:::o;11087:::-;11229:3;11250:67;11314:2;11309:3;11250:67;:::i;:::-;11243:74;;11326:93;11415:3;11326:93;:::i;:::-;11444:2;11439:3;11435:12;11428:19;;11087:366;;;:::o;11459:::-;11601:3;11622:67;11686:2;11681:3;11622:67;:::i;:::-;11615:74;;11698:93;11787:3;11698:93;:::i;:::-;11816:2;11811:3;11807:12;11800:19;;11459:366;;;:::o;11831:::-;11973:3;11994:67;12058:2;12053:3;11994:67;:::i;:::-;11987:74;;12070:93;12159:3;12070:93;:::i;:::-;12188:2;12183:3;12179:12;12172:19;;11831:366;;;:::o;12203:::-;12345:3;12366:67;12430:2;12425:3;12366:67;:::i;:::-;12359:74;;12442:93;12531:3;12442:93;:::i;:::-;12560:2;12555:3;12551:12;12544:19;;12203:366;;;:::o;12575:::-;12717:3;12738:67;12802:2;12797:3;12738:67;:::i;:::-;12731:74;;12814:93;12903:3;12814:93;:::i;:::-;12932:2;12927:3;12923:12;12916:19;;12575:366;;;:::o;12947:::-;13089:3;13110:67;13174:2;13169:3;13110:67;:::i;:::-;13103:74;;13186:93;13275:3;13186:93;:::i;:::-;13304:2;13299:3;13295:12;13288:19;;12947:366;;;:::o;13319:::-;13461:3;13482:67;13546:2;13541:3;13482:67;:::i;:::-;13475:74;;13558:93;13647:3;13558:93;:::i;:::-;13676:2;13671:3;13667:12;13660:19;;13319:366;;;:::o;13691:::-;13833:3;13854:67;13918:2;13913:3;13854:67;:::i;:::-;13847:74;;13930:93;14019:3;13930:93;:::i;:::-;14048:2;14043:3;14039:12;14032:19;;13691:366;;;:::o;14063:::-;14205:3;14226:67;14290:2;14285:3;14226:67;:::i;:::-;14219:74;;14302:93;14391:3;14302:93;:::i;:::-;14420:2;14415:3;14411:12;14404:19;;14063:366;;;:::o;14435:::-;14577:3;14598:67;14662:2;14657:3;14598:67;:::i;:::-;14591:74;;14674:93;14763:3;14674:93;:::i;:::-;14792:2;14787:3;14783:12;14776:19;;14435:366;;;:::o;14807:::-;14949:3;14970:67;15034:2;15029:3;14970:67;:::i;:::-;14963:74;;15046:93;15135:3;15046:93;:::i;:::-;15164:2;15159:3;15155:12;15148:19;;14807:366;;;:::o;15179:::-;15321:3;15342:67;15406:2;15401:3;15342:67;:::i;:::-;15335:74;;15418:93;15507:3;15418:93;:::i;:::-;15536:2;15531:3;15527:12;15520:19;;15179:366;;;:::o;15551:::-;15693:3;15714:67;15778:2;15773:3;15714:67;:::i;:::-;15707:74;;15790:93;15879:3;15790:93;:::i;:::-;15908:2;15903:3;15899:12;15892:19;;15551:366;;;:::o;15923:::-;16065:3;16086:67;16150:2;16145:3;16086:67;:::i;:::-;16079:74;;16162:93;16251:3;16162:93;:::i;:::-;16280:2;16275:3;16271:12;16264:19;;15923:366;;;:::o;16295:::-;16437:3;16458:67;16522:2;16517:3;16458:67;:::i;:::-;16451:74;;16534:93;16623:3;16534:93;:::i;:::-;16652:2;16647:3;16643:12;16636:19;;16295:366;;;:::o;16667:::-;16809:3;16830:67;16894:2;16889:3;16830:67;:::i;:::-;16823:74;;16906:93;16995:3;16906:93;:::i;:::-;17024:2;17019:3;17015:12;17008:19;;16667:366;;;:::o;17039:::-;17181:3;17202:67;17266:2;17261:3;17202:67;:::i;:::-;17195:74;;17278:93;17367:3;17278:93;:::i;:::-;17396:2;17391:3;17387:12;17380:19;;17039:366;;;:::o;17411:::-;17553:3;17574:67;17638:2;17633:3;17574:67;:::i;:::-;17567:74;;17650:93;17739:3;17650:93;:::i;:::-;17768:2;17763:3;17759:12;17752:19;;17411:366;;;:::o;17783:::-;17925:3;17946:67;18010:2;18005:3;17946:67;:::i;:::-;17939:74;;18022:93;18111:3;18022:93;:::i;:::-;18140:2;18135:3;18131:12;18124:19;;17783:366;;;:::o;18155:::-;18297:3;18318:67;18382:2;18377:3;18318:67;:::i;:::-;18311:74;;18394:93;18483:3;18394:93;:::i;:::-;18512:2;18507:3;18503:12;18496:19;;18155:366;;;:::o;18527:::-;18669:3;18690:67;18754:2;18749:3;18690:67;:::i;:::-;18683:74;;18766:93;18855:3;18766:93;:::i;:::-;18884:2;18879:3;18875:12;18868:19;;18527:366;;;:::o;18899:118::-;18986:24;19004:5;18986:24;:::i;:::-;18981:3;18974:37;18899:118;;:::o;19023:222::-;19116:4;19154:2;19143:9;19139:18;19131:26;;19167:71;19235:1;19224:9;19220:17;19211:6;19167:71;:::i;:::-;19023:222;;;;:::o;19251:640::-;19446:4;19484:3;19473:9;19469:19;19461:27;;19498:71;19566:1;19555:9;19551:17;19542:6;19498:71;:::i;:::-;19579:72;19647:2;19636:9;19632:18;19623:6;19579:72;:::i;:::-;19661;19729:2;19718:9;19714:18;19705:6;19661:72;:::i;:::-;19780:9;19774:4;19770:20;19765:2;19754:9;19750:18;19743:48;19808:76;19879:4;19870:6;19808:76;:::i;:::-;19800:84;;19251:640;;;;;;;:::o;19897:332::-;20018:4;20056:2;20045:9;20041:18;20033:26;;20069:71;20137:1;20126:9;20122:17;20113:6;20069:71;:::i;:::-;20150:72;20218:2;20207:9;20203:18;20194:6;20150:72;:::i;:::-;19897:332;;;;;:::o;20235:210::-;20322:4;20360:2;20349:9;20345:18;20337:26;;20373:65;20435:1;20424:9;20420:17;20411:6;20373:65;:::i;:::-;20235:210;;;;:::o;20451:333::-;20574:4;20612:2;20601:9;20597:18;20589:26;;20661:9;20655:4;20651:20;20647:1;20636:9;20632:17;20625:47;20689:88;20772:4;20763:6;20755;20689:88;:::i;:::-;20681:96;;20451:333;;;;;:::o;20790:313::-;20903:4;20941:2;20930:9;20926:18;20918:26;;20990:9;20984:4;20980:20;20976:1;20965:9;20961:17;20954:47;21018:78;21091:4;21082:6;21018:78;:::i;:::-;21010:86;;20790:313;;;;:::o;21109:419::-;21275:4;21313:2;21302:9;21298:18;21290:26;;21362:9;21356:4;21352:20;21348:1;21337:9;21333:17;21326:47;21390:131;21516:4;21390:131;:::i;:::-;21382:139;;21109:419;;;:::o;21534:::-;21700:4;21738:2;21727:9;21723:18;21715:26;;21787:9;21781:4;21777:20;21773:1;21762:9;21758:17;21751:47;21815:131;21941:4;21815:131;:::i;:::-;21807:139;;21534:419;;;:::o;21959:::-;22125:4;22163:2;22152:9;22148:18;22140:26;;22212:9;22206:4;22202:20;22198:1;22187:9;22183:17;22176:47;22240:131;22366:4;22240:131;:::i;:::-;22232:139;;21959:419;;;:::o;22384:::-;22550:4;22588:2;22577:9;22573:18;22565:26;;22637:9;22631:4;22627:20;22623:1;22612:9;22608:17;22601:47;22665:131;22791:4;22665:131;:::i;:::-;22657:139;;22384:419;;;:::o;22809:::-;22975:4;23013:2;23002:9;22998:18;22990:26;;23062:9;23056:4;23052:20;23048:1;23037:9;23033:17;23026:47;23090:131;23216:4;23090:131;:::i;:::-;23082:139;;22809:419;;;:::o;23234:::-;23400:4;23438:2;23427:9;23423:18;23415:26;;23487:9;23481:4;23477:20;23473:1;23462:9;23458:17;23451:47;23515:131;23641:4;23515:131;:::i;:::-;23507:139;;23234:419;;;:::o;23659:::-;23825:4;23863:2;23852:9;23848:18;23840:26;;23912:9;23906:4;23902:20;23898:1;23887:9;23883:17;23876:47;23940:131;24066:4;23940:131;:::i;:::-;23932:139;;23659:419;;;:::o;24084:::-;24250:4;24288:2;24277:9;24273:18;24265:26;;24337:9;24331:4;24327:20;24323:1;24312:9;24308:17;24301:47;24365:131;24491:4;24365:131;:::i;:::-;24357:139;;24084:419;;;:::o;24509:::-;24675:4;24713:2;24702:9;24698:18;24690:26;;24762:9;24756:4;24752:20;24748:1;24737:9;24733:17;24726:47;24790:131;24916:4;24790:131;:::i;:::-;24782:139;;24509:419;;;:::o;24934:::-;25100:4;25138:2;25127:9;25123:18;25115:26;;25187:9;25181:4;25177:20;25173:1;25162:9;25158:17;25151:47;25215:131;25341:4;25215:131;:::i;:::-;25207:139;;24934:419;;;:::o;25359:::-;25525:4;25563:2;25552:9;25548:18;25540:26;;25612:9;25606:4;25602:20;25598:1;25587:9;25583:17;25576:47;25640:131;25766:4;25640:131;:::i;:::-;25632:139;;25359:419;;;:::o;25784:::-;25950:4;25988:2;25977:9;25973:18;25965:26;;26037:9;26031:4;26027:20;26023:1;26012:9;26008:17;26001:47;26065:131;26191:4;26065:131;:::i;:::-;26057:139;;25784:419;;;:::o;26209:::-;26375:4;26413:2;26402:9;26398:18;26390:26;;26462:9;26456:4;26452:20;26448:1;26437:9;26433:17;26426:47;26490:131;26616:4;26490:131;:::i;:::-;26482:139;;26209:419;;;:::o;26634:::-;26800:4;26838:2;26827:9;26823:18;26815:26;;26887:9;26881:4;26877:20;26873:1;26862:9;26858:17;26851:47;26915:131;27041:4;26915:131;:::i;:::-;26907:139;;26634:419;;;:::o;27059:::-;27225:4;27263:2;27252:9;27248:18;27240:26;;27312:9;27306:4;27302:20;27298:1;27287:9;27283:17;27276:47;27340:131;27466:4;27340:131;:::i;:::-;27332:139;;27059:419;;;:::o;27484:::-;27650:4;27688:2;27677:9;27673:18;27665:26;;27737:9;27731:4;27727:20;27723:1;27712:9;27708:17;27701:47;27765:131;27891:4;27765:131;:::i;:::-;27757:139;;27484:419;;;:::o;27909:::-;28075:4;28113:2;28102:9;28098:18;28090:26;;28162:9;28156:4;28152:20;28148:1;28137:9;28133:17;28126:47;28190:131;28316:4;28190:131;:::i;:::-;28182:139;;27909:419;;;:::o;28334:::-;28500:4;28538:2;28527:9;28523:18;28515:26;;28587:9;28581:4;28577:20;28573:1;28562:9;28558:17;28551:47;28615:131;28741:4;28615:131;:::i;:::-;28607:139;;28334:419;;;:::o;28759:::-;28925:4;28963:2;28952:9;28948:18;28940:26;;29012:9;29006:4;29002:20;28998:1;28987:9;28983:17;28976:47;29040:131;29166:4;29040:131;:::i;:::-;29032:139;;28759:419;;;:::o;29184:::-;29350:4;29388:2;29377:9;29373:18;29365:26;;29437:9;29431:4;29427:20;29423:1;29412:9;29408:17;29401:47;29465:131;29591:4;29465:131;:::i;:::-;29457:139;;29184:419;;;:::o;29609:::-;29775:4;29813:2;29802:9;29798:18;29790:26;;29862:9;29856:4;29852:20;29848:1;29837:9;29833:17;29826:47;29890:131;30016:4;29890:131;:::i;:::-;29882:139;;29609:419;;;:::o;30034:::-;30200:4;30238:2;30227:9;30223:18;30215:26;;30287:9;30281:4;30277:20;30273:1;30262:9;30258:17;30251:47;30315:131;30441:4;30315:131;:::i;:::-;30307:139;;30034:419;;;:::o;30459:222::-;30552:4;30590:2;30579:9;30575:18;30567:26;;30603:71;30671:1;30660:9;30656:17;30647:6;30603:71;:::i;:::-;30459:222;;;;:::o;30687:129::-;30721:6;30748:20;;:::i;:::-;30738:30;;30777:33;30805:4;30797:6;30777:33;:::i;:::-;30687:129;;;:::o;30822:75::-;30855:6;30888:2;30882:9;30872:19;;30822:75;:::o;30903:307::-;30964:4;31054:18;31046:6;31043:30;31040:56;;;31076:18;;:::i;:::-;31040:56;31114:29;31136:6;31114:29;:::i;:::-;31106:37;;31198:4;31192;31188:15;31180:23;;30903:307;;;:::o;31216:308::-;31278:4;31368:18;31360:6;31357:30;31354:56;;;31390:18;;:::i;:::-;31354:56;31428:29;31450:6;31428:29;:::i;:::-;31420:37;;31512:4;31506;31502:15;31494:23;;31216:308;;;:::o;31530:98::-;31581:6;31615:5;31609:12;31599:22;;31530:98;;;:::o;31634:99::-;31686:6;31720:5;31714:12;31704:22;;31634:99;;;:::o;31739:168::-;31822:11;31856:6;31851:3;31844:19;31896:4;31891:3;31887:14;31872:29;;31739:168;;;;:::o;31913:169::-;31997:11;32031:6;32026:3;32019:19;32071:4;32066:3;32062:14;32047:29;;31913:169;;;;:::o;32088:305::-;32128:3;32147:20;32165:1;32147:20;:::i;:::-;32142:25;;32181:20;32199:1;32181:20;:::i;:::-;32176:25;;32335:1;32267:66;32263:74;32260:1;32257:81;32254:107;;;32341:18;;:::i;:::-;32254:107;32385:1;32382;32378:9;32371:16;;32088:305;;;;:::o;32399:185::-;32439:1;32456:20;32474:1;32456:20;:::i;:::-;32451:25;;32490:20;32508:1;32490:20;:::i;:::-;32485:25;;32529:1;32519:35;;32534:18;;:::i;:::-;32519:35;32576:1;32573;32569:9;32564:14;;32399:185;;;;:::o;32590:348::-;32630:7;32653:20;32671:1;32653:20;:::i;:::-;32648:25;;32687:20;32705:1;32687:20;:::i;:::-;32682:25;;32875:1;32807:66;32803:74;32800:1;32797:81;32792:1;32785:9;32778:17;32774:105;32771:131;;;32882:18;;:::i;:::-;32771:131;32930:1;32927;32923:9;32912:20;;32590:348;;;;:::o;32944:191::-;32984:4;33004:20;33022:1;33004:20;:::i;:::-;32999:25;;33038:20;33056:1;33038:20;:::i;:::-;33033:25;;33077:1;33074;33071:8;33068:34;;;33082:18;;:::i;:::-;33068:34;33127:1;33124;33120:9;33112:17;;32944:191;;;;:::o;33141:96::-;33178:7;33207:24;33225:5;33207:24;:::i;:::-;33196:35;;33141:96;;;:::o;33243:90::-;33277:7;33320:5;33313:13;33306:21;33295:32;;33243:90;;;:::o;33339:149::-;33375:7;33415:66;33408:5;33404:78;33393:89;;33339:149;;;:::o;33494:126::-;33531:7;33571:42;33564:5;33560:54;33549:65;;33494:126;;;:::o;33626:77::-;33663:7;33692:5;33681:16;;33626:77;;;:::o;33709:154::-;33793:6;33788:3;33783;33770:30;33855:1;33846:6;33841:3;33837:16;33830:27;33709:154;;;:::o;33869:307::-;33937:1;33947:113;33961:6;33958:1;33955:13;33947:113;;;34046:1;34041:3;34037:11;34031:18;34027:1;34022:3;34018:11;34011:39;33983:2;33980:1;33976:10;33971:15;;33947:113;;;34078:6;34075:1;34072:13;34069:101;;;34158:1;34149:6;34144:3;34140:16;34133:27;34069:101;33918:258;33869:307;;;:::o;34182:320::-;34226:6;34263:1;34257:4;34253:12;34243:22;;34310:1;34304:4;34300:12;34331:18;34321:81;;34387:4;34379:6;34375:17;34365:27;;34321:81;34449:2;34441:6;34438:14;34418:18;34415:38;34412:84;;;34468:18;;:::i;:::-;34412:84;34233:269;34182:320;;;:::o;34508:281::-;34591:27;34613:4;34591:27;:::i;:::-;34583:6;34579:40;34721:6;34709:10;34706:22;34685:18;34673:10;34670:34;34667:62;34664:88;;;34732:18;;:::i;:::-;34664:88;34772:10;34768:2;34761:22;34551:238;34508:281;;:::o;34795:233::-;34834:3;34857:24;34875:5;34857:24;:::i;:::-;34848:33;;34903:66;34896:5;34893:77;34890:103;;;34973:18;;:::i;:::-;34890:103;35020:1;35013:5;35009:13;35002:20;;34795:233;;;:::o;35034:180::-;35082:77;35079:1;35072:88;35179:4;35176:1;35169:15;35203:4;35200:1;35193:15;35220:180;35268:77;35265:1;35258:88;35365:4;35362:1;35355:15;35389:4;35386:1;35379:15;35406:180;35454:77;35451:1;35444:88;35551:4;35548:1;35541:15;35575:4;35572:1;35565:15;35592:180;35640:77;35637:1;35630:88;35737:4;35734:1;35727:15;35761:4;35758:1;35751:15;35778:180;35826:77;35823:1;35816:88;35923:4;35920:1;35913:15;35947:4;35944:1;35937:15;35964:180;36012:77;36009:1;36002:88;36109:4;36106:1;36099:15;36133:4;36130:1;36123:15;36150:117;36259:1;36256;36249:12;36273:117;36382:1;36379;36372:12;36396:117;36505:1;36502;36495:12;36519:117;36628:1;36625;36618:12;36642:117;36751:1;36748;36741:12;36765:117;36874:1;36871;36864:12;36888:102;36929:6;36980:2;36976:7;36971:2;36964:5;36960:14;36956:28;36946:38;;36888:102;;;:::o;36996:230::-;37136:34;37132:1;37124:6;37120:14;37113:58;37205:13;37200:2;37192:6;37188:15;37181:38;36996:230;:::o;37232:237::-;37372:34;37368:1;37360:6;37356:14;37349:58;37441:20;37436:2;37428:6;37424:15;37417:45;37232:237;:::o;37475:167::-;37615:19;37611:1;37603:6;37599:14;37592:43;37475:167;:::o;37648:225::-;37788:34;37784:1;37776:6;37772:14;37765:58;37857:8;37852:2;37844:6;37840:15;37833:33;37648:225;:::o;37879:178::-;38019:30;38015:1;38007:6;38003:14;37996:54;37879:178;:::o;38063:223::-;38203:34;38199:1;38191:6;38187:14;38180:58;38272:6;38267:2;38259:6;38255:15;38248:31;38063:223;:::o;38292:175::-;38432:27;38428:1;38420:6;38416:14;38409:51;38292:175;:::o;38473:231::-;38613:34;38609:1;38601:6;38597:14;38590:58;38682:14;38677:2;38669:6;38665:15;38658:39;38473:231;:::o;38710:243::-;38850:34;38846:1;38838:6;38834:14;38827:58;38919:26;38914:2;38906:6;38902:15;38895:51;38710:243;:::o;38959:229::-;39099:34;39095:1;39087:6;39083:14;39076:58;39168:12;39163:2;39155:6;39151:15;39144:37;38959:229;:::o;39194:228::-;39334:34;39330:1;39322:6;39318:14;39311:58;39403:11;39398:2;39390:6;39386:15;39379:36;39194:228;:::o;39428:182::-;39568:34;39564:1;39556:6;39552:14;39545:58;39428:182;:::o;39616:231::-;39756:34;39752:1;39744:6;39740:14;39733:58;39825:14;39820:2;39812:6;39808:15;39801:39;39616:231;:::o;39853:166::-;39993:18;39989:1;39981:6;39977:14;39970:42;39853:166;:::o;40025:182::-;40165:34;40161:1;40153:6;40149:14;40142:58;40025:182;:::o;40213:167::-;40353:19;40349:1;40341:6;40337:14;40330:43;40213:167;:::o;40386:228::-;40526:34;40522:1;40514:6;40510:14;40503:58;40595:11;40590:2;40582:6;40578:15;40571:36;40386:228;:::o;40620:234::-;40760:34;40756:1;40748:6;40744:14;40737:58;40829:17;40824:2;40816:6;40812:15;40805:42;40620:234;:::o;40860:220::-;41000:34;40996:1;40988:6;40984:14;40977:58;41069:3;41064:2;41056:6;41052:15;41045:28;40860:220;:::o;41086:172::-;41226:24;41222:1;41214:6;41210:14;41203:48;41086:172;:::o;41264:236::-;41404:34;41400:1;41392:6;41388:14;41381:58;41473:19;41468:2;41460:6;41456:15;41449:44;41264:236;:::o;41506:231::-;41646:34;41642:1;41634:6;41630:14;41623:58;41715:14;41710:2;41702:6;41698:15;41691:39;41506:231;:::o;41743:122::-;41816:24;41834:5;41816:24;:::i;:::-;41809:5;41806:35;41796:63;;41855:1;41852;41845:12;41796:63;41743:122;:::o;41871:116::-;41941:21;41956:5;41941:21;:::i;:::-;41934:5;41931:32;41921:60;;41977:1;41974;41967:12;41921:60;41871:116;:::o;41993:120::-;42065:23;42082:5;42065:23;:::i;:::-;42058:5;42055:34;42045:62;;42103:1;42100;42093:12;42045:62;41993:120;:::o;42119:122::-;42192:24;42210:5;42192:24;:::i;:::-;42185:5;42182:35;42172:63;;42231:1;42228;42221:12;42172:63;42119:122;:::o
Swarm Source
ipfs://a8ffe7d5149932c8cd1c9753141d3025427e5039b265e5b7dee2d0de9b5c13b9
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.