ERC-20
Overview
Max Total Supply
5,256,969 MATH
Holders
12
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
10,000 MATHValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MathGold
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-18 */ // SPDX-License-Identifier: UNLICENSED /* ▄▄▄▄███▄▄▄▄ ▄████████ ███ ▄█ █▄ ▄██████▄ ▄██████▄ ▄█ ████████▄ ▄██▀▀▀███▀▀▀██▄ ███ ███ ▀█████████▄ ███ ███ ███ ███ ███ ███ ███ ███ ▀███ ███ ███ ███ ███ ███ ▀███▀▀██ ███ ███ ███ █▀ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ▀ ▄███▄▄▄▄███▄▄ ▄███ ███ ███ ███ ███ ███ ███ ███ ███ ▀███████████ ███ ▀▀███▀▀▀▀███▀ ▀▀███ ████▄ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███▌ ▄ ███ ▄███ ▀█ ███ █▀ ███ █▀ ▄████▀ ███ █▀ ████████▀ ▀██████▀ █████▄▄██ ████████▀ 𝕾𝖒𝖆𝖗𝖙 𝖈𝖔𝖓𝖙𝖗𝖆𝖈𝖙𝖘 𝖆𝖗𝖊 𝖈𝖆𝖘𝖙𝖑𝖊𝖘 𝖒𝖆𝖉𝖊 𝖔𝖋 𝖒𝖆𝖙𝖍, 𝖋𝖗𝖊𝖊𝖑𝖞 𝖙𝖗𝖆𝖉𝖎𝖓𝖌 𝖜𝖎𝖙𝖍 𝖊𝖆𝖈𝖍 𝖔𝖙𝖍𝖊𝖗. 𝕱𝖔𝖗 𝖙𝖍𝖊 𝖊𝖙𝖊𝖗𝖓𝖆𝖑 𝖕𝖗𝖔𝖘𝖕𝖊𝖗𝖎𝖙𝖞 𝖔𝖋 𝖔𝖚𝖗 𝖔𝖓𝖈𝖍𝖆𝖎𝖓 𝖈𝖆𝖘𝖙𝖑𝖊. */ pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev 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; } /** * @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); } /// @title Math Gold for Terraforms holders! /// @author Will Papper <https://twitter.com/WillPapper> /// Modified by zefram.eth /// @notice This contract mints Math Gold for Math holders and provides /// administrative functions to the Math Gold DAO. It allows: /// * Terraforms holders to claim Math Gold /// * A DAO to set seasons for new opportunities to claim Math Gold /// * A DAO to mint Math Gold for use within the Mathcastles ecosystem /// @custom:unaudited This contract has not been audited. Use at your own risk. contract MathGold is Context, Ownable, ERC20 { // Math contract is available at https://etherscan.io/address/0xff9c1b15b16263c61d017ee9f65c50e4ae0113d7 address public mathContractAddress = 0x5BDf397bB2912859Dbd8011F320a222f79A28d2E; IERC721Enumerable public mathContract; // Give out 10,000 Math Gold for every Math that a user holds uint256 public mathGoldPerTokenId = 10000 * (10**decimals()); // tokenIdStart of 1 uint256 public tokenIdStart = 1; // tokenIdEnd of 4196 uint256 public tokenIdEnd = 4196; // Seasons are used to allow users to claim tokens regularly. Seasons are // decided by the DAO. uint256 public season = 0; // Track claimed tokens within a season // IMPORTANT: The format of the mapping is: // claimedForSeason[season][tokenId][claimed] mapping(uint256 => mapping(uint256 => bool)) public seasonClaimedByTokenId; constructor() Ownable() ERC20("Math Gold", "MATH") { mathContract = IERC721Enumerable(mathContractAddress); // it's fair launch my dear apes _mint(0x5f350bF5feE8e254D6077f8661E9C7B83a30364e, 4206969 * (10**decimals())); } /// @notice Claim Math Gold for a given Math ID /// @param tokenId The tokenId of the Math NFT function claimById(uint256 tokenId) external { // Follow the Checks-Effects-Interactions pattern to prevent reentrancy // attacks // Checks // Check that the msgSender owns the token that is being claimed require( _msgSender() == mathContract.ownerOf(tokenId), "MUST_OWN_TOKEN_ID" ); // Further Checks, Effects, and Interactions are contained within the // _claim() function _claim(tokenId, _msgSender()); } /// @notice Claim Math Gold for all tokens owned by the sender /// @notice This function will run out of gas if you have too much loot! If /// this is a concern, you should use claimRangeForOwner and claim Math /// Gold in batches. function claimAllForOwner() external { uint256 tokenBalanceOwner = mathContract.balanceOf(_msgSender()); // Checks require(tokenBalanceOwner > 0, "NO_TOKENS_OWNED"); // i < tokenBalanceOwner because tokenBalanceOwner is 1-indexed for (uint256 i = 0; i < tokenBalanceOwner; i++) { // Further Checks, Effects, and Interactions are contained within // the _claim() function _claim( mathContract.tokenOfOwnerByIndex(_msgSender(), i), _msgSender() ); } } /// @notice Claim Math Gold for all tokens owned by the sender within a /// given range /// @notice This function is useful if you own too much Math to claim all at /// once or if you want to leave some Math unclaimed. If you leave Math /// unclaimed, however, you cannot claim it once the next season starts. function claimRangeForOwner(uint256 ownerIndexStart, uint256 ownerIndexEnd) external { uint256 tokenBalanceOwner = mathContract.balanceOf(_msgSender()); // Checks require(tokenBalanceOwner > 0, "NO_TOKENS_OWNED"); // We use < for ownerIndexEnd and tokenBalanceOwner because // tokenOfOwnerByIndex is 0-indexed while the token balance is 1-indexed require( ownerIndexStart >= 0 && ownerIndexEnd < tokenBalanceOwner, "INDEX_OUT_OF_RANGE" ); // i <= ownerIndexEnd because ownerIndexEnd is 0-indexed for (uint256 i = ownerIndexStart; i <= ownerIndexEnd; i++) { // Further Checks, Effects, and Interactions are contained within // the _claim() function _claim( mathContract.tokenOfOwnerByIndex(_msgSender(), i), _msgSender() ); } } /// @dev Internal function to mint Math upon claiming function _claim(uint256 tokenId, address tokenOwner) internal { // Checks // Check that the token ID is in range // We use >= and <= to here because all of the token IDs are 0-indexed require( tokenId >= tokenIdStart && tokenId <= tokenIdEnd, "TOKEN_ID_OUT_OF_RANGE" ); // Check that Math Gold have not already been claimed this season // for a given tokenId require( !seasonClaimedByTokenId[season][tokenId], "GOLD_CLAIMED_FOR_TOKEN_ID" ); // Effects // Mark that Math Gold has been claimed for this season for the // given tokenId seasonClaimedByTokenId[season][tokenId] = true; // Interactions // Send Math Gold to the owner of the token ID _mint(tokenOwner, mathGoldPerTokenId); } /// @notice Allows the DAO to mint new tokens for use within the Math /// Ecosystem /// @param amountDisplayValue The amount of Math to mint. This should be /// input as the display value, not in raw decimals. If you want to mint /// 100 Math, you should enter "100" rather than the value of 100 * 10^18. function daoMint(uint256 amountDisplayValue) external onlyOwner { _mint(owner(), amountDisplayValue * (10**decimals())); } /// @notice Allows the DAO to set a new contract address for Math. This is /// relevant in the event that Math migrates to a new contract. /// @param mathContractAddress_ The new contract address for Math function daoSetMathContractAddress(address mathContractAddress_) external onlyOwner { mathContractAddress = mathContractAddress_; mathContract = IERC721Enumerable(mathContractAddress); } /// @notice Allows the DAO to set the token IDs that are eligible to claim /// Math /// @param tokenIdStart_ The start of the eligible token range /// @param tokenIdEnd_ The end of the eligible token range /// @dev This is relevant in case a future Math contract has a different /// total supply of Math function daoSetTokenIdRange(uint256 tokenIdStart_, uint256 tokenIdEnd_) external onlyOwner { tokenIdStart = tokenIdStart_; tokenIdEnd = tokenIdEnd_; } /// @notice Allows the DAO to set a season for new Math Gold claims /// @param season_ The season to use for claiming Math function daoSetSeason(uint256 season_) public onlyOwner { season = season_; } /// @notice Allows the DAO to set the amount of Math Gold that is /// claimed per token ID /// @param mathGoldDisplayValue The amount of Math a user can claim. /// This should be input as the display value, not in raw decimals. If you /// want to mint 100 Math, you should enter "100" rather than the value of /// 100 * 10^18. function daoSetMathGoldPerTokenId(uint256 mathGoldDisplayValue) public onlyOwner { mathGoldPerTokenId = mathGoldDisplayValue * (10**decimals()); } /// @notice Allows the DAO to set the season and Math Gold per token ID /// in one transaction. This ensures that there is not a gap where a user /// can claim more Math Gold than others /// @param season_ The season to use for claiming loot /// @param mathGoldDisplayValue The amount of Math a user can claim. /// This should be input as the display value, not in raw decimals. If you /// want to mint 100 Math, you should enter "100" rather than the value of /// 100 * 10^18. /// @dev We would save a tiny amount of gas by modifying the season and /// mathGold variables directly. It is better practice for security, /// however, to avoid repeating code. This function is so rarely used that /// it's not worth moving these values into their own internal function to /// skip the gas used on the modifier check. function daoSetSeasonAndMathGoldPerTokenID( uint256 season_, uint256 mathGoldDisplayValue ) external onlyOwner { daoSetSeason(season_); daoSetMathGoldPerTokenId(mathGoldDisplayValue); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAllForOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claimById","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ownerIndexStart","type":"uint256"},{"internalType":"uint256","name":"ownerIndexEnd","type":"uint256"}],"name":"claimRangeForOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountDisplayValue","type":"uint256"}],"name":"daoMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"mathContractAddress_","type":"address"}],"name":"daoSetMathContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mathGoldDisplayValue","type":"uint256"}],"name":"daoSetMathGoldPerTokenId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"season_","type":"uint256"}],"name":"daoSetSeason","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"season_","type":"uint256"},{"internalType":"uint256","name":"mathGoldDisplayValue","type":"uint256"}],"name":"daoSetSeasonAndMathGoldPerTokenID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenIdStart_","type":"uint256"},{"internalType":"uint256","name":"tokenIdEnd_","type":"uint256"}],"name":"daoSetTokenIdRange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mathContract","outputs":[{"internalType":"contract IERC721Enumerable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mathContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mathGoldPerTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"season","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"seasonClaimedByTokenId","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":"tokenIdEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenIdStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052735bdf397bb2912859dbd8011f320a222f79a28d2e600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000696200022360201b60201c565b600a6200007791906200066c565b612710620000869190620007a9565b6008556001600955611064600a556000600b55348015620000a657600080fd5b506040518060400160405280600981526020017f4d61746820476f6c6400000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d4154480000000000000000000000000000000000000000000000000000000081525062000133620001276200022c60201b60201c565b6200023460201b60201c565b81600490805190602001906200014b9291906200047c565b508060059080519060200190620001649291906200047c565b505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200021d735f350bf5fee8e254d6077f8661e9c7b83a30364e620001f36200022360201b60201c565b600a6200020191906200066c565b62403179620002119190620007a9565b620002f860201b60201c565b620008eb565b60006012905090565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200036b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003629062000564565b60405180910390fd5b6200037f600083836200047260201b60201c565b8060036000828254620003939190620005b4565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003eb9190620005b4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000452919062000586565b60405180910390a36200046e600083836200047760201b60201c565b5050565b505050565b505050565b8280546200048a9062000821565b90600052602060002090601f016020900481019282620004ae5760008555620004fa565b82601f10620004c957805160ff1916838001178555620004fa565b82800160010185558215620004fa579182015b82811115620004f9578251825591602001919060010190620004dc565b5b5090506200050991906200050d565b5090565b5b80821115620005285760008160009055506001016200050e565b5090565b60006200053b601f83620005a3565b91506200054882620008c2565b602082019050919050565b6200055e816200080a565b82525050565b600060208201905081810360008301526200057f816200052c565b9050919050565b60006020820190506200059d600083018462000553565b92915050565b600082825260208201905092915050565b6000620005c1826200080a565b9150620005ce836200080a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000606576200060562000857565b5b828201905092915050565b6000808291508390505b600185111562000663578086048111156200063b576200063a62000857565b5b60018516156200064b5780820291505b80810290506200065b85620008b5565b94506200061b565b94509492505050565b600062000679826200080a565b9150620006868362000814565b9250620006b57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620006bd565b905092915050565b600082620006cf5760019050620007a2565b81620006df5760009050620007a2565b8160018114620006f85760028114620007035762000739565b6001915050620007a2565b60ff84111562000718576200071762000857565b5b8360020a91508482111562000732576200073162000857565b5b50620007a2565b5060208310610133831016604e8410600b8410161715620007735782820a9050838111156200076d576200076c62000857565b5b620007a2565b62000782848484600162000611565b925090508184048111156200079c576200079b62000857565b5b81810290505b9392505050565b6000620007b6826200080a565b9150620007c3836200080a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620007ff57620007fe62000857565b5b828202905092915050565b6000819050919050565b600060ff82169050919050565b600060028204905060018216806200083a57607f821691505b6020821081141562000851576200085062000886565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612d1280620008fb6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806370a0823111610104578063becf7741116100a2578063dd62ed3e11610071578063dd62ed3e1461051f578063e5e808cb1461054f578063f2fde38b1461057f578063f751a8311461059b576101da565b8063becf7741146104bd578063c50b0fb0146104d9578063cbf0b276146104f7578063d23bfa1214610501576101da565b80638da5cb5b116100de5780638da5cb5b1461042157806395d89b411461043f578063a457c2d71461045d578063a9059cbb1461048d576101da565b806370a08231146103cb578063715018a6146103fb578063878e7ea514610405576101da565b8063364c3c281161017c57806343f428021161014b57806343f42802146103595780634da7808a1461037757806362759f6c146103935780636990be49146103af576101da565b8063364c3c28146102d357806339509351146102ef5780633f0ca1011461031f57806342e473151461033d576101da565b806319481994116101b8578063194819941461024b57806323b872dd146102675780632a38906214610297578063313ce567146102b5576101da565b806306fdde03146101df578063095ea7b3146101fd57806318160ddd1461022d575b600080fd5b6101e76105b9565b6040516101f491906122e8565b60405180910390f35b61021760048036038101906102129190611f03565b61064b565b60405161022491906122b2565b60405180910390f35b610235610669565b60405161024291906124ea565b60405180910390f35b61026560048036038101906102609190611e16565b610673565b005b610281600480360381019061027c9190611eb0565b610796565b60405161028e91906122b2565b60405180910390f35b61029f61088e565b6040516102ac91906124ea565b60405180910390f35b6102bd610894565b6040516102ca9190612505565b60405180910390f35b6102ed60048036038101906102e89190611f9d565b61089d565b005b61030960048036038101906103049190611f03565b61092f565b60405161031691906122b2565b60405180910390f35b6103276109db565b60405161033491906122cd565b60405180910390f35b61035760048036038101906103529190611f43565b610a01565b005b610361610a87565b60405161036e91906124ea565b60405180910390f35b610391600480360381019061038c9190611f9d565b610a8d565b005b6103ad60048036038101906103a89190611f43565b610b1b565b005b6103c960048036038101906103c49190611f43565b610bc9565b005b6103e560048036038101906103e09190611e16565b610c6d565b6040516103f291906124ea565b60405180910390f35b610403610cb6565b005b61041f600480360381019061041a9190611f9d565b610d3e565b005b610429610f70565b604051610436919061226e565b60405180910390f35b610447610f99565b60405161045491906122e8565b60405180910390f35b61047760048036038101906104729190611f03565b61102b565b60405161048491906122b2565b60405180910390f35b6104a760048036038101906104a29190611f03565b611116565b6040516104b491906122b2565b60405180910390f35b6104d760048036038101906104d29190611f43565b611134565b005b6104e1611267565b6040516104ee91906124ea565b60405180910390f35b6104ff61126d565b005b61050961144c565b60405161051691906124ea565b60405180910390f35b61053960048036038101906105349190611e70565b611452565b60405161054691906124ea565b60405180910390f35b61056960048036038101906105649190611f9d565b6114d9565b60405161057691906122b2565b60405180910390f35b61059960048036038101906105949190611e16565b611508565b005b6105a3611600565b6040516105b0919061226e565b60405180910390f35b6060600480546105c89061281b565b80601f01602080910402602001604051908101604052809291908181526020018280546105f49061281b565b80156106415780601f1061061657610100808354040283529160200191610641565b820191906000526020600020905b81548152906001019060200180831161062457829003601f168201915b5050505050905090565b600061065f610658611626565b848461162e565b6001905092915050565b6000600354905090565b61067b611626565b73ffffffffffffffffffffffffffffffffffffffff16610699610f70565b73ffffffffffffffffffffffffffffffffffffffff16146106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e6906123ea565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006107a38484846117f9565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107ee611626565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561086e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610865906123ca565b60405180910390fd5b6108828561087a611626565b85840361162e565b60019150509392505050565b60095481565b60006012905090565b6108a5611626565b73ffffffffffffffffffffffffffffffffffffffff166108c3610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610919576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610910906123ea565b60405180910390fd5b61092282610a01565b61092b81610bc9565b5050565b60006109d161093c611626565b84846002600061094a611626565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109cc919061253c565b61162e565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a09611626565b73ffffffffffffffffffffffffffffffffffffffff16610a27610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a74906123ea565b60405180910390fd5b80600b8190555050565b600a5481565b610a95611626565b73ffffffffffffffffffffffffffffffffffffffff16610ab3610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b00906123ea565b60405180910390fd5b8160098190555080600a819055505050565b610b23611626565b73ffffffffffffffffffffffffffffffffffffffff16610b41610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e906123ea565b60405180910390fd5b610bc6610ba2610f70565b610baa610894565b600a610bb691906125e5565b83610bc19190612703565b611a7d565b50565b610bd1611626565b73ffffffffffffffffffffffffffffffffffffffff16610bef610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c906123ea565b60405180910390fd5b610c4d610894565b600a610c5991906125e5565b81610c649190612703565b60088190555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cbe611626565b73ffffffffffffffffffffffffffffffffffffffff16610cdc610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d29906123ea565b60405180910390fd5b610d3c6000611bde565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610d86611626565b6040518263ffffffff1660e01b8152600401610da2919061226e565b60206040518083038186803b158015610dba57600080fd5b505afa158015610dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df29190611f70565b905060008111610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e9061248a565b60405180910390fd5b60008310158015610e4757508082105b610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d9061232a565b60405180910390fd5b60008390505b828111610f6a57610f57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c59610edc611626565b846040518363ffffffff1660e01b8152600401610efa929190612289565b60206040518083038186803b158015610f1257600080fd5b505afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a9190611f70565b610f52611626565b611ca2565b8080610f629061284d565b915050610e8c565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610fa89061281b565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd49061281b565b80156110215780601f10610ff657610100808354040283529160200191611021565b820191906000526020600020905b81548152906001019060200180831161100457829003601f168201915b5050505050905090565b6000806002600061103a611626565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee906124aa565b60405180910390fd5b61110b611102611626565b8585840361162e565b600191505092915050565b600061112a611123611626565b84846117f9565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b815260040161118f91906124ea565b60206040518083038186803b1580156111a757600080fd5b505afa1580156111bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111df9190611e43565b73ffffffffffffffffffffffffffffffffffffffff166111fd611626565b73ffffffffffffffffffffffffffffffffffffffff1614611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a906123aa565b60405180910390fd5b6112648161125f611626565b611ca2565b50565b600b5481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316112b5611626565b6040518263ffffffff1660e01b81526004016112d1919061226e565b60206040518083038186803b1580156112e957600080fd5b505afa1580156112fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113219190611f70565b905060008111611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d9061248a565b60405180910390fd5b60005b8181101561144857611435600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c596113ba611626565b846040518363ffffffff1660e01b81526004016113d8929190612289565b60206040518083038186803b1580156113f057600080fd5b505afa158015611404573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114289190611f70565b611430611626565b611ca2565b80806114409061284d565b915050611369565b5050565b60085481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b611510611626565b73ffffffffffffffffffffffffffffffffffffffff1661152e610f70565b73ffffffffffffffffffffffffffffffffffffffff1614611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b906123ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115eb9061234a565b60405180910390fd5b6115fd81611bde565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561169e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116959061244a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561170e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117059061236a565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117ec91906124ea565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611869576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118609061240a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d09061230a565b60405180910390fd5b6118e4838383611db8565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561196b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119629061238a565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a00919061253c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a6491906124ea565b60405180910390a3611a77848484611dbd565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae4906124ca565b60405180910390fd5b611af960008383611db8565b8060036000828254611b0b919061253c565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b61919061253c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bc691906124ea565b60405180910390a3611bda60008383611dbd565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6009548210158015611cb65750600a548211155b611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec9061246a565b60405180910390fd5b600c6000600b548152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff1615611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d609061242a565b60405180910390fd5b6001600c6000600b548152602001908152602001600020600084815260200190815260200160002060006101000a81548160ff021916908315150217905550611db481600854611a7d565b5050565b505050565b505050565b600081359050611dd181612cae565b92915050565b600081519050611de681612cae565b92915050565b600081359050611dfb81612cc5565b92915050565b600081519050611e1081612cc5565b92915050565b600060208284031215611e2c57611e2b6128f4565b5b6000611e3a84828501611dc2565b91505092915050565b600060208284031215611e5957611e586128f4565b5b6000611e6784828501611dd7565b91505092915050565b60008060408385031215611e8757611e866128f4565b5b6000611e9585828601611dc2565b9250506020611ea685828601611dc2565b9150509250929050565b600080600060608486031215611ec957611ec86128f4565b5b6000611ed786828701611dc2565b9350506020611ee886828701611dc2565b9250506040611ef986828701611dec565b9150509250925092565b60008060408385031215611f1a57611f196128f4565b5b6000611f2885828601611dc2565b9250506020611f3985828601611dec565b9150509250929050565b600060208284031215611f5957611f586128f4565b5b6000611f6784828501611dec565b91505092915050565b600060208284031215611f8657611f856128f4565b5b6000611f9484828501611e01565b91505092915050565b60008060408385031215611fb457611fb36128f4565b5b6000611fc285828601611dec565b9250506020611fd385828601611dec565b9150509250929050565b611fe68161275d565b82525050565b611ff58161276f565b82525050565b612004816127b2565b82525050565b600061201582612520565b61201f818561252b565b935061202f8185602086016127e8565b612038816128f9565b840191505092915050565b600061205060238361252b565b915061205b82612917565b604082019050919050565b600061207360128361252b565b915061207e82612966565b602082019050919050565b600061209660268361252b565b91506120a18261298f565b604082019050919050565b60006120b960228361252b565b91506120c4826129de565b604082019050919050565b60006120dc60268361252b565b91506120e782612a2d565b604082019050919050565b60006120ff60118361252b565b915061210a82612a7c565b602082019050919050565b600061212260288361252b565b915061212d82612aa5565b604082019050919050565b600061214560208361252b565b915061215082612af4565b602082019050919050565b600061216860258361252b565b915061217382612b1d565b604082019050919050565b600061218b60198361252b565b915061219682612b6c565b602082019050919050565b60006121ae60248361252b565b91506121b982612b95565b604082019050919050565b60006121d160158361252b565b91506121dc82612be4565b602082019050919050565b60006121f4600f8361252b565b91506121ff82612c0d565b602082019050919050565b600061221760258361252b565b915061222282612c36565b604082019050919050565b600061223a601f8361252b565b915061224582612c85565b602082019050919050565b6122598161279b565b82525050565b612268816127a5565b82525050565b60006020820190506122836000830184611fdd565b92915050565b600060408201905061229e6000830185611fdd565b6122ab6020830184612250565b9392505050565b60006020820190506122c76000830184611fec565b92915050565b60006020820190506122e26000830184611ffb565b92915050565b60006020820190508181036000830152612302818461200a565b905092915050565b6000602082019050818103600083015261232381612043565b9050919050565b6000602082019050818103600083015261234381612066565b9050919050565b6000602082019050818103600083015261236381612089565b9050919050565b60006020820190508181036000830152612383816120ac565b9050919050565b600060208201905081810360008301526123a3816120cf565b9050919050565b600060208201905081810360008301526123c3816120f2565b9050919050565b600060208201905081810360008301526123e381612115565b9050919050565b6000602082019050818103600083015261240381612138565b9050919050565b600060208201905081810360008301526124238161215b565b9050919050565b600060208201905081810360008301526124438161217e565b9050919050565b60006020820190508181036000830152612463816121a1565b9050919050565b60006020820190508181036000830152612483816121c4565b9050919050565b600060208201905081810360008301526124a3816121e7565b9050919050565b600060208201905081810360008301526124c38161220a565b9050919050565b600060208201905081810360008301526124e38161222d565b9050919050565b60006020820190506124ff6000830184612250565b92915050565b600060208201905061251a600083018461225f565b92915050565b600081519050919050565b600082825260208201905092915050565b60006125478261279b565b91506125528361279b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561258757612586612896565b5b828201905092915050565b6000808291508390505b60018511156125dc578086048111156125b8576125b7612896565b5b60018516156125c75780820291505b80810290506125d58561290a565b945061259c565b94509492505050565b60006125f08261279b565b91506125fb836127a5565b92506126287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612630565b905092915050565b60008261264057600190506126fc565b8161264e57600090506126fc565b8160018114612664576002811461266e5761269d565b60019150506126fc565b60ff8411156126805761267f612896565b5b8360020a91508482111561269757612696612896565b5b506126fc565b5060208310610133831016604e8410600b84101617156126d25782820a9050838111156126cd576126cc612896565b5b6126fc565b6126df8484846001612592565b925090508184048111156126f6576126f5612896565b5b81810290505b9392505050565b600061270e8261279b565b91506127198361279b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561275257612751612896565b5b828202905092915050565b60006127688261277b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006127bd826127c4565b9050919050565b60006127cf826127d6565b9050919050565b60006127e18261277b565b9050919050565b60005b838110156128065780820151818401526020810190506127eb565b83811115612815576000848401525b50505050565b6000600282049050600182168061283357607f821691505b60208210811415612847576128466128c5565b5b50919050565b60006128588261279b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561288b5761288a612896565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f494e4445585f4f55545f4f465f52414e47450000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4d5553545f4f574e5f544f4b454e5f4944000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f474f4c445f434c41494d45445f464f525f544f4b454e5f494400000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e5f49445f4f55545f4f465f52414e47450000000000000000000000600082015250565b7f4e4f5f544f4b454e535f4f574e45440000000000000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612cb78161275d565b8114612cc257600080fd5b50565b612cce8161279b565b8114612cd957600080fd5b5056fea26469706673582212200b1db8d2d7673053a72d5c5f29814e8ea5e382bb78e04eaaa563acdc820fa88764736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806370a0823111610104578063becf7741116100a2578063dd62ed3e11610071578063dd62ed3e1461051f578063e5e808cb1461054f578063f2fde38b1461057f578063f751a8311461059b576101da565b8063becf7741146104bd578063c50b0fb0146104d9578063cbf0b276146104f7578063d23bfa1214610501576101da565b80638da5cb5b116100de5780638da5cb5b1461042157806395d89b411461043f578063a457c2d71461045d578063a9059cbb1461048d576101da565b806370a08231146103cb578063715018a6146103fb578063878e7ea514610405576101da565b8063364c3c281161017c57806343f428021161014b57806343f42802146103595780634da7808a1461037757806362759f6c146103935780636990be49146103af576101da565b8063364c3c28146102d357806339509351146102ef5780633f0ca1011461031f57806342e473151461033d576101da565b806319481994116101b8578063194819941461024b57806323b872dd146102675780632a38906214610297578063313ce567146102b5576101da565b806306fdde03146101df578063095ea7b3146101fd57806318160ddd1461022d575b600080fd5b6101e76105b9565b6040516101f491906122e8565b60405180910390f35b61021760048036038101906102129190611f03565b61064b565b60405161022491906122b2565b60405180910390f35b610235610669565b60405161024291906124ea565b60405180910390f35b61026560048036038101906102609190611e16565b610673565b005b610281600480360381019061027c9190611eb0565b610796565b60405161028e91906122b2565b60405180910390f35b61029f61088e565b6040516102ac91906124ea565b60405180910390f35b6102bd610894565b6040516102ca9190612505565b60405180910390f35b6102ed60048036038101906102e89190611f9d565b61089d565b005b61030960048036038101906103049190611f03565b61092f565b60405161031691906122b2565b60405180910390f35b6103276109db565b60405161033491906122cd565b60405180910390f35b61035760048036038101906103529190611f43565b610a01565b005b610361610a87565b60405161036e91906124ea565b60405180910390f35b610391600480360381019061038c9190611f9d565b610a8d565b005b6103ad60048036038101906103a89190611f43565b610b1b565b005b6103c960048036038101906103c49190611f43565b610bc9565b005b6103e560048036038101906103e09190611e16565b610c6d565b6040516103f291906124ea565b60405180910390f35b610403610cb6565b005b61041f600480360381019061041a9190611f9d565b610d3e565b005b610429610f70565b604051610436919061226e565b60405180910390f35b610447610f99565b60405161045491906122e8565b60405180910390f35b61047760048036038101906104729190611f03565b61102b565b60405161048491906122b2565b60405180910390f35b6104a760048036038101906104a29190611f03565b611116565b6040516104b491906122b2565b60405180910390f35b6104d760048036038101906104d29190611f43565b611134565b005b6104e1611267565b6040516104ee91906124ea565b60405180910390f35b6104ff61126d565b005b61050961144c565b60405161051691906124ea565b60405180910390f35b61053960048036038101906105349190611e70565b611452565b60405161054691906124ea565b60405180910390f35b61056960048036038101906105649190611f9d565b6114d9565b60405161057691906122b2565b60405180910390f35b61059960048036038101906105949190611e16565b611508565b005b6105a3611600565b6040516105b0919061226e565b60405180910390f35b6060600480546105c89061281b565b80601f01602080910402602001604051908101604052809291908181526020018280546105f49061281b565b80156106415780601f1061061657610100808354040283529160200191610641565b820191906000526020600020905b81548152906001019060200180831161062457829003601f168201915b5050505050905090565b600061065f610658611626565b848461162e565b6001905092915050565b6000600354905090565b61067b611626565b73ffffffffffffffffffffffffffffffffffffffff16610699610f70565b73ffffffffffffffffffffffffffffffffffffffff16146106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e6906123ea565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006107a38484846117f9565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107ee611626565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561086e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610865906123ca565b60405180910390fd5b6108828561087a611626565b85840361162e565b60019150509392505050565b60095481565b60006012905090565b6108a5611626565b73ffffffffffffffffffffffffffffffffffffffff166108c3610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610919576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610910906123ea565b60405180910390fd5b61092282610a01565b61092b81610bc9565b5050565b60006109d161093c611626565b84846002600061094a611626565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109cc919061253c565b61162e565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a09611626565b73ffffffffffffffffffffffffffffffffffffffff16610a27610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a74906123ea565b60405180910390fd5b80600b8190555050565b600a5481565b610a95611626565b73ffffffffffffffffffffffffffffffffffffffff16610ab3610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b00906123ea565b60405180910390fd5b8160098190555080600a819055505050565b610b23611626565b73ffffffffffffffffffffffffffffffffffffffff16610b41610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e906123ea565b60405180910390fd5b610bc6610ba2610f70565b610baa610894565b600a610bb691906125e5565b83610bc19190612703565b611a7d565b50565b610bd1611626565b73ffffffffffffffffffffffffffffffffffffffff16610bef610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c906123ea565b60405180910390fd5b610c4d610894565b600a610c5991906125e5565b81610c649190612703565b60088190555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cbe611626565b73ffffffffffffffffffffffffffffffffffffffff16610cdc610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d29906123ea565b60405180910390fd5b610d3c6000611bde565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610d86611626565b6040518263ffffffff1660e01b8152600401610da2919061226e565b60206040518083038186803b158015610dba57600080fd5b505afa158015610dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df29190611f70565b905060008111610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e9061248a565b60405180910390fd5b60008310158015610e4757508082105b610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d9061232a565b60405180910390fd5b60008390505b828111610f6a57610f57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c59610edc611626565b846040518363ffffffff1660e01b8152600401610efa929190612289565b60206040518083038186803b158015610f1257600080fd5b505afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a9190611f70565b610f52611626565b611ca2565b8080610f629061284d565b915050610e8c565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610fa89061281b565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd49061281b565b80156110215780601f10610ff657610100808354040283529160200191611021565b820191906000526020600020905b81548152906001019060200180831161100457829003601f168201915b5050505050905090565b6000806002600061103a611626565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee906124aa565b60405180910390fd5b61110b611102611626565b8585840361162e565b600191505092915050565b600061112a611123611626565b84846117f9565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b815260040161118f91906124ea565b60206040518083038186803b1580156111a757600080fd5b505afa1580156111bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111df9190611e43565b73ffffffffffffffffffffffffffffffffffffffff166111fd611626565b73ffffffffffffffffffffffffffffffffffffffff1614611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a906123aa565b60405180910390fd5b6112648161125f611626565b611ca2565b50565b600b5481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316112b5611626565b6040518263ffffffff1660e01b81526004016112d1919061226e565b60206040518083038186803b1580156112e957600080fd5b505afa1580156112fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113219190611f70565b905060008111611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d9061248a565b60405180910390fd5b60005b8181101561144857611435600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c596113ba611626565b846040518363ffffffff1660e01b81526004016113d8929190612289565b60206040518083038186803b1580156113f057600080fd5b505afa158015611404573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114289190611f70565b611430611626565b611ca2565b80806114409061284d565b915050611369565b5050565b60085481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b611510611626565b73ffffffffffffffffffffffffffffffffffffffff1661152e610f70565b73ffffffffffffffffffffffffffffffffffffffff1614611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b906123ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115eb9061234a565b60405180910390fd5b6115fd81611bde565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561169e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116959061244a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561170e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117059061236a565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117ec91906124ea565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611869576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118609061240a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d09061230a565b60405180910390fd5b6118e4838383611db8565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561196b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119629061238a565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a00919061253c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a6491906124ea565b60405180910390a3611a77848484611dbd565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae4906124ca565b60405180910390fd5b611af960008383611db8565b8060036000828254611b0b919061253c565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b61919061253c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bc691906124ea565b60405180910390a3611bda60008383611dbd565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6009548210158015611cb65750600a548211155b611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec9061246a565b60405180910390fd5b600c6000600b548152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff1615611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d609061242a565b60405180910390fd5b6001600c6000600b548152602001908152602001600020600084815260200190815260200160002060006101000a81548160ff021916908315150217905550611db481600854611a7d565b5050565b505050565b505050565b600081359050611dd181612cae565b92915050565b600081519050611de681612cae565b92915050565b600081359050611dfb81612cc5565b92915050565b600081519050611e1081612cc5565b92915050565b600060208284031215611e2c57611e2b6128f4565b5b6000611e3a84828501611dc2565b91505092915050565b600060208284031215611e5957611e586128f4565b5b6000611e6784828501611dd7565b91505092915050565b60008060408385031215611e8757611e866128f4565b5b6000611e9585828601611dc2565b9250506020611ea685828601611dc2565b9150509250929050565b600080600060608486031215611ec957611ec86128f4565b5b6000611ed786828701611dc2565b9350506020611ee886828701611dc2565b9250506040611ef986828701611dec565b9150509250925092565b60008060408385031215611f1a57611f196128f4565b5b6000611f2885828601611dc2565b9250506020611f3985828601611dec565b9150509250929050565b600060208284031215611f5957611f586128f4565b5b6000611f6784828501611dec565b91505092915050565b600060208284031215611f8657611f856128f4565b5b6000611f9484828501611e01565b91505092915050565b60008060408385031215611fb457611fb36128f4565b5b6000611fc285828601611dec565b9250506020611fd385828601611dec565b9150509250929050565b611fe68161275d565b82525050565b611ff58161276f565b82525050565b612004816127b2565b82525050565b600061201582612520565b61201f818561252b565b935061202f8185602086016127e8565b612038816128f9565b840191505092915050565b600061205060238361252b565b915061205b82612917565b604082019050919050565b600061207360128361252b565b915061207e82612966565b602082019050919050565b600061209660268361252b565b91506120a18261298f565b604082019050919050565b60006120b960228361252b565b91506120c4826129de565b604082019050919050565b60006120dc60268361252b565b91506120e782612a2d565b604082019050919050565b60006120ff60118361252b565b915061210a82612a7c565b602082019050919050565b600061212260288361252b565b915061212d82612aa5565b604082019050919050565b600061214560208361252b565b915061215082612af4565b602082019050919050565b600061216860258361252b565b915061217382612b1d565b604082019050919050565b600061218b60198361252b565b915061219682612b6c565b602082019050919050565b60006121ae60248361252b565b91506121b982612b95565b604082019050919050565b60006121d160158361252b565b91506121dc82612be4565b602082019050919050565b60006121f4600f8361252b565b91506121ff82612c0d565b602082019050919050565b600061221760258361252b565b915061222282612c36565b604082019050919050565b600061223a601f8361252b565b915061224582612c85565b602082019050919050565b6122598161279b565b82525050565b612268816127a5565b82525050565b60006020820190506122836000830184611fdd565b92915050565b600060408201905061229e6000830185611fdd565b6122ab6020830184612250565b9392505050565b60006020820190506122c76000830184611fec565b92915050565b60006020820190506122e26000830184611ffb565b92915050565b60006020820190508181036000830152612302818461200a565b905092915050565b6000602082019050818103600083015261232381612043565b9050919050565b6000602082019050818103600083015261234381612066565b9050919050565b6000602082019050818103600083015261236381612089565b9050919050565b60006020820190508181036000830152612383816120ac565b9050919050565b600060208201905081810360008301526123a3816120cf565b9050919050565b600060208201905081810360008301526123c3816120f2565b9050919050565b600060208201905081810360008301526123e381612115565b9050919050565b6000602082019050818103600083015261240381612138565b9050919050565b600060208201905081810360008301526124238161215b565b9050919050565b600060208201905081810360008301526124438161217e565b9050919050565b60006020820190508181036000830152612463816121a1565b9050919050565b60006020820190508181036000830152612483816121c4565b9050919050565b600060208201905081810360008301526124a3816121e7565b9050919050565b600060208201905081810360008301526124c38161220a565b9050919050565b600060208201905081810360008301526124e38161222d565b9050919050565b60006020820190506124ff6000830184612250565b92915050565b600060208201905061251a600083018461225f565b92915050565b600081519050919050565b600082825260208201905092915050565b60006125478261279b565b91506125528361279b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561258757612586612896565b5b828201905092915050565b6000808291508390505b60018511156125dc578086048111156125b8576125b7612896565b5b60018516156125c75780820291505b80810290506125d58561290a565b945061259c565b94509492505050565b60006125f08261279b565b91506125fb836127a5565b92506126287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612630565b905092915050565b60008261264057600190506126fc565b8161264e57600090506126fc565b8160018114612664576002811461266e5761269d565b60019150506126fc565b60ff8411156126805761267f612896565b5b8360020a91508482111561269757612696612896565b5b506126fc565b5060208310610133831016604e8410600b84101617156126d25782820a9050838111156126cd576126cc612896565b5b6126fc565b6126df8484846001612592565b925090508184048111156126f6576126f5612896565b5b81810290505b9392505050565b600061270e8261279b565b91506127198361279b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561275257612751612896565b5b828202905092915050565b60006127688261277b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006127bd826127c4565b9050919050565b60006127cf826127d6565b9050919050565b60006127e18261277b565b9050919050565b60005b838110156128065780820151818401526020810190506127eb565b83811115612815576000848401525b50505050565b6000600282049050600182168061283357607f821691505b60208210811415612847576128466128c5565b5b50919050565b60006128588261279b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561288b5761288a612896565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f494e4445585f4f55545f4f465f52414e47450000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4d5553545f4f574e5f544f4b454e5f4944000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f474f4c445f434c41494d45445f464f525f544f4b454e5f494400000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e5f49445f4f55545f4f465f52414e47450000000000000000000000600082015250565b7f4e4f5f544f4b454e535f4f574e45440000000000000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612cb78161275d565b8114612cc257600080fd5b50565b612cce8161279b565b8114612cd957600080fd5b5056fea26469706673582212200b1db8d2d7673053a72d5c5f29814e8ea5e382bb78e04eaaa563acdc820fa88764736f6c63430008070033
Deployed Bytecode Sourcemap
28735:8324:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10581:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12889:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11701:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34388:232;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13581:529;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29200:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11543:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36825:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14519:297;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28992:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35299:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29267:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34962:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34024:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35755:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11872:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4565:94;;;:::i;:::-;;31771:953;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3914:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10800:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15319:482;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12262:216;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30045:525;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29415:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30830:598;;;:::i;:::-;;29105:60;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12541:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29594:74;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4814:229;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28897:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10581:100;10635:13;10668:5;10661:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10581:100;:::o;12889:210::-;13008:4;13030:39;13039:12;:10;:12::i;:::-;13053:7;13062:6;13030:8;:39::i;:::-;13087:4;13080:11;;12889:210;;;;:::o;11701:108::-;11762:7;11789:12;;11782:19;;11701:108;:::o;34388:232::-;4145:12;:10;:12::i;:::-;4134:23;;:7;:5;:7::i;:::-;:23;;;4126:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34528:20:::1;34506:19;;:42;;;;;;;;;;;;;;;;;;34592:19;;;;;;;;;;;34559:12;;:53;;;;;;;;;;;;;;;;;;34388:232:::0;:::o;13581:529::-;13721:4;13738:36;13748:6;13756:9;13767:6;13738:9;:36::i;:::-;13787:24;13814:11;:19;13826:6;13814:19;;;;;;;;;;;;;;;:33;13834:12;:10;:12::i;:::-;13814:33;;;;;;;;;;;;;;;;13787:60;;13900:6;13880:16;:26;;13858:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14010:57;14019:6;14027:12;:10;:12::i;:::-;14060:6;14041:16;:25;14010:8;:57::i;:::-;14098:4;14091:11;;;13581:529;;;;;:::o;29200:31::-;;;;:::o;11543:93::-;11601:5;11626:2;11619:9;;11543:93;:::o;36825:231::-;4145:12;:10;:12::i;:::-;4134:23;;:7;:5;:7::i;:::-;:23;;;4126:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36970:21:::1;36983:7;36970:12;:21::i;:::-;37002:46;37027:20;37002:24;:46::i;:::-;36825:231:::0;;:::o;14519:297::-;14634:4;14656:130;14679:12;:10;:12::i;:::-;14706:7;14765:10;14728:11;:25;14740:12;:10;:12::i;:::-;14728:25;;;;;;;;;;;;;;;:34;14754:7;14728:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14656:8;:130::i;:::-;14804:4;14797:11;;14519:297;;;;:::o;28992:37::-;;;;;;;;;;;;;:::o;35299:91::-;4145:12;:10;:12::i;:::-;4134:23;;:7;:5;:7::i;:::-;:23;;;4126:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35375:7:::1;35366:6;:16;;;;35299:91:::0;:::o;29267:32::-;;;;:::o;34962:196::-;4145:12;:10;:12::i;:::-;4134:23;;:7;:5;:7::i;:::-;:23;;;4126:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35102:13:::1;35087:12;:28;;;;35139:11;35126:10;:24;;;;34962:196:::0;;:::o;34024:136::-;4145:12;:10;:12::i;:::-;4134:23;;:7;:5;:7::i;:::-;:23;;;4126:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34099:53:::1;34105:7;:5;:7::i;:::-;34140:10;:8;:10::i;:::-;34136:2;:14;;;;:::i;:::-;34114:18;:37;;;;:::i;:::-;34099:5;:53::i;:::-;34024:136:::0;:::o;35755:183::-;4145:12;:10;:12::i;:::-;4134:23;;:7;:5;:7::i;:::-;:23;;;4126:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35919:10:::1;:8;:10::i;:::-;35915:2;:14;;;;:::i;:::-;35891:20;:39;;;;:::i;:::-;35870:18;:60;;;;35755:183:::0;:::o;11872:177::-;11991:7;12023:9;:18;12033:7;12023:18;;;;;;;;;;;;;;;;12016:25;;11872:177;;;:::o;4565:94::-;4145:12;:10;:12::i;:::-;4134:23;;:7;:5;:7::i;:::-;:23;;;4126:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4630:21:::1;4648:1;4630:9;:21::i;:::-;4565:94::o:0;31771:953::-;31881:25;31909:12;;;;;;;;;;;:22;;;31932:12;:10;:12::i;:::-;31909:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31881:64;;32005:1;31985:17;:21;31977:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;32231:1;32212:15;:20;;:57;;;;;32252:17;32236:13;:33;32212:57;32190:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;32399:9;32411:15;32399:27;;32394:323;32433:13;32428:1;:18;32394:323;;32585:120;32610:12;;;;;;;;;;;:32;;;32643:12;:10;:12::i;:::-;32657:1;32610:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32678:12;:10;:12::i;:::-;32585:6;:120::i;:::-;32448:3;;;;;:::i;:::-;;;;32394:323;;;;31870:854;31771:953;;:::o;3914:87::-;3960:7;3987:6;;;;;;;;;;;3980:13;;3914:87;:::o;10800:104::-;10856:13;10889:7;10882:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10800:104;:::o;15319:482::-;15439:4;15461:24;15488:11;:25;15500:12;:10;:12::i;:::-;15488:25;;;;;;;;;;;;;;;:34;15514:7;15488:34;;;;;;;;;;;;;;;;15461:61;;15575:15;15555:16;:35;;15533:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15691:67;15700:12;:10;:12::i;:::-;15714:7;15742:15;15723:16;:34;15691:8;:67::i;:::-;15789:4;15782:11;;;15319:482;;;;:::o;12262:216::-;12384:4;12406:42;12416:12;:10;:12::i;:::-;12430:9;12441:6;12406:9;:42::i;:::-;12466:4;12459:11;;12262:216;;;;:::o;30045:525::-;30337:12;;;;;;;;;;;:20;;;30358:7;30337:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30321:45;;:12;:10;:12::i;:::-;:45;;;30299:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;30533:29;30540:7;30549:12;:10;:12::i;:::-;30533:6;:29::i;:::-;30045:525;:::o;29415:25::-;;;;:::o;30830:598::-;30878:25;30906:12;;;;;;;;;;;:22;;;30929:12;:10;:12::i;:::-;30906:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30878:64;;31002:1;30982:17;:21;30974:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;31114:9;31109:312;31133:17;31129:1;:21;31109:312;;;31289:120;31314:12;;;;;;;;;;;:32;;;31347:12;:10;:12::i;:::-;31361:1;31314:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31382:12;:10;:12::i;:::-;31289:6;:120::i;:::-;31152:3;;;;;:::i;:::-;;;;31109:312;;;;30867:561;30830:598::o;29105:60::-;;;;:::o;12541:201::-;12675:7;12707:11;:18;12719:5;12707:18;;;;;;;;;;;;;;;:27;12726:7;12707:27;;;;;;;;;;;;;;;;12700:34;;12541:201;;;;:::o;29594:74::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4814:229::-;4145:12;:10;:12::i;:::-;4134:23;;:7;:5;:7::i;:::-;:23;;;4126:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4937:1:::1;4917:22;;:8;:22;;;;4895:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;5016:19;5026:8;5016:9;:19::i;:::-;4814:229:::0;:::o;28897:88::-;;;;;;;;;;;;;:::o;2765:98::-;2818:7;2845:10;2838:17;;2765:98;:::o;19109:380::-;19262:1;19245:19;;:5;:19;;;;19237:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19343:1;19324:21;;:7;:21;;;;19316:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19427:6;19397:11;:18;19409:5;19397:18;;;;;;;;;;;;;;;:27;19416:7;19397:27;;;;;;;;;;;;;;;:36;;;;19465:7;19449:32;;19458:5;19449:32;;;19474:6;19449:32;;;;;;:::i;:::-;;;;;;;;19109:380;;;:::o;16291:770::-;16449:1;16431:20;;:6;:20;;;;16423:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16533:1;16512:23;;:9;:23;;;;16504:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16588:47;16609:6;16617:9;16628:6;16588:20;:47::i;:::-;16648:21;16672:9;:17;16682:6;16672:17;;;;;;;;;;;;;;;;16648:41;;16739:6;16722:13;:23;;16700:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;16883:6;16867:13;:22;16847:9;:17;16857:6;16847:17;;;;;;;;;;;;;;;:42;;;;16935:6;16911:9;:20;16921:9;16911:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;16976:9;16959:35;;16968:6;16959:35;;;16987:6;16959:35;;;;;;:::i;:::-;;;;;;;;17007:46;17027:6;17035:9;17046:6;17007:19;:46::i;:::-;16412:649;16291:770;;;:::o;17348:399::-;17451:1;17432:21;;:7;:21;;;;17424:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;17502:49;17531:1;17535:7;17544:6;17502:20;:49::i;:::-;17580:6;17564:12;;:22;;;;;;;:::i;:::-;;;;;;;;17619:6;17597:9;:18;17607:7;17597:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;17662:7;17641:37;;17658:1;17641:37;;;17671:6;17641:37;;;;;;:::i;:::-;;;;;;;;17691:48;17719:1;17723:7;17732:6;17691:19;:48::i;:::-;17348:399;;:::o;5051:173::-;5107:16;5126:6;;;;;;;;;;;5107:25;;5152:8;5143:6;;:17;;;;;;;;;;;;;;;;;;5207:8;5176:40;;5197:8;5176:40;;;;;;;;;;;;5096:128;5051:173;:::o;32791:895::-;33044:12;;33033:7;:23;;:48;;;;;33071:10;;33060:7;:21;;33033:48;33011:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;33273:22;:30;33296:6;;33273:30;;;;;;;;;;;:39;33304:7;33273:39;;;;;;;;;;;;;;;;;;;;;33272:40;33250:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;33541:4;33499:22;:30;33522:6;;33499:30;;;;;;;;;;;:39;33530:7;33499:39;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33641:37;33647:10;33659:18;;33641:5;:37::i;:::-;32791:895;;:::o;20089:125::-;;;;:::o;20818:124::-;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:139::-;347:5;385:6;372:20;363:29;;401:33;428:5;401:33;:::i;:::-;301:139;;;;:::o;446:143::-;503:5;534:6;528:13;519:22;;550:33;577:5;550:33;:::i;:::-;446:143;;;;:::o;595:329::-;654:6;703:2;691:9;682:7;678:23;674:32;671:119;;;709:79;;:::i;:::-;671:119;829:1;854:53;899:7;890:6;879:9;875:22;854:53;:::i;:::-;844:63;;800:117;595:329;;;;:::o;930:351::-;1000:6;1049:2;1037:9;1028:7;1024:23;1020:32;1017:119;;;1055:79;;:::i;:::-;1017:119;1175:1;1200:64;1256:7;1247:6;1236:9;1232:22;1200:64;:::i;:::-;1190:74;;1146:128;930:351;;;;:::o;1287:474::-;1355:6;1363;1412:2;1400:9;1391:7;1387:23;1383:32;1380:119;;;1418:79;;:::i;:::-;1380:119;1538:1;1563:53;1608:7;1599:6;1588:9;1584:22;1563:53;:::i;:::-;1553:63;;1509:117;1665:2;1691:53;1736:7;1727:6;1716:9;1712:22;1691:53;:::i;:::-;1681:63;;1636:118;1287:474;;;;;:::o;1767:619::-;1844:6;1852;1860;1909:2;1897:9;1888:7;1884:23;1880:32;1877:119;;;1915:79;;:::i;:::-;1877:119;2035:1;2060:53;2105:7;2096:6;2085:9;2081:22;2060:53;:::i;:::-;2050:63;;2006:117;2162:2;2188:53;2233:7;2224:6;2213:9;2209:22;2188:53;:::i;:::-;2178:63;;2133:118;2290:2;2316:53;2361:7;2352:6;2341:9;2337:22;2316:53;:::i;:::-;2306:63;;2261:118;1767:619;;;;;:::o;2392:474::-;2460:6;2468;2517:2;2505:9;2496:7;2492:23;2488:32;2485:119;;;2523:79;;:::i;:::-;2485:119;2643:1;2668:53;2713:7;2704:6;2693:9;2689:22;2668:53;:::i;:::-;2658:63;;2614:117;2770:2;2796:53;2841:7;2832:6;2821:9;2817:22;2796:53;:::i;:::-;2786:63;;2741:118;2392:474;;;;;:::o;2872:329::-;2931:6;2980:2;2968:9;2959:7;2955:23;2951:32;2948:119;;;2986:79;;:::i;:::-;2948:119;3106:1;3131:53;3176:7;3167:6;3156:9;3152:22;3131:53;:::i;:::-;3121:63;;3077:117;2872:329;;;;:::o;3207:351::-;3277:6;3326:2;3314:9;3305:7;3301:23;3297:32;3294:119;;;3332:79;;:::i;:::-;3294:119;3452:1;3477:64;3533:7;3524:6;3513:9;3509:22;3477:64;:::i;:::-;3467:74;;3423:128;3207:351;;;;:::o;3564:474::-;3632:6;3640;3689:2;3677:9;3668:7;3664:23;3660:32;3657:119;;;3695:79;;:::i;:::-;3657:119;3815:1;3840:53;3885:7;3876:6;3865:9;3861:22;3840:53;:::i;:::-;3830:63;;3786:117;3942:2;3968:53;4013:7;4004:6;3993:9;3989:22;3968:53;:::i;:::-;3958:63;;3913:118;3564:474;;;;;:::o;4044:118::-;4131:24;4149:5;4131:24;:::i;:::-;4126:3;4119:37;4044:118;;:::o;4168:109::-;4249:21;4264:5;4249:21;:::i;:::-;4244:3;4237:34;4168:109;;:::o;4283:181::-;4395:62;4451:5;4395:62;:::i;:::-;4390:3;4383:75;4283:181;;:::o;4470:364::-;4558:3;4586:39;4619:5;4586:39;:::i;:::-;4641:71;4705:6;4700:3;4641:71;:::i;:::-;4634:78;;4721:52;4766:6;4761:3;4754:4;4747:5;4743:16;4721:52;:::i;:::-;4798:29;4820:6;4798:29;:::i;:::-;4793:3;4789:39;4782:46;;4562:272;4470:364;;;;:::o;4840:366::-;4982:3;5003:67;5067:2;5062:3;5003:67;:::i;:::-;4996:74;;5079:93;5168:3;5079:93;:::i;:::-;5197:2;5192:3;5188:12;5181:19;;4840:366;;;:::o;5212:::-;5354:3;5375:67;5439:2;5434:3;5375:67;:::i;:::-;5368:74;;5451:93;5540:3;5451:93;:::i;:::-;5569:2;5564:3;5560:12;5553:19;;5212:366;;;:::o;5584:::-;5726:3;5747:67;5811:2;5806:3;5747:67;:::i;:::-;5740:74;;5823:93;5912:3;5823:93;:::i;:::-;5941:2;5936:3;5932:12;5925:19;;5584:366;;;:::o;5956:::-;6098:3;6119:67;6183:2;6178:3;6119:67;:::i;:::-;6112:74;;6195:93;6284:3;6195:93;:::i;:::-;6313:2;6308:3;6304:12;6297:19;;5956:366;;;:::o;6328:::-;6470:3;6491:67;6555:2;6550:3;6491:67;:::i;:::-;6484:74;;6567:93;6656:3;6567:93;:::i;:::-;6685:2;6680:3;6676:12;6669:19;;6328:366;;;:::o;6700:::-;6842:3;6863:67;6927:2;6922:3;6863:67;:::i;:::-;6856:74;;6939:93;7028:3;6939:93;:::i;:::-;7057:2;7052:3;7048:12;7041:19;;6700:366;;;:::o;7072:::-;7214:3;7235:67;7299:2;7294:3;7235:67;:::i;:::-;7228:74;;7311:93;7400:3;7311:93;:::i;:::-;7429:2;7424:3;7420:12;7413:19;;7072:366;;;:::o;7444:::-;7586:3;7607:67;7671:2;7666:3;7607:67;:::i;:::-;7600:74;;7683:93;7772:3;7683:93;:::i;:::-;7801:2;7796:3;7792:12;7785:19;;7444:366;;;:::o;7816:::-;7958:3;7979:67;8043:2;8038:3;7979:67;:::i;:::-;7972:74;;8055:93;8144:3;8055:93;:::i;:::-;8173:2;8168:3;8164:12;8157:19;;7816:366;;;:::o;8188:::-;8330:3;8351:67;8415:2;8410:3;8351:67;:::i;:::-;8344:74;;8427:93;8516:3;8427:93;:::i;:::-;8545:2;8540:3;8536:12;8529:19;;8188:366;;;:::o;8560:::-;8702:3;8723:67;8787:2;8782:3;8723:67;:::i;:::-;8716:74;;8799:93;8888:3;8799:93;:::i;:::-;8917:2;8912:3;8908:12;8901:19;;8560:366;;;:::o;8932:::-;9074:3;9095:67;9159:2;9154:3;9095:67;:::i;:::-;9088:74;;9171:93;9260:3;9171:93;:::i;:::-;9289:2;9284:3;9280:12;9273:19;;8932:366;;;:::o;9304:::-;9446:3;9467:67;9531:2;9526:3;9467:67;:::i;:::-;9460:74;;9543:93;9632:3;9543:93;:::i;:::-;9661:2;9656:3;9652:12;9645:19;;9304:366;;;:::o;9676:::-;9818:3;9839:67;9903:2;9898:3;9839:67;:::i;:::-;9832:74;;9915:93;10004:3;9915:93;:::i;:::-;10033:2;10028:3;10024:12;10017:19;;9676:366;;;:::o;10048:::-;10190:3;10211:67;10275:2;10270:3;10211:67;:::i;:::-;10204:74;;10287:93;10376:3;10287:93;:::i;:::-;10405:2;10400:3;10396:12;10389:19;;10048:366;;;:::o;10420:118::-;10507:24;10525:5;10507:24;:::i;:::-;10502:3;10495:37;10420:118;;:::o;10544:112::-;10627:22;10643:5;10627:22;:::i;:::-;10622:3;10615:35;10544:112;;:::o;10662:222::-;10755:4;10793:2;10782:9;10778:18;10770:26;;10806:71;10874:1;10863:9;10859:17;10850:6;10806:71;:::i;:::-;10662:222;;;;:::o;10890:332::-;11011:4;11049:2;11038:9;11034:18;11026:26;;11062:71;11130:1;11119:9;11115:17;11106:6;11062:71;:::i;:::-;11143:72;11211:2;11200:9;11196:18;11187:6;11143:72;:::i;:::-;10890:332;;;;;:::o;11228:210::-;11315:4;11353:2;11342:9;11338:18;11330:26;;11366:65;11428:1;11417:9;11413:17;11404:6;11366:65;:::i;:::-;11228:210;;;;:::o;11444:272::-;11562:4;11600:2;11589:9;11585:18;11577:26;;11613:96;11706:1;11695:9;11691:17;11682:6;11613:96;:::i;:::-;11444:272;;;;:::o;11722:313::-;11835:4;11873:2;11862:9;11858:18;11850:26;;11922:9;11916:4;11912:20;11908:1;11897:9;11893:17;11886:47;11950:78;12023:4;12014:6;11950:78;:::i;:::-;11942:86;;11722:313;;;;:::o;12041:419::-;12207:4;12245:2;12234:9;12230:18;12222:26;;12294:9;12288:4;12284:20;12280:1;12269:9;12265:17;12258:47;12322:131;12448:4;12322:131;:::i;:::-;12314:139;;12041:419;;;:::o;12466:::-;12632:4;12670:2;12659:9;12655:18;12647:26;;12719:9;12713:4;12709:20;12705:1;12694:9;12690:17;12683:47;12747:131;12873:4;12747:131;:::i;:::-;12739:139;;12466:419;;;:::o;12891:::-;13057:4;13095:2;13084:9;13080:18;13072:26;;13144:9;13138:4;13134:20;13130:1;13119:9;13115:17;13108:47;13172:131;13298:4;13172:131;:::i;:::-;13164:139;;12891:419;;;:::o;13316:::-;13482:4;13520:2;13509:9;13505:18;13497:26;;13569:9;13563:4;13559:20;13555:1;13544:9;13540:17;13533:47;13597:131;13723:4;13597:131;:::i;:::-;13589:139;;13316:419;;;:::o;13741:::-;13907:4;13945:2;13934:9;13930:18;13922:26;;13994:9;13988:4;13984:20;13980:1;13969:9;13965:17;13958:47;14022:131;14148:4;14022:131;:::i;:::-;14014:139;;13741:419;;;:::o;14166:::-;14332:4;14370:2;14359:9;14355:18;14347:26;;14419:9;14413:4;14409:20;14405:1;14394:9;14390:17;14383:47;14447:131;14573:4;14447:131;:::i;:::-;14439:139;;14166:419;;;:::o;14591:::-;14757:4;14795:2;14784:9;14780:18;14772:26;;14844:9;14838:4;14834:20;14830:1;14819:9;14815:17;14808:47;14872:131;14998:4;14872:131;:::i;:::-;14864:139;;14591:419;;;:::o;15016:::-;15182:4;15220:2;15209:9;15205:18;15197:26;;15269:9;15263:4;15259:20;15255:1;15244:9;15240:17;15233:47;15297:131;15423:4;15297:131;:::i;:::-;15289:139;;15016:419;;;:::o;15441:::-;15607:4;15645:2;15634:9;15630:18;15622:26;;15694:9;15688:4;15684:20;15680:1;15669:9;15665:17;15658:47;15722:131;15848:4;15722:131;:::i;:::-;15714:139;;15441:419;;;:::o;15866:::-;16032:4;16070:2;16059:9;16055:18;16047:26;;16119:9;16113:4;16109:20;16105:1;16094:9;16090:17;16083:47;16147:131;16273:4;16147:131;:::i;:::-;16139:139;;15866:419;;;:::o;16291:::-;16457:4;16495:2;16484:9;16480:18;16472:26;;16544:9;16538:4;16534:20;16530:1;16519:9;16515:17;16508:47;16572:131;16698:4;16572:131;:::i;:::-;16564:139;;16291:419;;;:::o;16716:::-;16882:4;16920:2;16909:9;16905:18;16897:26;;16969:9;16963:4;16959:20;16955:1;16944:9;16940:17;16933:47;16997:131;17123:4;16997:131;:::i;:::-;16989:139;;16716:419;;;:::o;17141:::-;17307:4;17345:2;17334:9;17330:18;17322:26;;17394:9;17388:4;17384:20;17380:1;17369:9;17365:17;17358:47;17422:131;17548:4;17422:131;:::i;:::-;17414:139;;17141:419;;;:::o;17566:::-;17732:4;17770:2;17759:9;17755:18;17747:26;;17819:9;17813:4;17809:20;17805:1;17794:9;17790:17;17783:47;17847:131;17973:4;17847:131;:::i;:::-;17839:139;;17566:419;;;:::o;17991:::-;18157:4;18195:2;18184:9;18180:18;18172:26;;18244:9;18238:4;18234:20;18230:1;18219:9;18215:17;18208:47;18272:131;18398:4;18272:131;:::i;:::-;18264:139;;17991:419;;;:::o;18416:222::-;18509:4;18547:2;18536:9;18532:18;18524:26;;18560:71;18628:1;18617:9;18613:17;18604:6;18560:71;:::i;:::-;18416:222;;;;:::o;18644:214::-;18733:4;18771:2;18760:9;18756:18;18748:26;;18784:67;18848:1;18837:9;18833:17;18824:6;18784:67;:::i;:::-;18644:214;;;;:::o;18945:99::-;18997:6;19031:5;19025:12;19015:22;;18945:99;;;:::o;19050:169::-;19134:11;19168:6;19163:3;19156:19;19208:4;19203:3;19199:14;19184:29;;19050:169;;;;:::o;19225:305::-;19265:3;19284:20;19302:1;19284:20;:::i;:::-;19279:25;;19318:20;19336:1;19318:20;:::i;:::-;19313:25;;19472:1;19404:66;19400:74;19397:1;19394:81;19391:107;;;19478:18;;:::i;:::-;19391:107;19522:1;19519;19515:9;19508:16;;19225:305;;;;:::o;19536:848::-;19597:5;19604:4;19628:6;19619:15;;19652:5;19643:14;;19666:712;19687:1;19677:8;19674:15;19666:712;;;19782:4;19777:3;19773:14;19767:4;19764:24;19761:50;;;19791:18;;:::i;:::-;19761:50;19841:1;19831:8;19827:16;19824:451;;;20256:4;20249:5;20245:16;20236:25;;19824:451;20306:4;20300;20296:15;20288:23;;20336:32;20359:8;20336:32;:::i;:::-;20324:44;;19666:712;;;19536:848;;;;;;;:::o;20390:281::-;20448:5;20472:23;20490:4;20472:23;:::i;:::-;20464:31;;20516:25;20532:8;20516:25;:::i;:::-;20504:37;;20560:104;20597:66;20587:8;20581:4;20560:104;:::i;:::-;20551:113;;20390:281;;;;:::o;20677:1073::-;20731:5;20922:8;20912:40;;20943:1;20934:10;;20945:5;;20912:40;20971:4;20961:36;;20988:1;20979:10;;20990:5;;20961:36;21057:4;21105:1;21100:27;;;;21141:1;21136:191;;;;21050:277;;21100:27;21118:1;21109:10;;21120:5;;;21136:191;21181:3;21171:8;21168:17;21165:43;;;21188:18;;:::i;:::-;21165:43;21237:8;21234:1;21230:16;21221:25;;21272:3;21265:5;21262:14;21259:40;;;21279:18;;:::i;:::-;21259:40;21312:5;;;21050:277;;21436:2;21426:8;21423:16;21417:3;21411:4;21408:13;21404:36;21386:2;21376:8;21373:16;21368:2;21362:4;21359:12;21355:35;21339:111;21336:246;;;21492:8;21486:4;21482:19;21473:28;;21527:3;21520:5;21517:14;21514:40;;;21534:18;;:::i;:::-;21514:40;21567:5;;21336:246;21607:42;21645:3;21635:8;21629:4;21626:1;21607:42;:::i;:::-;21592:57;;;;21681:4;21676:3;21672:14;21665:5;21662:25;21659:51;;;21690:18;;:::i;:::-;21659:51;21739:4;21732:5;21728:16;21719:25;;20677:1073;;;;;;:::o;21756:348::-;21796:7;21819:20;21837:1;21819:20;:::i;:::-;21814:25;;21853:20;21871:1;21853:20;:::i;:::-;21848:25;;22041:1;21973:66;21969:74;21966:1;21963:81;21958:1;21951:9;21944:17;21940:105;21937:131;;;22048:18;;:::i;:::-;21937:131;22096:1;22093;22089:9;22078:20;;21756:348;;;;:::o;22110:96::-;22147:7;22176:24;22194:5;22176:24;:::i;:::-;22165:35;;22110:96;;;:::o;22212:90::-;22246:7;22289:5;22282:13;22275:21;22264:32;;22212:90;;;:::o;22308:126::-;22345:7;22385:42;22378:5;22374:54;22363:65;;22308:126;;;:::o;22440:77::-;22477:7;22506:5;22495:16;;22440:77;;;:::o;22523:86::-;22558:7;22598:4;22591:5;22587:16;22576:27;;22523:86;;;:::o;22615:151::-;22690:9;22723:37;22754:5;22723:37;:::i;:::-;22710:50;;22615:151;;;:::o;22772:126::-;22822:9;22855:37;22886:5;22855:37;:::i;:::-;22842:50;;22772:126;;;:::o;22904:113::-;22954:9;22987:24;23005:5;22987:24;:::i;:::-;22974:37;;22904:113;;;:::o;23023:307::-;23091:1;23101:113;23115:6;23112:1;23109:13;23101:113;;;23200:1;23195:3;23191:11;23185:18;23181:1;23176:3;23172:11;23165:39;23137:2;23134:1;23130:10;23125:15;;23101:113;;;23232:6;23229:1;23226:13;23223:101;;;23312:1;23303:6;23298:3;23294:16;23287:27;23223:101;23072:258;23023:307;;;:::o;23336:320::-;23380:6;23417:1;23411:4;23407:12;23397:22;;23464:1;23458:4;23454:12;23485:18;23475:81;;23541:4;23533:6;23529:17;23519:27;;23475:81;23603:2;23595:6;23592:14;23572:18;23569:38;23566:84;;;23622:18;;:::i;:::-;23566:84;23387:269;23336:320;;;:::o;23662:233::-;23701:3;23724:24;23742:5;23724:24;:::i;:::-;23715:33;;23770:66;23763:5;23760:77;23757:103;;;23840:18;;:::i;:::-;23757:103;23887:1;23880:5;23876:13;23869:20;;23662:233;;;:::o;23901:180::-;23949:77;23946:1;23939:88;24046:4;24043:1;24036:15;24070:4;24067:1;24060:15;24087:180;24135:77;24132:1;24125:88;24232:4;24229:1;24222:15;24256:4;24253:1;24246:15;24396:117;24505:1;24502;24495:12;24519:102;24560:6;24611:2;24607:7;24602:2;24595:5;24591:14;24587:28;24577:38;;24519:102;;;:::o;24627:::-;24669:8;24716:5;24713:1;24709:13;24688:34;;24627:102;;;:::o;24735:222::-;24875:34;24871:1;24863:6;24859:14;24852:58;24944:5;24939:2;24931:6;24927:15;24920:30;24735:222;:::o;24963:168::-;25103:20;25099:1;25091:6;25087:14;25080:44;24963:168;:::o;25137:225::-;25277:34;25273:1;25265:6;25261:14;25254:58;25346:8;25341:2;25333:6;25329:15;25322:33;25137:225;:::o;25368:221::-;25508:34;25504:1;25496:6;25492:14;25485:58;25577:4;25572:2;25564:6;25560:15;25553:29;25368:221;:::o;25595:225::-;25735:34;25731:1;25723:6;25719:14;25712:58;25804:8;25799:2;25791:6;25787:15;25780:33;25595:225;:::o;25826:167::-;25966:19;25962:1;25954:6;25950:14;25943:43;25826:167;:::o;25999:227::-;26139:34;26135:1;26127:6;26123:14;26116:58;26208:10;26203:2;26195:6;26191:15;26184:35;25999:227;:::o;26232:182::-;26372:34;26368:1;26360:6;26356:14;26349:58;26232:182;:::o;26420:224::-;26560:34;26556:1;26548:6;26544:14;26537:58;26629:7;26624:2;26616:6;26612:15;26605:32;26420:224;:::o;26650:175::-;26790:27;26786:1;26778:6;26774:14;26767:51;26650:175;:::o;26831:223::-;26971:34;26967:1;26959:6;26955:14;26948:58;27040:6;27035:2;27027:6;27023:15;27016:31;26831:223;:::o;27060:171::-;27200:23;27196:1;27188:6;27184:14;27177:47;27060:171;:::o;27237:165::-;27377:17;27373:1;27365:6;27361:14;27354:41;27237:165;:::o;27408:224::-;27548:34;27544:1;27536:6;27532:14;27525:58;27617:7;27612:2;27604:6;27600:15;27593:32;27408:224;:::o;27638:181::-;27778:33;27774:1;27766:6;27762:14;27755:57;27638:181;:::o;27825:122::-;27898:24;27916:5;27898:24;:::i;:::-;27891:5;27888:35;27878:63;;27937:1;27934;27927:12;27878:63;27825:122;:::o;27953:::-;28026:24;28044:5;28026:24;:::i;:::-;28019:5;28016:35;28006:63;;28065:1;28062;28055:12;28006:63;27953:122;:::o
Swarm Source
ipfs://0b1db8d2d7673053a72d5c5f29814e8ea5e382bb78e04eaaa563acdc820fa887
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.