Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
77,505 LIANA
Holders
106
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 4 Decimals)
Balance
10,150 LIANAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
LIANA
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-24 */ // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev 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 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/utils/ERC721Holder.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC721Receiver} interface. * * Accepts all token transfers. * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}. */ contract ERC721Holder is IERC721Receiver { /** * @dev See {IERC721Receiver-onERC721Received}. * * Always returns `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address, address, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @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: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, 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) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, 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) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * 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: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, 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 Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - 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 {} } // File: contracts/LIANA.sol pragma solidity ^0.8.4; contract LIANA is ERC20, ERC721Holder, Ownable { IERC721[] private nft; //uint32[] private tokensForWinners ; address[] private NFTholders; uint256 private lockPeriod; uint32 private a; address private ZERO; // to delete collection from stake system mapping(address => uint256) private arrayUserID; // ID of user in array mapping(address => mapping(uint32 => uint256)) private arrayIDToken; // ID of token in array mapping(address => mapping(address => uint32[])) private arrayOfNftID; // user => collection => id mapping(address => uint256) public tokensAmountForWinner; mapping(address => uint256) public amountOfStakedNFT; mapping(address => mapping(uint256 => address)) public tokenOwnerOf; mapping(address => mapping(uint256 => uint256)) public tokenStakedAt; mapping(address => uint256) private NFTID; mapping(address => uint256) private emissionRate; constructor( address _nft, uint32 _emissionRate, uint256 _lockPeriod ) ERC20("LIANA", "LIANA") { nft.push(IERC721(_nft)); NFTID[_nft] = 0; emissionRate[_nft] = _emissionRate * 10**decimals(); lockPeriod = _lockPeriod * 24 * 60 * 60; } function decimals() public view virtual override returns (uint8) { return 4; } function addCollectionToStake(address newCollection, uint32 _emissionRate) public onlyOwner { if (nft[NFTID[newCollection]] == IERC721(ZERO)) { nft[NFTID[newCollection]] = IERC721(newCollection); } else { nft.push(IERC721(newCollection)); NFTID[newCollection] = nft.length - 1; } emissionRate[newCollection] = _emissionRate * 10**decimals(); } function deleteCollectionFromStake(address NFTcollection) public onlyOwner { nft[NFTID[NFTcollection]] = IERC721(ZERO); } function changeEmissionForCollection( address NFTcollection, uint256 _emissionRatePerDay ) public onlyOwner { emissionRate[NFTcollection] = _emissionRatePerDay * 10**decimals(); } function calculateRewards(address NFTcollection, uint32 tokenId) public view returns (uint256) { require( tokenStakedAt[NFTcollection][tokenId] != 0, "token not in stake" ); return ((block.timestamp - tokenStakedAt[NFTcollection][tokenId]) / (24 * 60 * 60)) * emissionRate[NFTcollection]; } function setLockPeriod(uint256 daysToLock) public onlyOwner { lockPeriod = daysToLock * 24 * 60 * 60; } function stakeNFT(address NFTcollection, uint32 tokenId) external { nft[NFTID[NFTcollection]].safeTransferFrom( msg.sender, address(this), tokenId ); tokenOwnerOf[NFTcollection][tokenId] = msg.sender; tokenStakedAt[NFTcollection][tokenId] = block.timestamp; amountOfStakedNFT[msg.sender]++; arrayOfNftID[msg.sender][NFTcollection].push(tokenId); arrayIDToken[NFTcollection][tokenId] = arrayOfNftID[msg.sender][NFTcollection].length - 1; if (amountOfStakedNFT[msg.sender] == 1) { NFTholders.push(msg.sender); arrayUserID[msg.sender] = NFTholders.length - 1; } } function unstakeNFT(address NFTcollection, uint32 tokenId) external { require( tokenOwnerOf[NFTcollection][tokenId] == msg.sender, "You aren't owner of NFT" ); require( block.timestamp >= tokenStakedAt[NFTcollection][tokenId] + lockPeriod, "You can't unstake locked NFT" ); _mint(msg.sender, calculateRewards(NFTcollection, tokenId)); nft[NFTID[NFTcollection]].transferFrom( address(this), msg.sender, tokenId ); uint32 tempId = arrayOfNftID[msg.sender][NFTcollection][ arrayOfNftID[msg.sender][NFTcollection].length - 1 ]; arrayOfNftID[msg.sender][NFTcollection][ arrayIDToken[NFTcollection][tokenId] ] = tempId; arrayIDToken[NFTcollection][tempId] = arrayIDToken[NFTcollection][ tokenId ]; arrayOfNftID[msg.sender][NFTcollection].pop(); delete arrayIDToken[NFTcollection][tokenId]; delete tokenOwnerOf[NFTcollection][tokenId]; delete tokenStakedAt[NFTcollection][tokenId]; amountOfStakedNFT[msg.sender]--; if (amountOfStakedNFT[msg.sender] < 1) { address tempAdress = NFTholders[NFTholders.length - 1]; NFTholders[arrayUserID[msg.sender]] = tempAdress; arrayUserID[tempAdress] = arrayUserID[msg.sender]; NFTholders.pop(); delete arrayUserID[msg.sender]; } } function arrayOfNftsID(address NFTcollection, address user) public view returns (uint32[] memory) { return arrayOfNftID[user][NFTcollection]; } function arrayOfNftHolders(uint8 number) public view returns (address[] memory) { return NFTholders; } function getTimeUntilUnstake(address NFTcollection, uint256 tokenId) public view returns (uint256) { if ( block.timestamp >= tokenStakedAt[NFTcollection][tokenId] + lockPeriod ) return 0; else return ((tokenStakedAt[NFTcollection][tokenId] + lockPeriod) - block.timestamp) / 60; } function claimRewards(address NFTcollection, uint32 tokenId) external { require( tokenOwnerOf[NFTcollection][tokenId] == msg.sender, "You aren't owner of NFT or it's not in stake" ); require( calculateRewards(NFTcollection, tokenId) > 0, "nothing to claim" ); _mint(msg.sender, calculateRewards(NFTcollection, tokenId)); tokenStakedAt[NFTcollection][tokenId] = block.timestamp; } function rewardsForCollectoin(address NFTcollection) public view returns (uint256) { return emissionRate[NFTcollection] / (10**decimals()); } // WINNERS-ARRAY// function addAdressToArray( address[] memory _winners, uint32[] memory _tokensForWinners ) public onlyOwner { if (_winners.length <= _tokensForWinners.length) { for (uint256 i = 0; i < _winners.length; i++) { tokensAmountForWinner[_winners[i]] += _tokensForWinners[i] * 10**decimals(); } } else for (uint256 i = 0; i < _tokensForWinners.length; i++) { tokensAmountForWinner[_winners[i]] += _tokensForWinners[i] * 10**decimals(); } } function deleteAmountForWinner(address user, uint32 amount) public onlyOwner { tokensAmountForWinner[user] -= amount; } function claimRewardsForWinners(address winner) external { require(winner == msg.sender, "you aren't owner"); require(tokensAmountForWinner[winner] > 0, "nothing to claim"); _mint(msg.sender, tokensAmountForWinner[winner]); delete tokensAmountForWinner[winner]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_nft","type":"address"},{"internalType":"uint32","name":"_emissionRate","type":"uint32"},{"internalType":"uint256","name":"_lockPeriod","type":"uint256"}],"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":"_winners","type":"address[]"},{"internalType":"uint32[]","name":"_tokensForWinners","type":"uint32[]"}],"name":"addAdressToArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newCollection","type":"address"},{"internalType":"uint32","name":"_emissionRate","type":"uint32"}],"name":"addCollectionToStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"","type":"address"}],"name":"amountOfStakedNFT","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":"uint8","name":"number","type":"uint8"}],"name":"arrayOfNftHolders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"NFTcollection","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"arrayOfNftsID","outputs":[{"internalType":"uint32[]","name":"","type":"uint32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"NFTcollection","type":"address"},{"internalType":"uint32","name":"tokenId","type":"uint32"}],"name":"calculateRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"NFTcollection","type":"address"},{"internalType":"uint256","name":"_emissionRatePerDay","type":"uint256"}],"name":"changeEmissionForCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"NFTcollection","type":"address"},{"internalType":"uint32","name":"tokenId","type":"uint32"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"winner","type":"address"}],"name":"claimRewardsForWinners","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":"user","type":"address"},{"internalType":"uint32","name":"amount","type":"uint32"}],"name":"deleteAmountForWinner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"NFTcollection","type":"address"}],"name":"deleteCollectionFromStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"NFTcollection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTimeUntilUnstake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"NFTcollection","type":"address"}],"name":"rewardsForCollectoin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"daysToLock","type":"uint256"}],"name":"setLockPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"NFTcollection","type":"address"},{"internalType":"uint32","name":"tokenId","type":"uint32"}],"name":"stakeNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenOwnerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenStakedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokensAmountForWinner","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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"},{"inputs":[{"internalType":"address","name":"NFTcollection","type":"address"},{"internalType":"uint32","name":"tokenId","type":"uint32"}],"name":"unstakeNFT","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162004e5538038062004e55833981810160405281019062000037919062000418565b6040518060400160405280600581526020017f4c49414e410000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4c49414e410000000000000000000000000000000000000000000000000000008152508160039080519060200190620000bb92919062000323565b508060049080519060200190620000d492919062000323565b505050620000f7620000eb6200024c60201b60201c565b6200025460201b60201c565b6006839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001af6200031a60201b60201c565b600a620001bd9190620004cf565b8263ffffffff16620001d091906200060c565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550603c806018836200022591906200060c565b6200023191906200060c565b6200023d91906200060c565b600881905550505050620007bc565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006004905090565b8280546200033190620006c8565b90600052602060002090601f016020900481019282620003555760008555620003a1565b82601f106200037057805160ff1916838001178555620003a1565b82800160010185558215620003a1579182015b82811115620003a057825182559160200191906001019062000383565b5b509050620003b09190620003b4565b5090565b5b80821115620003cf576000816000905550600101620003b5565b5090565b600081519050620003e4816200076e565b92915050565b600081519050620003fb8162000788565b92915050565b6000815190506200041281620007a2565b92915050565b6000806000606084860312156200043457620004336200075c565b5b60006200044486828701620003d3565b9350506020620004578682870162000401565b92505060406200046a86828701620003ea565b9150509250925092565b6000808291508390505b6001851115620004c6578086048111156200049e576200049d620006fe565b5b6001851615620004ae5780820291505b8081029050620004be8562000761565b94506200047e565b94509492505050565b6000620004dc82620006a1565b9150620004e983620006bb565b9250620005187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000520565b905092915050565b60008262000532576001905062000605565b8162000542576000905062000605565b81600181146200055b576002811462000566576200059c565b600191505062000605565b60ff8411156200057b576200057a620006fe565b5b8360020a915084821115620005955762000594620006fe565b5b5062000605565b5060208310610133831016604e8410600b8410161715620005d65782820a905083811115620005d057620005cf620006fe565b5b62000605565b620005e5848484600162000474565b92509050818404811115620005ff57620005fe620006fe565b5b81810290505b9392505050565b60006200061982620006a1565b91506200062683620006a1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620006625762000661620006fe565b5b828202905092915050565b60006200067a8262000681565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60006002820490506001821680620006e157607f821691505b60208210811415620006f857620006f76200072d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b60008160011c9050919050565b62000779816200066d565b81146200078557600080fd5b50565b6200079381620006a1565b81146200079f57600080fd5b50565b620007ad81620006ab565b8114620007b957600080fd5b50565b61468980620007cc6000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c8063715018a61161011a5780639f707651116100ad578063ad119b261161007c578063ad119b2614610647578063dd62ed3e14610677578063e24db147146106a7578063eb6d8045146106c3578063f2fde38b146106f357610206565b80639f7076511461059b578063a457c2d7146105b7578063a53c3de6146105e7578063a9059cbb1461061757610206565b80638da5cb5b116100e95780638da5cb5b1461051357806395d89b411461053157806398d742711461054f5780639aadf9ae1461056b57610206565b8063715018a6146104a1578063744928a8146104ab578063779972da146104db5780638113fd82146104f757610206565b80632c799baa1161019d57806344e68a491161016c57806344e68a49146103ed5780634e5f85f71461041d578063575aea94146104395780636a2382771461045557806370a082311461047157610206565b80632c799baa146103535780632efe8a5f14610383578063313ce5671461039f57806339509351146103bd57610206565b806316384a01116101d957806316384a01146102b957806318160ddd146102d557806322fd40c0146102f357806323b872dd1461032357610206565b806306fdde031461020b578063095ea7b3146102295780630ebffcd314610259578063150b7a0214610289575b600080fd5b61021361070f565b6040516102209190613911565b60405180910390f35b610243600480360381019061023e9190613326565b6107a1565b60405161025091906138db565b60405180910390f35b610273600480360381019061026e919061344b565b6107c4565b6040516102809190613897565b60405180910390f35b6102a3600480360381019061029e91906132a3565b610854565b6040516102b091906138f6565b60405180910390f35b6102d360048036038101906102ce9190613366565b610868565b005b6102dd61129f565b6040516102ea9190613b33565b60405180910390f35b61030d60048036038101906103089190613326565b6112a9565b60405161031a9190613b33565b60405180910390f35b61033d60048036038101906103389190613250565b6112ce565b60405161034a91906138db565b60405180910390f35b61036d60048036038101906103689190613326565b6112fd565b60405161037a9190613b33565b60405180910390f35b61039d60048036038101906103989190613366565b6113ea565b005b6103a761158c565b6040516103b49190613b4e565b60405180910390f35b6103d760048036038101906103d29190613326565b611595565b6040516103e491906138db565b60405180910390f35b610407600480360381019061040291906131e3565b6115cc565b6040516104149190613b33565b60405180910390f35b61043760048036038101906104329190613366565b6115e4565b005b610453600480360381019061044e91906131e3565b61164c565b005b61046f600480360381019061046a91906131e3565b611715565b005b61048b600480360381019061048691906131e3565b611894565b6040516104989190613b33565b60405180910390f35b6104a96118dc565b005b6104c560048036038101906104c09190613210565b6118f0565b6040516104d291906138b9565b60405180910390f35b6104f560048036038101906104f0919061341e565b6119f1565b005b610511600480360381019061050c9190613326565b611a26565b005b61051b611a94565b6040516105289190613845565b60405180910390f35b610539611abe565b6040516105469190613911565b60405180910390f35b61056960048036038101906105649190613366565b611b50565b005b61058560048036038101906105809190613366565b611df1565b6040516105929190613b33565b60405180910390f35b6105b560048036038101906105b09190613366565b611f4e565b005b6105d160048036038101906105cc9190613326565b612438565b6040516105de91906138db565b60405180910390f35b61060160048036038101906105fc91906131e3565b6124af565b60405161060e9190613b33565b60405180910390f35b610631600480360381019061062c9190613326565b612516565b60405161063e91906138db565b60405180910390f35b610661600480360381019061065c9190613326565b612539565b60405161066e9190613845565b60405180910390f35b610691600480360381019061068c9190613210565b61257b565b60405161069e9190613b33565b60405180910390f35b6106c160048036038101906106bc91906133a6565b612602565b005b6106dd60048036038101906106d891906131e3565b6127b9565b6040516106ea9190613b33565b60405180910390f35b61070d600480360381019061070891906131e3565b6127d1565b005b60606003805461071e9061403a565b80601f016020809104026020016040519081016040528092919081815260200182805461074a9061403a565b80156107975780601f1061076c57610100808354040283529160200191610797565b820191906000526020600020905b81548152906001019060200180831161077a57829003601f168201915b5050505050905090565b6000806107ac612855565b90506107b981858561285d565b600191505092915050565b6060600780548060200260200160405190810160405280929190818152602001828054801561084857602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116107fe575b50505050509050919050565b600063150b7a0260e01b9050949350505050565b3373ffffffffffffffffffffffffffffffffffffffff16600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461094c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094390613ad3565b60405180910390fd5b600854601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff168152602001908152602001600020546109b09190613ca5565b4210156109f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e990613a33565b60405180910390fd5b610a0533610a008484611df1565b612a28565b6006601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110610a5857610a576141a2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b8152600401610abf93929190613860565b600060405180830381600087803b158015610ad957600080fd5b505af1158015610aed573d6000803e3d6000fd5b505050506000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050610bfb9190613ef7565b81548110610c0c57610c0b6141a2565b5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16905080600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008563ffffffff1663ffffffff1681526020019081526020016000205481548110610d1f57610d1e6141a2565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff16815260200190815260200160002054600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff16815260200190815260200160002081905550600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480610e9b57610e9a614173565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff16815260200190815260200160002060009055600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff16815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff16815260200190815260200160002060009055600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061104e90614010565b91905055506001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561129a576000600760016007805490506110b19190613ef7565b815481106110c2576110c16141a2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050806007600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611143576111426141a2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060078054806112205761121f614173565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055505b505050565b6000600254905090565b6010602052816000526040600020602052806000526040600020600091509150505481565b6000806112d9612855565b90506112e6858285612b88565b6112f1858585612c14565b60019150509392505050565b6000600854601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000205461135d9190613ca5565b421061136c57600090506113e4565b603c42600854601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868152602001908152602001600020546113cd9190613ca5565b6113d79190613ef7565b6113e19190613cfb565b90505b92915050565b3373ffffffffffffffffffffffffffffffffffffffff16600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590613a13565b60405180910390fd5b60006114da8383611df1565b1161151a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611511906139f3565b60405180910390fd5b61152d336115288484611df1565b612a28565b42601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff168152602001908152602001600020819055505050565b60006004905090565b6000806115a0612855565b90506115c18185856115b2858961257b565b6115bc9190613ca5565b61285d565b600191505092915050565b600d6020528060005260406000206000915090505481565b6115ec612e95565b8063ffffffff16600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116419190613ef7565b925050819055505050565b611654612e95565b600960049054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106116ca576116c96141a2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a90613993565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc906139f3565b60405180910390fd5b61184e33600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a28565b600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905550565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118e4612e95565b6118ee6000612f13565b565b6060600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156119e457602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116119a75790505b5050505050905092915050565b6119f9612e95565b603c80601883611a099190613e9d565b611a139190613e9d565b611a1d9190613e9d565b60088190555050565b611a2e612e95565b611a3661158c565b600a611a429190613d7f565b81611a4d9190613e9d565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611acd9061403a565b80601f0160208091040260200160405190810160405280929190818152602001828054611af99061403a565b8015611b465780601f10611b1b57610100808354040283529160200191611b46565b820191906000526020600020905b815481529060010190602001808311611b2957829003601f168201915b5050505050905090565b611b58612e95565b600960049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166006601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611be457611be36141a2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611ccc57816006601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611c7f57611c7e6141a2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611d85565b6006829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600680549050611d419190613ef7565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611d8d61158c565b600a611d999190613d7f565b8163ffffffff16611daa9190613e9d565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600080601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008463ffffffff168152602001908152602001600020541415611e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8390613ab3565b60405180910390fd5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462015180601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008563ffffffff1681526020019081526020016000205442611f329190613ef7565b611f3c9190613cfb565b611f469190613e9d565b905092915050565b6006601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611fa157611fa06141a2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330846040518463ffffffff1660e01b815260040161200893929190613860565b600060405180830381600087803b15801561202257600080fd5b505af1158015612036573d6000803e3d6000fd5b5050505033600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff16815260200190815260200160002081905550600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061217a9061409d565b9190505550600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff1602179055506001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506122d39190613ef7565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff168152602001908152602001600020819055506001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612434576007339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016007805490506123f09190613ef7565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b600080612443612855565b90506000612451828661257b565b905083811015612496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248d90613af3565b60405180910390fd5b6124a3828686840361285d565b60019250505092915050565b60006124b961158c565b600a6124c59190613d7f565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461250f9190613cfb565b9050919050565b600080612521612855565b905061252e818585612c14565b600191505092915050565b600f6020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61260a612e95565b80518251116126e65760005b82518110156126e05761262761158c565b600a6126339190613d7f565b828281518110612646576126456141a2565b5b602002602001015163ffffffff1661265e9190613e9d565b600d6000858481518110612675576126746141a2565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126c69190613ca5565b9250508190555080806126d89061409d565b915050612616565b506127b5565b60005b81518110156127b3576126fa61158c565b600a6127069190613d7f565b828281518110612719576127186141a2565b5b602002602001015163ffffffff166127319190613e9d565b600d6000858481518110612748576127476141a2565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127999190613ca5565b9250508190555080806127ab9061409d565b9150506126e9565b505b5050565b600e6020528060005260406000206000915090505481565b6127d9612e95565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284090613953565b60405180910390fd5b61285281612f13565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c490613a93565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561293d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293490613973565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a1b9190613b33565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8f90613b13565b60405180910390fd5b612aa460008383612fd9565b8060026000828254612ab69190613ca5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b0b9190613ca5565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b709190613b33565b60405180910390a3612b8460008383612fde565b5050565b6000612b94848461257b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612c0e5781811015612c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf7906139b3565b60405180910390fd5b612c0d848484840361285d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7b90613a73565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ceb90613933565b60405180910390fd5b612cff838383612fd9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7c906139d3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e189190613ca5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e7c9190613b33565b60405180910390a3612e8f848484612fde565b50505050565b612e9d612855565b73ffffffffffffffffffffffffffffffffffffffff16612ebb611a94565b73ffffffffffffffffffffffffffffffffffffffff1614612f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0890613a53565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b6000612ff6612ff184613b8e565b613b69565b9050808382526020820190508285602086028201111561301957613018614205565b5b60005b85811015613049578161302f8882613105565b84526020840193506020830192505060018101905061301c565b5050509392505050565b600061306661306184613bba565b613b69565b9050808382526020820190508285602086028201111561308957613088614205565b5b60005b858110156130b9578161309f88826131b9565b84526020840193506020830192505060018101905061308c565b5050509392505050565b60006130d66130d184613be6565b613b69565b9050828152602081018484840111156130f2576130f161420a565b5b6130fd848285613fce565b509392505050565b600081359050613114816145f7565b92915050565b600082601f83011261312f5761312e614200565b5b813561313f848260208601612fe3565b91505092915050565b600082601f83011261315d5761315c614200565b5b813561316d848260208601613053565b91505092915050565b600082601f83011261318b5761318a614200565b5b813561319b8482602086016130c3565b91505092915050565b6000813590506131b38161460e565b92915050565b6000813590506131c881614625565b92915050565b6000813590506131dd8161463c565b92915050565b6000602082840312156131f9576131f8614214565b5b600061320784828501613105565b91505092915050565b6000806040838503121561322757613226614214565b5b600061323585828601613105565b925050602061324685828601613105565b9150509250929050565b60008060006060848603121561326957613268614214565b5b600061327786828701613105565b935050602061328886828701613105565b9250506040613299868287016131a4565b9150509250925092565b600080600080608085870312156132bd576132bc614214565b5b60006132cb87828801613105565b94505060206132dc87828801613105565b93505060406132ed878288016131a4565b925050606085013567ffffffffffffffff81111561330e5761330d61420f565b5b61331a87828801613176565b91505092959194509250565b6000806040838503121561333d5761333c614214565b5b600061334b85828601613105565b925050602061335c858286016131a4565b9150509250929050565b6000806040838503121561337d5761337c614214565b5b600061338b85828601613105565b925050602061339c858286016131b9565b9150509250929050565b600080604083850312156133bd576133bc614214565b5b600083013567ffffffffffffffff8111156133db576133da61420f565b5b6133e78582860161311a565b925050602083013567ffffffffffffffff8111156134085761340761420f565b5b61341485828601613148565b9150509250929050565b60006020828403121561343457613433614214565b5b6000613442848285016131a4565b91505092915050565b60006020828403121561346157613460614214565b5b600061346f848285016131ce565b91505092915050565b600061348483836134a8565b60208301905092915050565b600061349c8383613827565b60208301905092915050565b6134b181613f2b565b82525050565b6134c081613f2b565b82525050565b60006134d182613c37565b6134db8185613c72565b93506134e683613c17565b8060005b838110156135175781516134fe8882613478565b975061350983613c58565b9250506001810190506134ea565b5085935050505092915050565b600061352f82613c42565b6135398185613c83565b935061354483613c27565b8060005b8381101561357557815161355c8882613490565b975061356783613c65565b925050600181019050613548565b5085935050505092915050565b61358b81613f3d565b82525050565b61359a81613f49565b82525050565b60006135ab82613c4d565b6135b58185613c94565b93506135c5818560208601613fdd565b6135ce81614219565b840191505092915050565b60006135e6602383613c94565b91506135f182614237565b604082019050919050565b6000613609602683613c94565b915061361482614286565b604082019050919050565b600061362c602283613c94565b9150613637826142d5565b604082019050919050565b600061364f601083613c94565b915061365a82614324565b602082019050919050565b6000613672601d83613c94565b915061367d8261434d565b602082019050919050565b6000613695602683613c94565b91506136a082614376565b604082019050919050565b60006136b8601083613c94565b91506136c3826143c5565b602082019050919050565b60006136db602c83613c94565b91506136e6826143ee565b604082019050919050565b60006136fe601c83613c94565b91506137098261443d565b602082019050919050565b6000613721602083613c94565b915061372c82614466565b602082019050919050565b6000613744602583613c94565b915061374f8261448f565b604082019050919050565b6000613767602483613c94565b9150613772826144de565b604082019050919050565b600061378a601283613c94565b91506137958261452d565b602082019050919050565b60006137ad601783613c94565b91506137b882614556565b602082019050919050565b60006137d0602583613c94565b91506137db8261457f565b604082019050919050565b60006137f3601f83613c94565b91506137fe826145ce565b602082019050919050565b61381281613f95565b82525050565b61382181613fbc565b82525050565b61383081613f9f565b82525050565b61383f81613faf565b82525050565b600060208201905061385a60008301846134b7565b92915050565b600060608201905061387560008301866134b7565b61388260208301856134b7565b61388f6040830184613818565b949350505050565b600060208201905081810360008301526138b181846134c6565b905092915050565b600060208201905081810360008301526138d38184613524565b905092915050565b60006020820190506138f06000830184613582565b92915050565b600060208201905061390b6000830184613591565b92915050565b6000602082019050818103600083015261392b81846135a0565b905092915050565b6000602082019050818103600083015261394c816135d9565b9050919050565b6000602082019050818103600083015261396c816135fc565b9050919050565b6000602082019050818103600083015261398c8161361f565b9050919050565b600060208201905081810360008301526139ac81613642565b9050919050565b600060208201905081810360008301526139cc81613665565b9050919050565b600060208201905081810360008301526139ec81613688565b9050919050565b60006020820190508181036000830152613a0c816136ab565b9050919050565b60006020820190508181036000830152613a2c816136ce565b9050919050565b60006020820190508181036000830152613a4c816136f1565b9050919050565b60006020820190508181036000830152613a6c81613714565b9050919050565b60006020820190508181036000830152613a8c81613737565b9050919050565b60006020820190508181036000830152613aac8161375a565b9050919050565b60006020820190508181036000830152613acc8161377d565b9050919050565b60006020820190508181036000830152613aec816137a0565b9050919050565b60006020820190508181036000830152613b0c816137c3565b9050919050565b60006020820190508181036000830152613b2c816137e6565b9050919050565b6000602082019050613b486000830184613809565b92915050565b6000602082019050613b636000830184613836565b92915050565b6000613b73613b84565b9050613b7f828261406c565b919050565b6000604051905090565b600067ffffffffffffffff821115613ba957613ba86141d1565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613bd557613bd46141d1565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613c0157613c006141d1565b5b613c0a82614219565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613cb082613f95565b9150613cbb83613f95565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cf057613cef6140e6565b5b828201905092915050565b6000613d0682613f95565b9150613d1183613f95565b925082613d2157613d20614115565b5b828204905092915050565b6000808291508390505b6001851115613d7657808604811115613d5257613d516140e6565b5b6001851615613d615780820291505b8081029050613d6f8561422a565b9450613d36565b94509492505050565b6000613d8a82613f95565b9150613d9583613faf565b9250613dc27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613dca565b905092915050565b600082613dda5760019050613e96565b81613de85760009050613e96565b8160018114613dfe5760028114613e0857613e37565b6001915050613e96565b60ff841115613e1a57613e196140e6565b5b8360020a915084821115613e3157613e306140e6565b5b50613e96565b5060208310610133831016604e8410600b8410161715613e6c5782820a905083811115613e6757613e666140e6565b5b613e96565b613e798484846001613d2c565b92509050818404811115613e9057613e8f6140e6565b5b81810290505b9392505050565b6000613ea882613f95565b9150613eb383613f95565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613eec57613eeb6140e6565b5b828202905092915050565b6000613f0282613f95565b9150613f0d83613f95565b925082821015613f2057613f1f6140e6565b5b828203905092915050565b6000613f3682613f75565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b6000613fc782613f9f565b9050919050565b82818337600083830152505050565b60005b83811015613ffb578082015181840152602081019050613fe0565b8381111561400a576000848401525b50505050565b600061401b82613f95565b9150600082141561402f5761402e6140e6565b5b600182039050919050565b6000600282049050600182168061405257607f821691505b6020821081141561406657614065614144565b5b50919050565b61407582614219565b810181811067ffffffffffffffff82111715614094576140936141d1565b5b80604052505050565b60006140a882613f95565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156140db576140da6140e6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f796f75206172656e2774206f776e657200000000000000000000000000000000600082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7468696e6720746f20636c61696d00000000000000000000000000000000600082015250565b7f596f75206172656e2774206f776e6572206f66204e4654206f7220697427732060008201527f6e6f7420696e207374616b650000000000000000000000000000000000000000602082015250565b7f596f752063616e277420756e7374616b65206c6f636b6564204e465400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f746f6b656e206e6f7420696e207374616b650000000000000000000000000000600082015250565b7f596f75206172656e2774206f776e6572206f66204e4654000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61460081613f2b565b811461460b57600080fd5b50565b61461781613f95565b811461462257600080fd5b50565b61462e81613f9f565b811461463957600080fd5b50565b61464581613faf565b811461465057600080fd5b5056fea2646970667358221220c35ed216c85e26922bd46cfed48f186a0c09299789f5810750b5e80338f8aff464736f6c63430008070033000000000000000000000000f487f4102adecd1d24b63c66b5dc5ed3718f7a0a000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000000007
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102065760003560e01c8063715018a61161011a5780639f707651116100ad578063ad119b261161007c578063ad119b2614610647578063dd62ed3e14610677578063e24db147146106a7578063eb6d8045146106c3578063f2fde38b146106f357610206565b80639f7076511461059b578063a457c2d7146105b7578063a53c3de6146105e7578063a9059cbb1461061757610206565b80638da5cb5b116100e95780638da5cb5b1461051357806395d89b411461053157806398d742711461054f5780639aadf9ae1461056b57610206565b8063715018a6146104a1578063744928a8146104ab578063779972da146104db5780638113fd82146104f757610206565b80632c799baa1161019d57806344e68a491161016c57806344e68a49146103ed5780634e5f85f71461041d578063575aea94146104395780636a2382771461045557806370a082311461047157610206565b80632c799baa146103535780632efe8a5f14610383578063313ce5671461039f57806339509351146103bd57610206565b806316384a01116101d957806316384a01146102b957806318160ddd146102d557806322fd40c0146102f357806323b872dd1461032357610206565b806306fdde031461020b578063095ea7b3146102295780630ebffcd314610259578063150b7a0214610289575b600080fd5b61021361070f565b6040516102209190613911565b60405180910390f35b610243600480360381019061023e9190613326565b6107a1565b60405161025091906138db565b60405180910390f35b610273600480360381019061026e919061344b565b6107c4565b6040516102809190613897565b60405180910390f35b6102a3600480360381019061029e91906132a3565b610854565b6040516102b091906138f6565b60405180910390f35b6102d360048036038101906102ce9190613366565b610868565b005b6102dd61129f565b6040516102ea9190613b33565b60405180910390f35b61030d60048036038101906103089190613326565b6112a9565b60405161031a9190613b33565b60405180910390f35b61033d60048036038101906103389190613250565b6112ce565b60405161034a91906138db565b60405180910390f35b61036d60048036038101906103689190613326565b6112fd565b60405161037a9190613b33565b60405180910390f35b61039d60048036038101906103989190613366565b6113ea565b005b6103a761158c565b6040516103b49190613b4e565b60405180910390f35b6103d760048036038101906103d29190613326565b611595565b6040516103e491906138db565b60405180910390f35b610407600480360381019061040291906131e3565b6115cc565b6040516104149190613b33565b60405180910390f35b61043760048036038101906104329190613366565b6115e4565b005b610453600480360381019061044e91906131e3565b61164c565b005b61046f600480360381019061046a91906131e3565b611715565b005b61048b600480360381019061048691906131e3565b611894565b6040516104989190613b33565b60405180910390f35b6104a96118dc565b005b6104c560048036038101906104c09190613210565b6118f0565b6040516104d291906138b9565b60405180910390f35b6104f560048036038101906104f0919061341e565b6119f1565b005b610511600480360381019061050c9190613326565b611a26565b005b61051b611a94565b6040516105289190613845565b60405180910390f35b610539611abe565b6040516105469190613911565b60405180910390f35b61056960048036038101906105649190613366565b611b50565b005b61058560048036038101906105809190613366565b611df1565b6040516105929190613b33565b60405180910390f35b6105b560048036038101906105b09190613366565b611f4e565b005b6105d160048036038101906105cc9190613326565b612438565b6040516105de91906138db565b60405180910390f35b61060160048036038101906105fc91906131e3565b6124af565b60405161060e9190613b33565b60405180910390f35b610631600480360381019061062c9190613326565b612516565b60405161063e91906138db565b60405180910390f35b610661600480360381019061065c9190613326565b612539565b60405161066e9190613845565b60405180910390f35b610691600480360381019061068c9190613210565b61257b565b60405161069e9190613b33565b60405180910390f35b6106c160048036038101906106bc91906133a6565b612602565b005b6106dd60048036038101906106d891906131e3565b6127b9565b6040516106ea9190613b33565b60405180910390f35b61070d600480360381019061070891906131e3565b6127d1565b005b60606003805461071e9061403a565b80601f016020809104026020016040519081016040528092919081815260200182805461074a9061403a565b80156107975780601f1061076c57610100808354040283529160200191610797565b820191906000526020600020905b81548152906001019060200180831161077a57829003601f168201915b5050505050905090565b6000806107ac612855565b90506107b981858561285d565b600191505092915050565b6060600780548060200260200160405190810160405280929190818152602001828054801561084857602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116107fe575b50505050509050919050565b600063150b7a0260e01b9050949350505050565b3373ffffffffffffffffffffffffffffffffffffffff16600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461094c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094390613ad3565b60405180910390fd5b600854601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff168152602001908152602001600020546109b09190613ca5565b4210156109f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e990613a33565b60405180910390fd5b610a0533610a008484611df1565b612a28565b6006601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110610a5857610a576141a2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b8152600401610abf93929190613860565b600060405180830381600087803b158015610ad957600080fd5b505af1158015610aed573d6000803e3d6000fd5b505050506000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050610bfb9190613ef7565b81548110610c0c57610c0b6141a2565b5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16905080600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008563ffffffff1663ffffffff1681526020019081526020016000205481548110610d1f57610d1e6141a2565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff16815260200190815260200160002054600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff16815260200190815260200160002081905550600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480610e9b57610e9a614173565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff16815260200190815260200160002060009055600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff16815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff16815260200190815260200160002060009055600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061104e90614010565b91905055506001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561129a576000600760016007805490506110b19190613ef7565b815481106110c2576110c16141a2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050806007600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611143576111426141a2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060078054806112205761121f614173565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055505b505050565b6000600254905090565b6010602052816000526040600020602052806000526040600020600091509150505481565b6000806112d9612855565b90506112e6858285612b88565b6112f1858585612c14565b60019150509392505050565b6000600854601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000205461135d9190613ca5565b421061136c57600090506113e4565b603c42600854601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868152602001908152602001600020546113cd9190613ca5565b6113d79190613ef7565b6113e19190613cfb565b90505b92915050565b3373ffffffffffffffffffffffffffffffffffffffff16600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590613a13565b60405180910390fd5b60006114da8383611df1565b1161151a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611511906139f3565b60405180910390fd5b61152d336115288484611df1565b612a28565b42601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff168152602001908152602001600020819055505050565b60006004905090565b6000806115a0612855565b90506115c18185856115b2858961257b565b6115bc9190613ca5565b61285d565b600191505092915050565b600d6020528060005260406000206000915090505481565b6115ec612e95565b8063ffffffff16600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116419190613ef7565b925050819055505050565b611654612e95565b600960049054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106116ca576116c96141a2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a90613993565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc906139f3565b60405180910390fd5b61184e33600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a28565b600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905550565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118e4612e95565b6118ee6000612f13565b565b6060600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156119e457602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116119a75790505b5050505050905092915050565b6119f9612e95565b603c80601883611a099190613e9d565b611a139190613e9d565b611a1d9190613e9d565b60088190555050565b611a2e612e95565b611a3661158c565b600a611a429190613d7f565b81611a4d9190613e9d565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611acd9061403a565b80601f0160208091040260200160405190810160405280929190818152602001828054611af99061403a565b8015611b465780601f10611b1b57610100808354040283529160200191611b46565b820191906000526020600020905b815481529060010190602001808311611b2957829003601f168201915b5050505050905090565b611b58612e95565b600960049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166006601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611be457611be36141a2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611ccc57816006601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611c7f57611c7e6141a2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611d85565b6006829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600680549050611d419190613ef7565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611d8d61158c565b600a611d999190613d7f565b8163ffffffff16611daa9190613e9d565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600080601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008463ffffffff168152602001908152602001600020541415611e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8390613ab3565b60405180910390fd5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462015180601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008563ffffffff1681526020019081526020016000205442611f329190613ef7565b611f3c9190613cfb565b611f469190613e9d565b905092915050565b6006601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611fa157611fa06141a2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330846040518463ffffffff1660e01b815260040161200893929190613860565b600060405180830381600087803b15801561202257600080fd5b505af1158015612036573d6000803e3d6000fd5b5050505033600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff16815260200190815260200160002081905550600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061217a9061409d565b9190505550600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff1602179055506001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506122d39190613ef7565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff168152602001908152602001600020819055506001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612434576007339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016007805490506123f09190613ef7565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b600080612443612855565b90506000612451828661257b565b905083811015612496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248d90613af3565b60405180910390fd5b6124a3828686840361285d565b60019250505092915050565b60006124b961158c565b600a6124c59190613d7f565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461250f9190613cfb565b9050919050565b600080612521612855565b905061252e818585612c14565b600191505092915050565b600f6020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61260a612e95565b80518251116126e65760005b82518110156126e05761262761158c565b600a6126339190613d7f565b828281518110612646576126456141a2565b5b602002602001015163ffffffff1661265e9190613e9d565b600d6000858481518110612675576126746141a2565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126c69190613ca5565b9250508190555080806126d89061409d565b915050612616565b506127b5565b60005b81518110156127b3576126fa61158c565b600a6127069190613d7f565b828281518110612719576127186141a2565b5b602002602001015163ffffffff166127319190613e9d565b600d6000858481518110612748576127476141a2565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127999190613ca5565b9250508190555080806127ab9061409d565b9150506126e9565b505b5050565b600e6020528060005260406000206000915090505481565b6127d9612e95565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284090613953565b60405180910390fd5b61285281612f13565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c490613a93565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561293d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293490613973565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a1b9190613b33565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8f90613b13565b60405180910390fd5b612aa460008383612fd9565b8060026000828254612ab69190613ca5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b0b9190613ca5565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b709190613b33565b60405180910390a3612b8460008383612fde565b5050565b6000612b94848461257b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612c0e5781811015612c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf7906139b3565b60405180910390fd5b612c0d848484840361285d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7b90613a73565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ceb90613933565b60405180910390fd5b612cff838383612fd9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7c906139d3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e189190613ca5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e7c9190613b33565b60405180910390a3612e8f848484612fde565b50505050565b612e9d612855565b73ffffffffffffffffffffffffffffffffffffffff16612ebb611a94565b73ffffffffffffffffffffffffffffffffffffffff1614612f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0890613a53565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b6000612ff6612ff184613b8e565b613b69565b9050808382526020820190508285602086028201111561301957613018614205565b5b60005b85811015613049578161302f8882613105565b84526020840193506020830192505060018101905061301c565b5050509392505050565b600061306661306184613bba565b613b69565b9050808382526020820190508285602086028201111561308957613088614205565b5b60005b858110156130b9578161309f88826131b9565b84526020840193506020830192505060018101905061308c565b5050509392505050565b60006130d66130d184613be6565b613b69565b9050828152602081018484840111156130f2576130f161420a565b5b6130fd848285613fce565b509392505050565b600081359050613114816145f7565b92915050565b600082601f83011261312f5761312e614200565b5b813561313f848260208601612fe3565b91505092915050565b600082601f83011261315d5761315c614200565b5b813561316d848260208601613053565b91505092915050565b600082601f83011261318b5761318a614200565b5b813561319b8482602086016130c3565b91505092915050565b6000813590506131b38161460e565b92915050565b6000813590506131c881614625565b92915050565b6000813590506131dd8161463c565b92915050565b6000602082840312156131f9576131f8614214565b5b600061320784828501613105565b91505092915050565b6000806040838503121561322757613226614214565b5b600061323585828601613105565b925050602061324685828601613105565b9150509250929050565b60008060006060848603121561326957613268614214565b5b600061327786828701613105565b935050602061328886828701613105565b9250506040613299868287016131a4565b9150509250925092565b600080600080608085870312156132bd576132bc614214565b5b60006132cb87828801613105565b94505060206132dc87828801613105565b93505060406132ed878288016131a4565b925050606085013567ffffffffffffffff81111561330e5761330d61420f565b5b61331a87828801613176565b91505092959194509250565b6000806040838503121561333d5761333c614214565b5b600061334b85828601613105565b925050602061335c858286016131a4565b9150509250929050565b6000806040838503121561337d5761337c614214565b5b600061338b85828601613105565b925050602061339c858286016131b9565b9150509250929050565b600080604083850312156133bd576133bc614214565b5b600083013567ffffffffffffffff8111156133db576133da61420f565b5b6133e78582860161311a565b925050602083013567ffffffffffffffff8111156134085761340761420f565b5b61341485828601613148565b9150509250929050565b60006020828403121561343457613433614214565b5b6000613442848285016131a4565b91505092915050565b60006020828403121561346157613460614214565b5b600061346f848285016131ce565b91505092915050565b600061348483836134a8565b60208301905092915050565b600061349c8383613827565b60208301905092915050565b6134b181613f2b565b82525050565b6134c081613f2b565b82525050565b60006134d182613c37565b6134db8185613c72565b93506134e683613c17565b8060005b838110156135175781516134fe8882613478565b975061350983613c58565b9250506001810190506134ea565b5085935050505092915050565b600061352f82613c42565b6135398185613c83565b935061354483613c27565b8060005b8381101561357557815161355c8882613490565b975061356783613c65565b925050600181019050613548565b5085935050505092915050565b61358b81613f3d565b82525050565b61359a81613f49565b82525050565b60006135ab82613c4d565b6135b58185613c94565b93506135c5818560208601613fdd565b6135ce81614219565b840191505092915050565b60006135e6602383613c94565b91506135f182614237565b604082019050919050565b6000613609602683613c94565b915061361482614286565b604082019050919050565b600061362c602283613c94565b9150613637826142d5565b604082019050919050565b600061364f601083613c94565b915061365a82614324565b602082019050919050565b6000613672601d83613c94565b915061367d8261434d565b602082019050919050565b6000613695602683613c94565b91506136a082614376565b604082019050919050565b60006136b8601083613c94565b91506136c3826143c5565b602082019050919050565b60006136db602c83613c94565b91506136e6826143ee565b604082019050919050565b60006136fe601c83613c94565b91506137098261443d565b602082019050919050565b6000613721602083613c94565b915061372c82614466565b602082019050919050565b6000613744602583613c94565b915061374f8261448f565b604082019050919050565b6000613767602483613c94565b9150613772826144de565b604082019050919050565b600061378a601283613c94565b91506137958261452d565b602082019050919050565b60006137ad601783613c94565b91506137b882614556565b602082019050919050565b60006137d0602583613c94565b91506137db8261457f565b604082019050919050565b60006137f3601f83613c94565b91506137fe826145ce565b602082019050919050565b61381281613f95565b82525050565b61382181613fbc565b82525050565b61383081613f9f565b82525050565b61383f81613faf565b82525050565b600060208201905061385a60008301846134b7565b92915050565b600060608201905061387560008301866134b7565b61388260208301856134b7565b61388f6040830184613818565b949350505050565b600060208201905081810360008301526138b181846134c6565b905092915050565b600060208201905081810360008301526138d38184613524565b905092915050565b60006020820190506138f06000830184613582565b92915050565b600060208201905061390b6000830184613591565b92915050565b6000602082019050818103600083015261392b81846135a0565b905092915050565b6000602082019050818103600083015261394c816135d9565b9050919050565b6000602082019050818103600083015261396c816135fc565b9050919050565b6000602082019050818103600083015261398c8161361f565b9050919050565b600060208201905081810360008301526139ac81613642565b9050919050565b600060208201905081810360008301526139cc81613665565b9050919050565b600060208201905081810360008301526139ec81613688565b9050919050565b60006020820190508181036000830152613a0c816136ab565b9050919050565b60006020820190508181036000830152613a2c816136ce565b9050919050565b60006020820190508181036000830152613a4c816136f1565b9050919050565b60006020820190508181036000830152613a6c81613714565b9050919050565b60006020820190508181036000830152613a8c81613737565b9050919050565b60006020820190508181036000830152613aac8161375a565b9050919050565b60006020820190508181036000830152613acc8161377d565b9050919050565b60006020820190508181036000830152613aec816137a0565b9050919050565b60006020820190508181036000830152613b0c816137c3565b9050919050565b60006020820190508181036000830152613b2c816137e6565b9050919050565b6000602082019050613b486000830184613809565b92915050565b6000602082019050613b636000830184613836565b92915050565b6000613b73613b84565b9050613b7f828261406c565b919050565b6000604051905090565b600067ffffffffffffffff821115613ba957613ba86141d1565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613bd557613bd46141d1565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613c0157613c006141d1565b5b613c0a82614219565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613cb082613f95565b9150613cbb83613f95565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cf057613cef6140e6565b5b828201905092915050565b6000613d0682613f95565b9150613d1183613f95565b925082613d2157613d20614115565b5b828204905092915050565b6000808291508390505b6001851115613d7657808604811115613d5257613d516140e6565b5b6001851615613d615780820291505b8081029050613d6f8561422a565b9450613d36565b94509492505050565b6000613d8a82613f95565b9150613d9583613faf565b9250613dc27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613dca565b905092915050565b600082613dda5760019050613e96565b81613de85760009050613e96565b8160018114613dfe5760028114613e0857613e37565b6001915050613e96565b60ff841115613e1a57613e196140e6565b5b8360020a915084821115613e3157613e306140e6565b5b50613e96565b5060208310610133831016604e8410600b8410161715613e6c5782820a905083811115613e6757613e666140e6565b5b613e96565b613e798484846001613d2c565b92509050818404811115613e9057613e8f6140e6565b5b81810290505b9392505050565b6000613ea882613f95565b9150613eb383613f95565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613eec57613eeb6140e6565b5b828202905092915050565b6000613f0282613f95565b9150613f0d83613f95565b925082821015613f2057613f1f6140e6565b5b828203905092915050565b6000613f3682613f75565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b6000613fc782613f9f565b9050919050565b82818337600083830152505050565b60005b83811015613ffb578082015181840152602081019050613fe0565b8381111561400a576000848401525b50505050565b600061401b82613f95565b9150600082141561402f5761402e6140e6565b5b600182039050919050565b6000600282049050600182168061405257607f821691505b6020821081141561406657614065614144565b5b50919050565b61407582614219565b810181811067ffffffffffffffff82111715614094576140936141d1565b5b80604052505050565b60006140a882613f95565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156140db576140da6140e6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f796f75206172656e2774206f776e657200000000000000000000000000000000600082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7468696e6720746f20636c61696d00000000000000000000000000000000600082015250565b7f596f75206172656e2774206f776e6572206f66204e4654206f7220697427732060008201527f6e6f7420696e207374616b650000000000000000000000000000000000000000602082015250565b7f596f752063616e277420756e7374616b65206c6f636b6564204e465400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f746f6b656e206e6f7420696e207374616b650000000000000000000000000000600082015250565b7f596f75206172656e2774206f776e6572206f66204e4654000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61460081613f2b565b811461460b57600080fd5b50565b61461781613f95565b811461462257600080fd5b50565b61462e81613f9f565b811461463957600080fd5b50565b61464581613faf565b811461465057600080fd5b5056fea2646970667358221220c35ed216c85e26922bd46cfed48f186a0c09299789f5810750b5e80338f8aff464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f487f4102adecd1d24b63c66b5dc5ed3718f7a0a000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000000007
-----Decoded View---------------
Arg [0] : _nft (address): 0xf487f4102adecd1D24b63c66b5Dc5Ed3718F7A0a
Arg [1] : _emissionRate (uint32): 15
Arg [2] : _lockPeriod (uint256): 7
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000f487f4102adecd1d24b63c66b5dc5ed3718f7a0a
Arg [1] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000007
Deployed Bytecode Sourcemap
27881:7681:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17026:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19377:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33132:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7459:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31361:1566;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18146:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28647:68;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20158:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33288:421;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33717:490;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29142:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20862:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28451:56;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35091:156;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29698:135;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35255:304;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18317:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10449:103;;;:::i;:::-;;32935:189;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30483:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29841:216;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9801:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17245:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29242:448;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30065:410;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30608:745;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21603:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34215:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18650:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28573:67;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18906:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34436:647;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28514:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10707:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17026:100;17080:13;17113:5;17106:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17026:100;:::o;19377:201::-;19460:4;19477:13;19493:12;:10;:12::i;:::-;19477:28;;19516:32;19525:5;19532:7;19541:6;19516:8;:32::i;:::-;19566:4;19559:11;;;19377:201;;;;:::o;33132:148::-;33221:16;33262:10;33255:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33132:148;;;:::o;7459:207::-;7602:6;7628:30;;;7621:37;;7459:207;;;;;;:::o;31361:1566::-;31502:10;31462:50;;:12;:27;31475:13;31462:27;;;;;;;;;;;;;;;:36;31490:7;31462:36;;;;;;;;;;;;;;;;;;;;;;;:50;;;31440:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;31672:10;;31632:13;:28;31646:13;31632:28;;;;;;;;;;;;;;;:37;31661:7;31632:37;;;;;;;;;;;;;;:50;;;;:::i;:::-;31596:15;:86;;31574:164;;;;;;;;;;;;:::i;:::-;;;;;;;;;31751:59;31757:10;31769:40;31786:13;31801:7;31769:16;:40::i;:::-;31751:5;:59::i;:::-;31821:3;31825:5;:20;31831:13;31825:20;;;;;;;;;;;;;;;;31821:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:38;;;31882:4;31902:10;31927:7;31821:124;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31958:13;31974:12;:24;31987:10;31974:24;;;;;;;;;;;;;;;:39;31999:13;31974:39;;;;;;;;;;;;;;;32077:1;32028:12;:24;32041:10;32028:24;;;;;;;;;;;;;;;:39;32053:13;32028:39;;;;;;;;;;;;;;;:46;;;;:50;;;;:::i;:::-;31974:115;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31958:131;;32204:6;32100:12;:24;32113:10;32100:24;;;;;;;;;;;;;;;:39;32125:13;32100:39;;;;;;;;;;;;;;;32154:12;:27;32167:13;32154:27;;;;;;;;;;;;;;;:36;32182:7;32154:36;;;;;;;;;;;;;;;;32100:101;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:110;;;;;;;;;;;;;;;;;;32259:12;:27;32272:13;32259:27;;;;;;;;;;;;;;;:60;32301:7;32259:60;;;;;;;;;;;;;;;;32221:12;:27;32234:13;32221:27;;;;;;;;;;;;;;;:35;32249:6;32221:35;;;;;;;;;;;;;;;:98;;;;32330:12;:24;32343:10;32330:24;;;;;;;;;;;;;;;:39;32355:13;32330:39;;;;;;;;;;;;;;;:45;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32395:12;:27;32408:13;32395:27;;;;;;;;;;;;;;;:36;32423:7;32395:36;;;;;;;;;;;;;;;32388:43;;;32449:12;:27;32462:13;32449:27;;;;;;;;;;;;;;;:36;32477:7;32449:36;;;;;;;;;;;;;;32442:43;;;;;;;;;;;32503:13;:28;32517:13;32503:28;;;;;;;;;;;;;;;:37;32532:7;32503:37;;;;;;;;;;;;;32496:44;;;32553:17;:29;32571:10;32553:29;;;;;;;;;;;;;;;;:31;;;;;;;;;:::i;:::-;;;;;;32633:1;32601:17;:29;32619:10;32601:29;;;;;;;;;;;;;;;;:33;32597:323;;;32651:18;32672:10;32703:1;32683:10;:17;;;;:21;;;;:::i;:::-;32672:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32651:54;;32758:10;32720;32731:11;:23;32743:10;32731:23;;;;;;;;;;;;;;;;32720:35;;;;;;;;:::i;:::-;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;32809:11;:23;32821:10;32809:23;;;;;;;;;;;;;;;;32783:11;:23;32795:10;32783:23;;;;;;;;;;;;;;;:49;;;;32847:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;32885:11;:23;32897:10;32885:23;;;;;;;;;;;;;;;32878:30;;;32636:284;32597:323;31429:1498;31361:1566;;:::o;18146:108::-;18207:7;18234:12;;18227:19;;18146:108;:::o;28647:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20158:295::-;20289:4;20306:15;20324:12;:10;:12::i;:::-;20306:30;;20347:38;20363:4;20369:7;20378:6;20347:15;:38::i;:::-;20396:27;20406:4;20412:2;20416:6;20396:9;:27::i;:::-;20441:4;20434:11;;;20158:295;;;;;:::o;33288:421::-;33405:7;33520:10;;33480:13;:28;33494:13;33480:28;;;;;;;;;;;;;;;:37;33509:7;33480:37;;;;;;;;;;;;:50;;;;:::i;:::-;33448:15;:82;33430:271;;33549:1;33542:8;;;;33430:271;33699:2;33680:15;33645:10;;33605:13;:28;33619:13;33605:28;;;;;;;;;;;;;;;:37;33634:7;33605:37;;;;;;;;;;;;:50;;;;:::i;:::-;33604:91;;;;:::i;:::-;33603:98;;;;:::i;:::-;33579:122;;33288:421;;;;;:::o;33717:490::-;33860:10;33820:50;;:12;:27;33833:13;33820:27;;;;;;;;;;;;;;;:36;33848:7;33820:36;;;;;;;;;;;;;;;;;;;;;;;:50;;;33798:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;34018:1;33975:40;33992:13;34007:7;33975:16;:40::i;:::-;:44;33953:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;34074:59;34080:10;34092:40;34109:13;34124:7;34092:16;:40::i;:::-;34074:5;:59::i;:::-;34184:15;34144:13;:28;34158:13;34144:28;;;;;;;;;;;;;;;:37;34173:7;34144:37;;;;;;;;;;;;;:55;;;;33717:490;;:::o;29142:92::-;29200:5;29225:1;29218:8;;29142:92;:::o;20862:238::-;20950:4;20967:13;20983:12;:10;:12::i;:::-;20967:28;;21006:64;21015:5;21022:7;21059:10;21031:25;21041:5;21048:7;21031:9;:25::i;:::-;:38;;;;:::i;:::-;21006:8;:64::i;:::-;21088:4;21081:11;;;20862:238;;;;:::o;28451:56::-;;;;;;;;;;;;;;;;;:::o;35091:156::-;9687:13;:11;:13::i;:::-;35233:6:::1;35202:37;;:21;:27;35224:4;35202:27;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;35091:156:::0;;:::o;29698:135::-;9687:13;:11;:13::i;:::-;29820:4:::1;;;;;;;;;;;29784:3;29788:5;:20;29794:13;29788:20;;;;;;;;;;;;;;;;29784:25;;;;;;;;:::i;:::-;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;29698:135:::0;:::o;35255:304::-;35341:10;35331:20;;:6;:20;;;35323:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;35423:1;35391:21;:29;35413:6;35391:29;;;;;;;;;;;;;;;;:33;35383:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35456:48;35462:10;35474:21;:29;35496:6;35474:29;;;;;;;;;;;;;;;;35456:5;:48::i;:::-;35522:21;:29;35544:6;35522:29;;;;;;;;;;;;;;;35515:36;;;35255:304;:::o;18317:127::-;18391:7;18418:9;:18;18428:7;18418:18;;;;;;;;;;;;;;;;18411:25;;18317:127;;;:::o;10449:103::-;9687:13;:11;:13::i;:::-;10514:30:::1;10541:1;10514:18;:30::i;:::-;10449:103::o:0;32935:189::-;33043:15;33083:12;:18;33096:4;33083:18;;;;;;;;;;;;;;;:33;33102:13;33083:33;;;;;;;;;;;;;;;33076:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32935:189;;;;:::o;30483:117::-;9687:13;:11;:13::i;:::-;30590:2:::1;30585::::0;30580::::1;30567:10;:15;;;;:::i;:::-;:20;;;;:::i;:::-;:25;;;;:::i;:::-;30554:10;:38;;;;30483:117:::0;:::o;29841:216::-;9687:13;:11;:13::i;:::-;30039:10:::1;:8;:10::i;:::-;30035:2;:14;;;;:::i;:::-;30013:19;:36;;;;:::i;:::-;29983:12;:27;29996:13;29983:27;;;;;;;;;;;;;;;:66;;;;29841:216:::0;;:::o;9801:87::-;9847:7;9874:6;;;;;;;;;;;9867:13;;9801:87;:::o;17245:104::-;17301:13;17334:7;17327:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17245:104;:::o;29242:448::-;9687:13;:11;:13::i;:::-;29409:4:::1;;;;;;;;;;;29372:42;;:3;29376:5;:20;29382:13;29376:20;;;;;;;;;;;;;;;;29372:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:42;;;29368:242;;;29467:13;29431:3;29435:5;:20;29441:13;29435:20;;;;;;;;;;;;;;;;29431:25;;;;;;;;:::i;:::-;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;29368:242;;;29514:3;29531:13;29514:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29597:1;29584:3;:10;;;;:14;;;;:::i;:::-;29561:5;:20;29567:13;29561:20;;;;;;;;;;;;;;;:37;;;;29368:242;29672:10;:8;:10::i;:::-;29668:2;:14;;;;:::i;:::-;29652:13;:30;;;;;;:::i;:::-;29622:12;:27;29635:13;29622:27;;;;;;;;;;;;;;;:60;;;;29242:448:::0;;:::o;30065:410::-;30178:7;30266:1;30225:13;:28;30239:13;30225:28;;;;;;;;;;;;;;;:37;30254:7;30225:37;;;;;;;;;;;;;;:42;;30203:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30440:12;:27;30453:13;30440:27;;;;;;;;;;;;;;;;30423:12;30364:13;:28;30378:13;30364:28;;;;;;;;;;;;;;;:37;30393:7;30364:37;;;;;;;;;;;;;;30346:15;:55;;;;:::i;:::-;30345:91;;;;:::i;:::-;30344:123;;;;:::i;:::-;30324:143;;30065:410;;;;:::o;30608:745::-;30685:3;30689:5;:20;30695:13;30689:20;;;;;;;;;;;;;;;;30685:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:42;;;30742:10;30775:4;30795:7;30685:128;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30865:10;30826:12;:27;30839:13;30826:27;;;;;;;;;;;;;;;:36;30854:7;30826:36;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;30926:15;30886:13;:28;30900:13;30886:28;;;;;;;;;;;;;;;:37;30915:7;30886:37;;;;;;;;;;;;;:55;;;;30954:17;:29;30972:10;30954:29;;;;;;;;;;;;;;;;:31;;;;;;;;;:::i;:::-;;;;;;30998:12;:24;31011:10;30998:24;;;;;;;;;;;;;;;:39;31023:13;30998:39;;;;;;;;;;;;;;;31043:7;30998:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31176:1;31114:12;:24;31127:10;31114:24;;;;;;;;;;;;;;;:39;31139:13;31114:39;;;;;;;;;;;;;;;:46;;;;:63;;;;:::i;:::-;31062:12;:27;31075:13;31062:27;;;;;;;;;;;;;;;:36;31090:7;31062:36;;;;;;;;;;;;;;;:115;;;;31227:1;31194:17;:29;31212:10;31194:29;;;;;;;;;;;;;;;;:34;31190:156;;;31245:10;31261;31245:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31333:1;31313:10;:17;;;;:21;;;;:::i;:::-;31287:11;:23;31299:10;31287:23;;;;;;;;;;;;;;;:47;;;;31190:156;30608:745;;:::o;21603:436::-;21696:4;21713:13;21729:12;:10;:12::i;:::-;21713:28;;21752:24;21779:25;21789:5;21796:7;21779:9;:25::i;:::-;21752:52;;21843:15;21823:16;:35;;21815:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21936:60;21945:5;21952:7;21980:15;21961:16;:34;21936:8;:60::i;:::-;22027:4;22020:11;;;;21603:436;;;;:::o;34215:187::-;34316:7;34383:10;:8;:10::i;:::-;34379:2;:14;;;;:::i;:::-;34348:12;:27;34361:13;34348:27;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;34341:53;;34215:187;;;:::o;18650:193::-;18729:4;18746:13;18762:12;:10;:12::i;:::-;18746:28;;18785;18795:5;18802:2;18806:6;18785:9;:28::i;:::-;18831:4;18824:11;;;18650:193;;;;:::o;28573:67::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18906:151::-;18995:7;19022:11;:18;19034:5;19022:18;;;;;;;;;;;;;;;:27;19041:7;19022:27;;;;;;;;;;;;;;;;19015:34;;18906:151;;;;:::o;34436:647::-;9687:13;:11;:13::i;:::-;34600:17:::1;:24;34581:8;:15;:43;34577:499;;34646:9;34641:198;34665:8;:15;34661:1;:19;34641:198;;;34813:10;:8;:10::i;:::-;34809:2;:14;;;;:::i;:::-;34765:17;34783:1;34765:20;;;;;;;;:::i;:::-;;;;;;;;:58;;;;;;:::i;:::-;34706:21;:34;34728:8;34737:1;34728:11;;;;;;;;:::i;:::-;;;;;;;;34706:34;;;;;;;;;;;;;;;;:117;;;;;;;:::i;:::-;;;;;;;;34682:3;;;;;:::i;:::-;;;;34641:198;;;;34577:499;;;34874:9;34869:207;34893:17;:24;34889:1;:28;34869:207;;;35050:10;:8;:10::i;:::-;35046:2;:14;;;;:::i;:::-;35002:17;35020:1;35002:20;;;;;;;;:::i;:::-;;;;;;;;:58;;;;;;:::i;:::-;34943:21;:34;34965:8;34974:1;34965:11;;;;;;;;:::i;:::-;;;;;;;;34943:34;;;;;;;;;;;;;;;;:117;;;;;;;:::i;:::-;;;;;;;;34919:3;;;;;:::i;:::-;;;;34869:207;;;;34577:499;34436:647:::0;;:::o;28514:52::-;;;;;;;;;;;;;;;;;:::o;10707:201::-;9687:13;:11;:13::i;:::-;10816:1:::1;10796:22;;:8;:22;;;;10788:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10872:28;10891:8;10872:18;:28::i;:::-;10707:201:::0;:::o;8352:98::-;8405:7;8432:10;8425:17;;8352:98;:::o;25228:380::-;25381:1;25364:19;;:5;:19;;;;25356:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25462:1;25443:21;;:7;:21;;;;25435:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25546:6;25516:11;:18;25528:5;25516:18;;;;;;;;;;;;;;;:27;25535:7;25516:27;;;;;;;;;;;;;;;:36;;;;25584:7;25568:32;;25577:5;25568:32;;;25593:6;25568:32;;;;;;:::i;:::-;;;;;;;;25228:380;;;:::o;23467:399::-;23570:1;23551:21;;:7;:21;;;;23543:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23621:49;23650:1;23654:7;23663:6;23621:20;:49::i;:::-;23699:6;23683:12;;:22;;;;;;;:::i;:::-;;;;;;;;23738:6;23716:9;:18;23726:7;23716:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;23781:7;23760:37;;23777:1;23760:37;;;23790:6;23760:37;;;;;;:::i;:::-;;;;;;;;23810:48;23838:1;23842:7;23851:6;23810:19;:48::i;:::-;23467:399;;:::o;25899:453::-;26034:24;26061:25;26071:5;26078:7;26061:9;:25::i;:::-;26034:52;;26121:17;26101:16;:37;26097:248;;26183:6;26163:16;:26;;26155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26267:51;26276:5;26283:7;26311:6;26292:16;:25;26267:8;:51::i;:::-;26097:248;26023:329;25899:453;;;:::o;22509:671::-;22656:1;22640:18;;:4;:18;;;;22632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22733:1;22719:16;;:2;:16;;;;22711:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22788:38;22809:4;22815:2;22819:6;22788:20;:38::i;:::-;22839:19;22861:9;:15;22871:4;22861:15;;;;;;;;;;;;;;;;22839:37;;22910:6;22895:11;:21;;22887:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;23027:6;23013:11;:20;22995:9;:15;23005:4;22995:15;;;;;;;;;;;;;;;:38;;;;23072:6;23055:9;:13;23065:2;23055:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;23111:2;23096:26;;23105:4;23096:26;;;23115:6;23096:26;;;;;;:::i;:::-;;;;;;;;23135:37;23155:4;23161:2;23165:6;23135:19;:37::i;:::-;22621:559;22509:671;;;:::o;9966:132::-;10041:12;:10;:12::i;:::-;10030:23;;:7;:5;:7::i;:::-;:23;;;10022:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9966:132::o;11068:191::-;11142:16;11161:6;;;;;;;;;;;11142:25;;11187:8;11178:6;;:17;;;;;;;;;;;;;;;;;;11242:8;11211:40;;11232:8;11211:40;;;;;;;;;;;;11131:128;11068:191;:::o;26952:125::-;;;;:::o;27681:124::-;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;768:719::-;863:5;888:80;904:63;960:6;904:63;:::i;:::-;888:80;:::i;:::-;879:89;;988:5;1017:6;1010:5;1003:21;1051:4;1044:5;1040:16;1033:23;;1077:6;1127:3;1119:4;1111:6;1107:17;1102:3;1098:27;1095:36;1092:143;;;1146:79;;:::i;:::-;1092:143;1259:1;1244:237;1269:6;1266:1;1263:13;1244:237;;;1337:3;1366:36;1398:3;1386:10;1366:36;:::i;:::-;1361:3;1354:49;1432:4;1427:3;1423:14;1416:21;;1466:4;1461:3;1457:14;1450:21;;1304:177;1291:1;1288;1284:9;1279:14;;1244:237;;;1248:14;869:618;;768:719;;;;;:::o;1493:410::-;1570:5;1595:65;1611:48;1652:6;1611:48;:::i;:::-;1595:65;:::i;:::-;1586:74;;1683:6;1676:5;1669:21;1721:4;1714:5;1710:16;1759:3;1750:6;1745:3;1741:16;1738:25;1735:112;;;1766:79;;:::i;:::-;1735:112;1856:41;1890:6;1885:3;1880;1856:41;:::i;:::-;1576:327;1493:410;;;;;:::o;1909:139::-;1955:5;1993:6;1980:20;1971:29;;2009:33;2036:5;2009:33;:::i;:::-;1909:139;;;;:::o;2071:370::-;2142:5;2191:3;2184:4;2176:6;2172:17;2168:27;2158:122;;2199:79;;:::i;:::-;2158:122;2316:6;2303:20;2341:94;2431:3;2423:6;2416:4;2408:6;2404:17;2341:94;:::i;:::-;2332:103;;2148:293;2071:370;;;;:::o;2463:368::-;2533:5;2582:3;2575:4;2567:6;2563:17;2559:27;2549:122;;2590:79;;:::i;:::-;2549:122;2707:6;2694:20;2732:93;2821:3;2813:6;2806:4;2798:6;2794:17;2732:93;:::i;:::-;2723:102;;2539:292;2463:368;;;;:::o;2850:338::-;2905:5;2954:3;2947:4;2939:6;2935:17;2931:27;2921:122;;2962:79;;:::i;:::-;2921:122;3079:6;3066:20;3104:78;3178:3;3170:6;3163:4;3155:6;3151:17;3104:78;:::i;:::-;3095:87;;2911:277;2850:338;;;;:::o;3194:139::-;3240:5;3278:6;3265:20;3256:29;;3294:33;3321:5;3294:33;:::i;:::-;3194:139;;;;:::o;3339:137::-;3384:5;3422:6;3409:20;3400:29;;3438:32;3464:5;3438:32;:::i;:::-;3339:137;;;;:::o;3482:135::-;3526:5;3564:6;3551:20;3542:29;;3580:31;3605:5;3580:31;:::i;:::-;3482:135;;;;:::o;3623:329::-;3682:6;3731:2;3719:9;3710:7;3706:23;3702:32;3699:119;;;3737:79;;:::i;:::-;3699:119;3857:1;3882:53;3927:7;3918:6;3907:9;3903:22;3882:53;:::i;:::-;3872:63;;3828:117;3623:329;;;;:::o;3958:474::-;4026:6;4034;4083:2;4071:9;4062:7;4058:23;4054:32;4051:119;;;4089:79;;:::i;:::-;4051:119;4209:1;4234:53;4279:7;4270:6;4259:9;4255:22;4234:53;:::i;:::-;4224:63;;4180:117;4336:2;4362:53;4407:7;4398:6;4387:9;4383:22;4362:53;:::i;:::-;4352:63;;4307:118;3958:474;;;;;:::o;4438:619::-;4515:6;4523;4531;4580:2;4568:9;4559:7;4555:23;4551:32;4548:119;;;4586:79;;:::i;:::-;4548:119;4706:1;4731:53;4776:7;4767:6;4756:9;4752:22;4731:53;:::i;:::-;4721:63;;4677:117;4833:2;4859:53;4904:7;4895:6;4884:9;4880:22;4859:53;:::i;:::-;4849:63;;4804:118;4961:2;4987:53;5032:7;5023:6;5012:9;5008:22;4987:53;:::i;:::-;4977:63;;4932:118;4438:619;;;;;:::o;5063:943::-;5158:6;5166;5174;5182;5231:3;5219:9;5210:7;5206:23;5202:33;5199:120;;;5238:79;;:::i;:::-;5199:120;5358:1;5383:53;5428:7;5419:6;5408:9;5404:22;5383:53;:::i;:::-;5373:63;;5329:117;5485:2;5511:53;5556:7;5547:6;5536:9;5532:22;5511:53;:::i;:::-;5501:63;;5456:118;5613:2;5639:53;5684:7;5675:6;5664:9;5660:22;5639:53;:::i;:::-;5629:63;;5584:118;5769:2;5758:9;5754:18;5741:32;5800:18;5792:6;5789:30;5786:117;;;5822:79;;:::i;:::-;5786:117;5927:62;5981:7;5972:6;5961:9;5957:22;5927:62;:::i;:::-;5917:72;;5712:287;5063:943;;;;;;;:::o;6012:474::-;6080:6;6088;6137:2;6125:9;6116:7;6112:23;6108:32;6105:119;;;6143:79;;:::i;:::-;6105:119;6263:1;6288:53;6333:7;6324:6;6313:9;6309:22;6288:53;:::i;:::-;6278:63;;6234:117;6390:2;6416:53;6461:7;6452:6;6441:9;6437:22;6416:53;:::i;:::-;6406:63;;6361:118;6012:474;;;;;:::o;6492:472::-;6559:6;6567;6616:2;6604:9;6595:7;6591:23;6587:32;6584:119;;;6622:79;;:::i;:::-;6584:119;6742:1;6767:53;6812:7;6803:6;6792:9;6788:22;6767:53;:::i;:::-;6757:63;;6713:117;6869:2;6895:52;6939:7;6930:6;6919:9;6915:22;6895:52;:::i;:::-;6885:62;;6840:117;6492:472;;;;;:::o;6970:892::-;7087:6;7095;7144:2;7132:9;7123:7;7119:23;7115:32;7112:119;;;7150:79;;:::i;:::-;7112:119;7298:1;7287:9;7283:17;7270:31;7328:18;7320:6;7317:30;7314:117;;;7350:79;;:::i;:::-;7314:117;7455:78;7525:7;7516:6;7505:9;7501:22;7455:78;:::i;:::-;7445:88;;7241:302;7610:2;7599:9;7595:18;7582:32;7641:18;7633:6;7630:30;7627:117;;;7663:79;;:::i;:::-;7627:117;7768:77;7837:7;7828:6;7817:9;7813:22;7768:77;:::i;:::-;7758:87;;7553:302;6970:892;;;;;:::o;7868:329::-;7927:6;7976:2;7964:9;7955:7;7951:23;7947:32;7944:119;;;7982:79;;:::i;:::-;7944:119;8102:1;8127:53;8172:7;8163:6;8152:9;8148:22;8127:53;:::i;:::-;8117:63;;8073:117;7868:329;;;;:::o;8203:325::-;8260:6;8309:2;8297:9;8288:7;8284:23;8280:32;8277:119;;;8315:79;;:::i;:::-;8277:119;8435:1;8460:51;8503:7;8494:6;8483:9;8479:22;8460:51;:::i;:::-;8450:61;;8406:115;8203:325;;;;:::o;8534:179::-;8603:10;8624:46;8666:3;8658:6;8624:46;:::i;:::-;8702:4;8697:3;8693:14;8679:28;;8534:179;;;;:::o;8719:175::-;8786:10;8807:44;8847:3;8839:6;8807:44;:::i;:::-;8883:4;8878:3;8874:14;8860:28;;8719:175;;;;:::o;8900:108::-;8977:24;8995:5;8977:24;:::i;:::-;8972:3;8965:37;8900:108;;:::o;9014:118::-;9101:24;9119:5;9101:24;:::i;:::-;9096:3;9089:37;9014:118;;:::o;9168:732::-;9287:3;9316:54;9364:5;9316:54;:::i;:::-;9386:86;9465:6;9460:3;9386:86;:::i;:::-;9379:93;;9496:56;9546:5;9496:56;:::i;:::-;9575:7;9606:1;9591:284;9616:6;9613:1;9610:13;9591:284;;;9692:6;9686:13;9719:63;9778:3;9763:13;9719:63;:::i;:::-;9712:70;;9805:60;9858:6;9805:60;:::i;:::-;9795:70;;9651:224;9638:1;9635;9631:9;9626:14;;9591:284;;;9595:14;9891:3;9884:10;;9292:608;;;9168:732;;;;:::o;9934:724::-;10051:3;10080:53;10127:5;10080:53;:::i;:::-;10149:85;10227:6;10222:3;10149:85;:::i;:::-;10142:92;;10258:55;10307:5;10258:55;:::i;:::-;10336:7;10367:1;10352:281;10377:6;10374:1;10371:13;10352:281;;;10453:6;10447:13;10480:61;10537:3;10522:13;10480:61;:::i;:::-;10473:68;;10564:59;10616:6;10564:59;:::i;:::-;10554:69;;10412:221;10399:1;10396;10392:9;10387:14;;10352:281;;;10356:14;10649:3;10642:10;;10056:602;;;9934:724;;;;:::o;10664:109::-;10745:21;10760:5;10745:21;:::i;:::-;10740:3;10733:34;10664:109;;:::o;10779:115::-;10864:23;10881:5;10864:23;:::i;:::-;10859:3;10852:36;10779:115;;:::o;10900:364::-;10988:3;11016:39;11049:5;11016:39;:::i;:::-;11071:71;11135:6;11130:3;11071:71;:::i;:::-;11064:78;;11151:52;11196:6;11191:3;11184:4;11177:5;11173:16;11151:52;:::i;:::-;11228:29;11250:6;11228:29;:::i;:::-;11223:3;11219:39;11212:46;;10992:272;10900:364;;;;:::o;11270:366::-;11412:3;11433:67;11497:2;11492:3;11433:67;:::i;:::-;11426:74;;11509:93;11598:3;11509:93;:::i;:::-;11627:2;11622:3;11618:12;11611:19;;11270:366;;;:::o;11642:::-;11784:3;11805:67;11869:2;11864:3;11805:67;:::i;:::-;11798:74;;11881:93;11970:3;11881:93;:::i;:::-;11999:2;11994:3;11990:12;11983:19;;11642:366;;;:::o;12014:::-;12156:3;12177:67;12241:2;12236:3;12177:67;:::i;:::-;12170:74;;12253:93;12342:3;12253:93;:::i;:::-;12371:2;12366:3;12362:12;12355:19;;12014:366;;;:::o;12386:::-;12528:3;12549:67;12613:2;12608:3;12549:67;:::i;:::-;12542:74;;12625:93;12714:3;12625:93;:::i;:::-;12743:2;12738:3;12734:12;12727:19;;12386:366;;;:::o;12758:::-;12900:3;12921:67;12985:2;12980:3;12921:67;:::i;:::-;12914:74;;12997:93;13086:3;12997:93;:::i;:::-;13115:2;13110:3;13106:12;13099:19;;12758:366;;;:::o;13130:::-;13272:3;13293:67;13357:2;13352:3;13293:67;:::i;:::-;13286:74;;13369:93;13458:3;13369:93;:::i;:::-;13487:2;13482:3;13478:12;13471:19;;13130:366;;;:::o;13502:::-;13644:3;13665:67;13729:2;13724:3;13665:67;:::i;:::-;13658:74;;13741:93;13830:3;13741:93;:::i;:::-;13859:2;13854:3;13850:12;13843:19;;13502:366;;;:::o;13874:::-;14016:3;14037:67;14101:2;14096:3;14037:67;:::i;:::-;14030:74;;14113:93;14202:3;14113:93;:::i;:::-;14231:2;14226:3;14222:12;14215:19;;13874:366;;;:::o;14246:::-;14388:3;14409:67;14473:2;14468:3;14409:67;:::i;:::-;14402:74;;14485:93;14574:3;14485:93;:::i;:::-;14603:2;14598:3;14594:12;14587:19;;14246:366;;;:::o;14618:::-;14760:3;14781:67;14845:2;14840:3;14781:67;:::i;:::-;14774:74;;14857:93;14946:3;14857:93;:::i;:::-;14975:2;14970:3;14966:12;14959:19;;14618:366;;;:::o;14990:::-;15132:3;15153:67;15217:2;15212:3;15153:67;:::i;:::-;15146:74;;15229:93;15318:3;15229:93;:::i;:::-;15347:2;15342:3;15338:12;15331:19;;14990:366;;;:::o;15362:::-;15504:3;15525:67;15589:2;15584:3;15525:67;:::i;:::-;15518:74;;15601:93;15690:3;15601:93;:::i;:::-;15719:2;15714:3;15710:12;15703:19;;15362:366;;;:::o;15734:::-;15876:3;15897:67;15961:2;15956:3;15897:67;:::i;:::-;15890:74;;15973:93;16062:3;15973:93;:::i;:::-;16091:2;16086:3;16082:12;16075:19;;15734:366;;;:::o;16106:::-;16248:3;16269:67;16333:2;16328:3;16269:67;:::i;:::-;16262:74;;16345:93;16434:3;16345:93;:::i;:::-;16463:2;16458:3;16454:12;16447:19;;16106:366;;;:::o;16478:::-;16620:3;16641:67;16705:2;16700:3;16641:67;:::i;:::-;16634:74;;16717:93;16806:3;16717:93;:::i;:::-;16835:2;16830:3;16826:12;16819:19;;16478:366;;;:::o;16850:::-;16992:3;17013:67;17077:2;17072:3;17013:67;:::i;:::-;17006:74;;17089:93;17178:3;17089:93;:::i;:::-;17207:2;17202:3;17198:12;17191:19;;16850:366;;;:::o;17222:118::-;17309:24;17327:5;17309:24;:::i;:::-;17304:3;17297:37;17222:118;;:::o;17346:129::-;17432:36;17462:5;17432:36;:::i;:::-;17427:3;17420:49;17346:129;;:::o;17481:105::-;17556:23;17573:5;17556:23;:::i;:::-;17551:3;17544:36;17481:105;;:::o;17592:112::-;17675:22;17691:5;17675:22;:::i;:::-;17670:3;17663:35;17592:112;;:::o;17710:222::-;17803:4;17841:2;17830:9;17826:18;17818:26;;17854:71;17922:1;17911:9;17907:17;17898:6;17854:71;:::i;:::-;17710:222;;;;:::o;17938:440::-;18086:4;18124:2;18113:9;18109:18;18101:26;;18137:71;18205:1;18194:9;18190:17;18181:6;18137:71;:::i;:::-;18218:72;18286:2;18275:9;18271:18;18262:6;18218:72;:::i;:::-;18300:71;18367:2;18356:9;18352:18;18343:6;18300:71;:::i;:::-;17938:440;;;;;;:::o;18384:373::-;18527:4;18565:2;18554:9;18550:18;18542:26;;18614:9;18608:4;18604:20;18600:1;18589:9;18585:17;18578:47;18642:108;18745:4;18736:6;18642:108;:::i;:::-;18634:116;;18384:373;;;;:::o;18763:369::-;18904:4;18942:2;18931:9;18927:18;18919:26;;18991:9;18985:4;18981:20;18977:1;18966:9;18962:17;18955:47;19019:106;19120:4;19111:6;19019:106;:::i;:::-;19011:114;;18763:369;;;;:::o;19138:210::-;19225:4;19263:2;19252:9;19248:18;19240:26;;19276:65;19338:1;19327:9;19323:17;19314:6;19276:65;:::i;:::-;19138:210;;;;:::o;19354:218::-;19445:4;19483:2;19472:9;19468:18;19460:26;;19496:69;19562:1;19551:9;19547:17;19538:6;19496:69;:::i;:::-;19354:218;;;;:::o;19578:313::-;19691:4;19729:2;19718:9;19714:18;19706:26;;19778:9;19772:4;19768:20;19764:1;19753:9;19749:17;19742:47;19806:78;19879:4;19870:6;19806:78;:::i;:::-;19798:86;;19578:313;;;;:::o;19897:419::-;20063:4;20101:2;20090:9;20086:18;20078:26;;20150:9;20144:4;20140:20;20136:1;20125:9;20121:17;20114:47;20178:131;20304:4;20178:131;:::i;:::-;20170:139;;19897:419;;;:::o;20322:::-;20488:4;20526:2;20515:9;20511:18;20503:26;;20575:9;20569:4;20565:20;20561:1;20550:9;20546:17;20539:47;20603:131;20729:4;20603:131;:::i;:::-;20595:139;;20322:419;;;:::o;20747:::-;20913:4;20951:2;20940:9;20936:18;20928:26;;21000:9;20994:4;20990:20;20986:1;20975:9;20971:17;20964:47;21028:131;21154:4;21028:131;:::i;:::-;21020:139;;20747:419;;;:::o;21172:::-;21338:4;21376:2;21365:9;21361:18;21353:26;;21425:9;21419:4;21415:20;21411:1;21400:9;21396:17;21389:47;21453:131;21579:4;21453:131;:::i;:::-;21445:139;;21172:419;;;:::o;21597:::-;21763:4;21801:2;21790:9;21786:18;21778:26;;21850:9;21844:4;21840:20;21836:1;21825:9;21821:17;21814:47;21878:131;22004:4;21878:131;:::i;:::-;21870:139;;21597:419;;;:::o;22022:::-;22188:4;22226:2;22215:9;22211:18;22203:26;;22275:9;22269:4;22265:20;22261:1;22250:9;22246:17;22239:47;22303:131;22429:4;22303:131;:::i;:::-;22295:139;;22022:419;;;:::o;22447:::-;22613:4;22651:2;22640:9;22636:18;22628:26;;22700:9;22694:4;22690:20;22686:1;22675:9;22671:17;22664:47;22728:131;22854:4;22728:131;:::i;:::-;22720:139;;22447:419;;;:::o;22872:::-;23038:4;23076:2;23065:9;23061:18;23053:26;;23125:9;23119:4;23115:20;23111:1;23100:9;23096:17;23089:47;23153:131;23279:4;23153:131;:::i;:::-;23145:139;;22872:419;;;:::o;23297:::-;23463:4;23501:2;23490:9;23486:18;23478:26;;23550:9;23544:4;23540:20;23536:1;23525:9;23521:17;23514:47;23578:131;23704:4;23578:131;:::i;:::-;23570:139;;23297:419;;;:::o;23722:::-;23888:4;23926:2;23915:9;23911:18;23903:26;;23975:9;23969:4;23965:20;23961:1;23950:9;23946:17;23939:47;24003:131;24129:4;24003:131;:::i;:::-;23995:139;;23722:419;;;:::o;24147:::-;24313:4;24351:2;24340:9;24336:18;24328:26;;24400:9;24394:4;24390:20;24386:1;24375:9;24371:17;24364:47;24428:131;24554:4;24428:131;:::i;:::-;24420:139;;24147:419;;;:::o;24572:::-;24738:4;24776:2;24765:9;24761:18;24753:26;;24825:9;24819:4;24815:20;24811:1;24800:9;24796:17;24789:47;24853:131;24979:4;24853:131;:::i;:::-;24845:139;;24572:419;;;:::o;24997:::-;25163:4;25201:2;25190:9;25186:18;25178:26;;25250:9;25244:4;25240:20;25236:1;25225:9;25221:17;25214:47;25278:131;25404:4;25278:131;:::i;:::-;25270:139;;24997:419;;;:::o;25422:::-;25588:4;25626:2;25615:9;25611:18;25603:26;;25675:9;25669:4;25665:20;25661:1;25650:9;25646:17;25639:47;25703:131;25829:4;25703:131;:::i;:::-;25695:139;;25422:419;;;:::o;25847:::-;26013:4;26051:2;26040:9;26036:18;26028:26;;26100:9;26094:4;26090:20;26086:1;26075:9;26071:17;26064:47;26128:131;26254:4;26128:131;:::i;:::-;26120:139;;25847:419;;;:::o;26272:::-;26438:4;26476:2;26465:9;26461:18;26453:26;;26525:9;26519:4;26515:20;26511:1;26500:9;26496:17;26489:47;26553:131;26679:4;26553:131;:::i;:::-;26545:139;;26272:419;;;:::o;26697:222::-;26790:4;26828:2;26817:9;26813:18;26805:26;;26841:71;26909:1;26898:9;26894:17;26885:6;26841:71;:::i;:::-;26697:222;;;;:::o;26925:214::-;27014:4;27052:2;27041:9;27037:18;27029:26;;27065:67;27129:1;27118:9;27114:17;27105:6;27065:67;:::i;:::-;26925:214;;;;:::o;27145:129::-;27179:6;27206:20;;:::i;:::-;27196:30;;27235:33;27263:4;27255:6;27235:33;:::i;:::-;27145:129;;;:::o;27280:75::-;27313:6;27346:2;27340:9;27330:19;;27280:75;:::o;27361:311::-;27438:4;27528:18;27520:6;27517:30;27514:56;;;27550:18;;:::i;:::-;27514:56;27600:4;27592:6;27588:17;27580:25;;27660:4;27654;27650:15;27642:23;;27361:311;;;:::o;27678:310::-;27754:4;27844:18;27836:6;27833:30;27830:56;;;27866:18;;:::i;:::-;27830:56;27916:4;27908:6;27904:17;27896:25;;27976:4;27970;27966:15;27958:23;;27678:310;;;:::o;27994:307::-;28055:4;28145:18;28137:6;28134:30;28131:56;;;28167:18;;:::i;:::-;28131:56;28205:29;28227:6;28205:29;:::i;:::-;28197:37;;28289:4;28283;28279:15;28271:23;;27994:307;;;:::o;28307:132::-;28374:4;28397:3;28389:11;;28427:4;28422:3;28418:14;28410:22;;28307:132;;;:::o;28445:131::-;28511:4;28534:3;28526:11;;28564:4;28559:3;28555:14;28547:22;;28445:131;;;:::o;28582:114::-;28649:6;28683:5;28677:12;28667:22;;28582:114;;;:::o;28702:113::-;28768:6;28802:5;28796:12;28786:22;;28702:113;;;:::o;28821:99::-;28873:6;28907:5;28901:12;28891:22;;28821:99;;;:::o;28926:113::-;28996:4;29028;29023:3;29019:14;29011:22;;28926:113;;;:::o;29045:112::-;29114:4;29146;29141:3;29137:14;29129:22;;29045:112;;;:::o;29163:184::-;29262:11;29296:6;29291:3;29284:19;29336:4;29331:3;29327:14;29312:29;;29163:184;;;;:::o;29353:183::-;29451:11;29485:6;29480:3;29473:19;29525:4;29520:3;29516:14;29501:29;;29353:183;;;;:::o;29542:169::-;29626:11;29660:6;29655:3;29648:19;29700:4;29695:3;29691:14;29676:29;;29542:169;;;;:::o;29717:305::-;29757:3;29776:20;29794:1;29776:20;:::i;:::-;29771:25;;29810:20;29828:1;29810:20;:::i;:::-;29805:25;;29964:1;29896:66;29892:74;29889:1;29886:81;29883:107;;;29970:18;;:::i;:::-;29883:107;30014:1;30011;30007:9;30000:16;;29717:305;;;;:::o;30028:185::-;30068:1;30085:20;30103:1;30085:20;:::i;:::-;30080:25;;30119:20;30137:1;30119:20;:::i;:::-;30114:25;;30158:1;30148:35;;30163:18;;:::i;:::-;30148:35;30205:1;30202;30198:9;30193:14;;30028:185;;;;:::o;30219:848::-;30280:5;30287:4;30311:6;30302:15;;30335:5;30326:14;;30349:712;30370:1;30360:8;30357:15;30349:712;;;30465:4;30460:3;30456:14;30450:4;30447:24;30444:50;;;30474:18;;:::i;:::-;30444:50;30524:1;30514:8;30510:16;30507:451;;;30939:4;30932:5;30928:16;30919:25;;30507:451;30989:4;30983;30979:15;30971:23;;31019:32;31042:8;31019:32;:::i;:::-;31007:44;;30349:712;;;30219:848;;;;;;;:::o;31073:281::-;31131:5;31155:23;31173:4;31155:23;:::i;:::-;31147:31;;31199:25;31215:8;31199:25;:::i;:::-;31187:37;;31243:104;31280:66;31270:8;31264:4;31243:104;:::i;:::-;31234:113;;31073:281;;;;:::o;31360:1073::-;31414:5;31605:8;31595:40;;31626:1;31617:10;;31628:5;;31595:40;31654:4;31644:36;;31671:1;31662:10;;31673:5;;31644:36;31740:4;31788:1;31783:27;;;;31824:1;31819:191;;;;31733:277;;31783:27;31801:1;31792:10;;31803:5;;;31819:191;31864:3;31854:8;31851:17;31848:43;;;31871:18;;:::i;:::-;31848:43;31920:8;31917:1;31913:16;31904:25;;31955:3;31948:5;31945:14;31942:40;;;31962:18;;:::i;:::-;31942:40;31995:5;;;31733:277;;32119:2;32109:8;32106:16;32100:3;32094:4;32091:13;32087:36;32069:2;32059:8;32056:16;32051:2;32045:4;32042:12;32038:35;32022:111;32019:246;;;32175:8;32169:4;32165:19;32156:28;;32210:3;32203:5;32200:14;32197:40;;;32217:18;;:::i;:::-;32197:40;32250:5;;32019:246;32290:42;32328:3;32318:8;32312:4;32309:1;32290:42;:::i;:::-;32275:57;;;;32364:4;32359:3;32355:14;32348:5;32345:25;32342:51;;;32373:18;;:::i;:::-;32342:51;32422:4;32415:5;32411:16;32402:25;;31360:1073;;;;;;:::o;32439:348::-;32479:7;32502:20;32520:1;32502:20;:::i;:::-;32497:25;;32536:20;32554:1;32536:20;:::i;:::-;32531:25;;32724:1;32656:66;32652:74;32649:1;32646:81;32641:1;32634:9;32627:17;32623:105;32620:131;;;32731:18;;:::i;:::-;32620:131;32779:1;32776;32772:9;32761:20;;32439:348;;;;:::o;32793:191::-;32833:4;32853:20;32871:1;32853:20;:::i;:::-;32848:25;;32887:20;32905:1;32887:20;:::i;:::-;32882:25;;32926:1;32923;32920:8;32917:34;;;32931:18;;:::i;:::-;32917:34;32976:1;32973;32969:9;32961:17;;32793:191;;;;:::o;32990:96::-;33027:7;33056:24;33074:5;33056:24;:::i;:::-;33045:35;;32990:96;;;:::o;33092:90::-;33126:7;33169:5;33162:13;33155:21;33144:32;;33092:90;;;:::o;33188:149::-;33224:7;33264:66;33257:5;33253:78;33242:89;;33188:149;;;:::o;33343:126::-;33380:7;33420:42;33413:5;33409:54;33398:65;;33343:126;;;:::o;33475:77::-;33512:7;33541:5;33530:16;;33475:77;;;:::o;33558:93::-;33594:7;33634:10;33627:5;33623:22;33612:33;;33558:93;;;:::o;33657:86::-;33692:7;33732:4;33725:5;33721:16;33710:27;;33657:86;;;:::o;33749:111::-;33798:9;33831:23;33848:5;33831:23;:::i;:::-;33818:36;;33749:111;;;:::o;33866:154::-;33950:6;33945:3;33940;33927:30;34012:1;34003:6;33998:3;33994:16;33987:27;33866:154;;;:::o;34026:307::-;34094:1;34104:113;34118:6;34115:1;34112:13;34104:113;;;34203:1;34198:3;34194:11;34188:18;34184:1;34179:3;34175:11;34168:39;34140:2;34137:1;34133:10;34128:15;;34104:113;;;34235:6;34232:1;34229:13;34226:101;;;34315:1;34306:6;34301:3;34297:16;34290:27;34226:101;34075:258;34026:307;;;:::o;34339:171::-;34378:3;34401:24;34419:5;34401:24;:::i;:::-;34392:33;;34447:4;34440:5;34437:15;34434:41;;;34455:18;;:::i;:::-;34434:41;34502:1;34495:5;34491:13;34484:20;;34339:171;;;:::o;34516:320::-;34560:6;34597:1;34591:4;34587:12;34577:22;;34644:1;34638:4;34634:12;34665:18;34655:81;;34721:4;34713:6;34709:17;34699:27;;34655:81;34783:2;34775:6;34772:14;34752:18;34749:38;34746:84;;;34802:18;;:::i;:::-;34746:84;34567:269;34516:320;;;:::o;34842:281::-;34925:27;34947:4;34925:27;:::i;:::-;34917:6;34913:40;35055:6;35043:10;35040:22;35019:18;35007:10;35004:34;35001:62;34998:88;;;35066:18;;:::i;:::-;34998:88;35106:10;35102:2;35095:22;34885:238;34842:281;;:::o;35129:233::-;35168:3;35191:24;35209:5;35191:24;:::i;:::-;35182:33;;35237:66;35230:5;35227:77;35224:103;;;35307:18;;:::i;:::-;35224:103;35354:1;35347:5;35343:13;35336:20;;35129:233;;;:::o;35368:180::-;35416:77;35413:1;35406:88;35513:4;35510:1;35503:15;35537:4;35534:1;35527:15;35554:180;35602:77;35599:1;35592:88;35699:4;35696:1;35689:15;35723:4;35720:1;35713:15;35740:180;35788:77;35785:1;35778:88;35885:4;35882:1;35875:15;35909:4;35906:1;35899:15;35926:180;35974:77;35971:1;35964:88;36071:4;36068:1;36061:15;36095:4;36092:1;36085:15;36112:180;36160:77;36157:1;36150:88;36257:4;36254:1;36247:15;36281:4;36278:1;36271:15;36298:180;36346:77;36343:1;36336:88;36443:4;36440:1;36433:15;36467:4;36464:1;36457:15;36484:117;36593:1;36590;36583:12;36607:117;36716:1;36713;36706:12;36730:117;36839:1;36836;36829:12;36853:117;36962:1;36959;36952:12;36976:117;37085:1;37082;37075:12;37099:102;37140:6;37191:2;37187:7;37182:2;37175:5;37171:14;37167:28;37157:38;;37099:102;;;:::o;37207:::-;37249:8;37296:5;37293:1;37289:13;37268:34;;37207:102;;;:::o;37315:222::-;37455:34;37451:1;37443:6;37439:14;37432:58;37524:5;37519:2;37511:6;37507:15;37500:30;37315:222;:::o;37543:225::-;37683:34;37679:1;37671:6;37667:14;37660:58;37752:8;37747:2;37739:6;37735:15;37728:33;37543:225;:::o;37774:221::-;37914:34;37910:1;37902:6;37898:14;37891:58;37983:4;37978:2;37970:6;37966:15;37959:29;37774:221;:::o;38001:166::-;38141:18;38137:1;38129:6;38125:14;38118:42;38001:166;:::o;38173:179::-;38313:31;38309:1;38301:6;38297:14;38290:55;38173:179;:::o;38358:225::-;38498:34;38494:1;38486:6;38482:14;38475:58;38567:8;38562:2;38554:6;38550:15;38543:33;38358:225;:::o;38589:166::-;38729:18;38725:1;38717:6;38713:14;38706:42;38589:166;:::o;38761:231::-;38901:34;38897:1;38889:6;38885:14;38878:58;38970:14;38965:2;38957:6;38953:15;38946:39;38761:231;:::o;38998:178::-;39138:30;39134:1;39126:6;39122:14;39115:54;38998:178;:::o;39182:182::-;39322:34;39318:1;39310:6;39306:14;39299:58;39182:182;:::o;39370:224::-;39510:34;39506:1;39498:6;39494:14;39487:58;39579:7;39574:2;39566:6;39562:15;39555:32;39370:224;:::o;39600:223::-;39740:34;39736:1;39728:6;39724:14;39717:58;39809:6;39804:2;39796:6;39792:15;39785:31;39600:223;:::o;39829:168::-;39969:20;39965:1;39957:6;39953:14;39946:44;39829:168;:::o;40003:173::-;40143:25;40139:1;40131:6;40127:14;40120:49;40003:173;:::o;40182:224::-;40322:34;40318:1;40310:6;40306:14;40299:58;40391:7;40386:2;40378:6;40374:15;40367:32;40182:224;:::o;40412:181::-;40552:33;40548:1;40540:6;40536:14;40529:57;40412:181;:::o;40599:122::-;40672:24;40690:5;40672:24;:::i;:::-;40665:5;40662:35;40652:63;;40711:1;40708;40701:12;40652:63;40599:122;:::o;40727:::-;40800:24;40818:5;40800:24;:::i;:::-;40793:5;40790:35;40780:63;;40839:1;40836;40829:12;40780:63;40727:122;:::o;40855:120::-;40927:23;40944:5;40927:23;:::i;:::-;40920:5;40917:34;40907:62;;40965:1;40962;40955:12;40907:62;40855:120;:::o;40981:118::-;41052:22;41068:5;41052:22;:::i;:::-;41045:5;41042:33;41032:61;;41089:1;41086;41079:12;41032:61;40981:118;:::o
Swarm Source
ipfs://c35ed216c85e26922bd46cfed48f186a0c09299789f5810750b5e80338f8aff4
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.