Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 9 from a total of 9 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 19927161 | 100 days ago | IN | 0 ETH | 0.00117491 | ||||
Admin Mint | 19927159 | 100 days ago | IN | 0 ETH | 0.00138342 | ||||
Approve | 19927156 | 100 days ago | IN | 0 ETH | 0.00107195 | ||||
Approve | 19927100 | 100 days ago | IN | 0 ETH | 0.00142535 | ||||
Approve | 19927082 | 100 days ago | IN | 0 ETH | 0.00111022 | ||||
Renounce Ownersh... | 19927071 | 100 days ago | IN | 0 ETH | 0.0003527 | ||||
Admin Mint | 19927070 | 100 days ago | IN | 0 ETH | 0.0011354 | ||||
Add To Team | 19927068 | 100 days ago | IN | 0 ETH | 0.00072451 | ||||
0x60a06040 | 19927056 | 100 days ago | IN | 0 ETH | 0.05837016 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ERC20Plus
Compiler Version
v0.8.25+commit.b61c2a91
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-05-22 */ // SPDX-License-Identifier: MIT /** Website : https://kirokat.com Twitter : https://twitter.com/kirocoin Telegram: https://t.me/kirokatcoin */ error TransactionCapExceeded(); error ExcessiveOwnedMints(); error MintZeroQuantity(); error InvalidPayment(); error CapExceeded(); error ValueCannotBeZero(); error CannotBeNullAddress(); error InvalidTeamChange(); error InvalidInputValue(); error NoStateChange(); error PublicMintingClosed(); error AllowlistMintClosed(); error AddressNotAllowlisted(); error OnlyERC20MintingEnabled(); error ERC20TokenNotApproved(); error ERC20InsufficientBalance(); error ERC20InsufficientAllowance(); error ERC20TransferFailed(); error ERC20CappedInvalidValue(); error NotMaintainer(); pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ library MerkleProof { /** * @dev Returns true if a 'leaf' can be proved to be a part of a Merkle tree * defined by 'root'. For this, a 'proof' must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from 'leaf' using 'proof'. A 'proof' is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // 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/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); if(currentAllowance < subtractedValue) revert ERC20InsufficientBalance(); 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 { if(from == address(0)) revert CannotBeNullAddress(); if(to == address(0)) revert CannotBeNullAddress(); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; if(fromBalance < amount) revert ERC20InsufficientBalance(); 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 { if(account == address(0)) revert CannotBeNullAddress(); _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 { if(account == address(0)) revert CannotBeNullAddress(); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; if(accountBalance < amount) revert ERC20InsufficientBalance(); 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 { if(owner == address(0)) revert CannotBeNullAddress(); if(spender == address(0)) revert CannotBeNullAddress(); _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) { if(currentAllowance < amount) revert ERC20InsufficientBalance(); 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/erc20.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } } // 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 { if(newOwner == address(0)) revert CannotBeNullAddress(); _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); } } // Rampp Contracts v2.1 (Teams.sol) pragma solidity ^0.8.0; /** * Teams is a contract implementation to extend upon Ownable that allows multiple controllers * of a single contract to modify specific mint settings but not have overall ownership of the contract. * This will easily allow cross-collaboration via Mintplex.xyz. **/ abstract contract Teams is Ownable{ mapping (address => bool) internal team; /** * @dev Adds an address to the team. Allows them to execute protected functions * @param _address the ETH address to add, cannot be 0x and cannot be in team already **/ function addToTeam(address _address) public onlyOwner { if(_address == address(0)) revert CannotBeNullAddress(); if(inTeam(_address)) revert InvalidTeamChange(); team[_address] = true; } /** * @dev Removes an address to the team. * @param _address the ETH address to remove, cannot be 0x and must be in team **/ function removeFromTeam(address _address) public onlyOwner { if(_address == address(0)) revert CannotBeNullAddress(); if(!inTeam(_address)) revert InvalidTeamChange(); team[_address] = false; } /** * @dev Check if an address is valid and active in the team * @param _address ETH address to check for truthiness **/ function inTeam(address _address) public view returns (bool) { if(_address == address(0)) revert CannotBeNullAddress(); return team[_address] == true; } /** * @dev Throws if called by any account other than the owner or team member. */ function _onlyTeamOrOwner() private view { bool _isOwner = owner() == _msgSender(); bool _isTeam = inTeam(_msgSender()); require(_isOwner || _isTeam, "Team: caller is not the owner or in Team."); } modifier onlyTeamOrOwner() { _onlyTeamOrOwner(); _; } } // @dev Allows the contract to have an enforceable supply cap. // @notice This is toggleable by the team, so supply can be unlimited/limited at will. abstract contract ERC20Capped is ERC20, Teams { bool public _capEnabled; uint256 internal _cap; // Supply Cap of entire token contract function setCapStatus(bool _capStatus) public onlyTeamOrOwner { _capEnabled = _capStatus; } function canMintAmount(uint256 _amount) public view returns (bool) { if(!_capEnabled){ return true; } return ERC20.totalSupply() + _amount <= supplyCap(); } // @dev Update the total possible supply to a new value. // @notice _newCap must be greater than or equal to the currently minted supply // @param _newCap is the new amount of tokens available in wei function setSupplyCap(uint256 _newCap) public onlyTeamOrOwner { if(_newCap < ERC20.totalSupply()) revert ERC20CappedInvalidValue(); _cap = _newCap; } function supplyCap() public view virtual returns (uint256) { if(!_capEnabled){ return ERC20.totalSupply(); } return _cap; } } abstract contract Feeable is Teams { uint256 public PRICE = 0 ether; uint256 public PROVIDER_FEE = 0.000777 ether; address private constant PROVIDER = 0xa9dAC8f3aEDC55D0FE707B86B8A45d246858d2E1; function setPrice(uint256 _feeInWei) public onlyTeamOrOwner { PRICE = _feeInWei; } // @dev quickly calculate the fee that will be required for a given qty to mint // @notice _count is the value in wei, not in human readable count // @param _count is representation of quantity in wei. it will be converted to eth to arrive at proper value function getPrice(uint256 _count) public view returns (uint256) { if(_count < 1 ether) revert InvalidInputValue(); uint256 countHuman = _count / 1 ether; return (PRICE * countHuman) + PROVIDER_FEE; } function sendProviderFee() internal { payable(PROVIDER).transfer(PROVIDER_FEE); } function setProviderFee(uint256 _fee) public { if(_msgSender() != PROVIDER) revert NotMaintainer(); PROVIDER_FEE = _fee; } } // File: Allowlist.sol pragma solidity ^0.8.0; abstract contract Allowlist is Teams { bytes32 public merkleRoot; bool public onlyAllowlistMode = false; /** * @dev Update merkle root to reflect changes in Allowlist * @param _newMerkleRoot new merkle root to reflect most recent Allowlist */ function updateMerkleRoot(bytes32 _newMerkleRoot) public onlyTeamOrOwner { if(_newMerkleRoot == merkleRoot) revert NoStateChange(); merkleRoot = _newMerkleRoot; } /** * @dev Check the proof of an address if valid for merkle root * @param _to address to check for proof * @param _merkleProof Proof of the address to validate against root and leaf */ function isAllowlisted(address _to, bytes32[] calldata _merkleProof) public view returns(bool) { if(merkleRoot == 0) revert ValueCannotBeZero(); bytes32 leaf = keccak256(abi.encodePacked(_to)); return MerkleProof.verify(_merkleProof, merkleRoot, leaf); } function enableAllowlistOnlyMode() public onlyTeamOrOwner { onlyAllowlistMode = true; } function disableAllowlistOnlyMode() public onlyTeamOrOwner { onlyAllowlistMode = false; } } // File: WithdrawableV2 // This abstract allows the contract to be able to mint and ingest ERC-20 payments for mints. // ERC-20 Payouts are limited to a single payout address. abstract contract WithdrawableV2 is Teams { struct acceptedERC20 { bool isActive; uint256 chargeAmount; } mapping(address => acceptedERC20) private allowedTokenContracts; address[] public payableAddresses; address public erc20Payable; uint256[] public payableFees; uint256 public payableAddressCount; bool public onlyERC20MintingMode; function withdrawAll() public onlyTeamOrOwner { if(address(this).balance == 0) revert ValueCannotBeZero(); _withdrawAll(address(this).balance); } function _withdrawAll(uint256 balance) private { for(uint i=0; i < payableAddressCount; i++ ) { _widthdraw( payableAddresses[i], (balance * payableFees[i]) / 100 ); } } function _widthdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{value: _amount}(""); require(success, "Transfer failed."); } /** * @dev Allow contract owner to withdraw ERC-20 balance from contract * in the event ERC-20 tokens are paid to the contract for mints. * @param _tokenContract contract of ERC-20 token to withdraw * @param _amountToWithdraw balance to withdraw according to balanceOf of ERC-20 token in wei */ function withdrawERC20(address _tokenContract, uint256 _amountToWithdraw) public onlyTeamOrOwner { if(_amountToWithdraw == 0) revert ValueCannotBeZero(); IERC20 tokenContract = IERC20(_tokenContract); if(tokenContract.balanceOf(address(this)) < _amountToWithdraw) revert ERC20InsufficientBalance(); tokenContract.transfer(erc20Payable, _amountToWithdraw); // Payout ERC-20 tokens to recipient } /** * @dev check if an ERC-20 contract is a valid payable contract for executing a mint. * @param _erc20TokenContract address of ERC-20 contract in question */ function isApprovedForERC20Payments(address _erc20TokenContract) public view returns(bool) { return allowedTokenContracts[_erc20TokenContract].isActive == true; } /** * @dev get the value of tokens to transfer for user of an ERC-20 * @param _erc20TokenContract address of ERC-20 contract in question */ function chargeAmountForERC20(address _erc20TokenContract) public view returns(uint256) { if(!isApprovedForERC20Payments(_erc20TokenContract)) revert ERC20TokenNotApproved(); return allowedTokenContracts[_erc20TokenContract].chargeAmount; } /** * @dev Explicity sets and ERC-20 contract as an allowed payment method for minting * @param _erc20TokenContract address of ERC-20 contract in question * @param _isActive default status of if contract should be allowed to accept payments * @param _chargeAmountInTokens fee (in tokens) to charge for mints for this specific ERC-20 token */ function addOrUpdateERC20ContractAsPayment(address _erc20TokenContract, bool _isActive, uint256 _chargeAmountInTokens) public onlyTeamOrOwner { allowedTokenContracts[_erc20TokenContract].isActive = _isActive; allowedTokenContracts[_erc20TokenContract].chargeAmount = _chargeAmountInTokens; } /** * @dev Add an ERC-20 contract as being a valid payment method. If passed a contract which has not been added * it will assume the default value of zero. This should not be used to create new payment tokens. * @param _erc20TokenContract address of ERC-20 contract in question */ function enableERC20ContractAsPayment(address _erc20TokenContract) public onlyTeamOrOwner { allowedTokenContracts[_erc20TokenContract].isActive = true; } /** * @dev Disable an ERC-20 contract as being a valid payment method. If passed a contract which has not been added * it will assume the default value of zero. This should not be used to create new payment tokens. * @param _erc20TokenContract address of ERC-20 contract in question */ function disableERC20ContractAsPayment(address _erc20TokenContract) public onlyTeamOrOwner { allowedTokenContracts[_erc20TokenContract].isActive = false; } /** * @dev Enable only ERC-20 payments for minting on this contract */ function enableERC20OnlyMinting() public onlyTeamOrOwner { onlyERC20MintingMode = true; } /** * @dev Disable only ERC-20 payments for minting on this contract */ function disableERC20OnlyMinting() public onlyTeamOrOwner { onlyERC20MintingMode = false; } /** * @dev Set the payout of the ERC-20 token payout to a specific address * @param _newErc20Payable new payout addresses of ERC-20 tokens */ function setERC20PayableAddress(address _newErc20Payable) public onlyTeamOrOwner { if(_newErc20Payable == address(0)) revert CannotBeNullAddress(); if(_newErc20Payable == erc20Payable) revert NoStateChange(); erc20Payable = _newErc20Payable; } function definePayables(address[] memory _newPayables, uint256[] memory _newFees) public onlyTeamOrOwner { delete payableAddresses; delete payableFees; payableAddresses = _newPayables; payableFees = _newFees; payableAddressCount = _newPayables.length; } } // @dev Allows us to add per wallet and per transaction caps to the minting aspect of this ERC20 abstract contract ERC20MintCaps is Teams { mapping(address => uint256) private _minted; bool internal _mintCapEnabled; // per wallet mint cap bool internal _batchSizeEnabled; // txn batch size limit uint256 internal mintCap; // in wei uint256 internal maxBatchSize; // in wei function setMintCap(uint256 _newMintCap) public onlyTeamOrOwner { mintCap = _newMintCap; } function setMintCapStatus(bool _newStatus) public onlyTeamOrOwner { _mintCapEnabled = _newStatus; } function setMaxBatchSize(uint256 _maxBatchSize) public onlyTeamOrOwner { maxBatchSize = _maxBatchSize; } function setMaxBatchSizeStatus(bool _newStatus) public onlyTeamOrOwner { _batchSizeEnabled = _newStatus; } // @dev Check if amount of tokens is possible to be minted // @param _amount is the amount of tokens in wei function canMintBatch(uint256 _amount) public view returns (bool) { if(!_batchSizeEnabled){ return true; } return _amount <= maxBatchSize; } // @dev returns if current mint caps are enabled (mints per wallet) // @return bool if mint caps per wallet are enforced function mintCapEnabled() public view returns (bool) { return _mintCapEnabled; } // @dev the current mintCap in decimals value // @return uint256 of mint caps per wallet. mintCapEnabled can be disabled and this value be non-zero. function maxWalletMints() public view returns(uint256) { return mintCap; } // @dev returns if current batch size caps are enabled (mints per txn) // @return bool if mint caps per transaction are enforced function mintBatchSizeEnabled() public view returns (bool) { return _batchSizeEnabled; } // @dev the current cap for a single txn in decimals value // @return uint256 the current cap for a single txn in decimals value function maxMintsPerTxn() public view returns (uint256) { return maxBatchSize; } // @dev checks if the mint count of an account is within the proper range // @notice if maxWalletMints is false it will always return true // @param _account is address to check // @param _amount is the amount of tokens in wei to be added to current minted supply function canAccountMintAmount(address _account, uint256 _amount) public view returns (bool) { if(!_mintCapEnabled){ return true; } return mintedAmount(_account) + _amount <= mintCap; } // @dev gets currently minted amount for an account // @return uint256 of tokens owned in base decimal value (wei) function mintedAmount(address _account) public view returns (uint256) { return _minted[_account]; } // @dev helper function that increased the mint amount for an account // @notice this is not the same as _balances, as that can vary as trades occur. // @param _account is address to add to // @param _amount is the amount of tokens in wei to be added to current minted amount function addMintsToAccount(address _account, uint256 _amount) internal { unchecked { _minted[_account] += _amount; } } } abstract contract SingleStateMintable is Teams { bool internal publicMintOpen = false; bool internal allowlistMintOpen = false; function inPublicMint() public view returns (bool){ return publicMintOpen && !allowlistMintOpen; } function inAllowlistMint() public view returns (bool){ return allowlistMintOpen && !publicMintOpen; } function openPublicMint() public onlyTeamOrOwner { publicMintOpen = true; allowlistMintOpen = false; } function openAllowlistMint() public onlyTeamOrOwner { allowlistMintOpen = true; publicMintOpen = false; } // @notice This will set close all minting to public regardless of previous state function closeMinting() public onlyTeamOrOwner { allowlistMintOpen = false; publicMintOpen = false; } } // File: contracts/ERC20Plus.sol pragma solidity ^0.8.0; contract ERC20Plus is Ownable, ERC20Burnable, ERC20Capped, ERC20MintCaps, Feeable, Allowlist, WithdrawableV2, SingleStateMintable { uint8 immutable CONTRACT_VERSION = 1; constructor( string memory name, string memory symbol ) ERC20(name, symbol) { // Payable settings // Set inital Supply cap settings // Per wallet minting settings // Per txn minting settings // setup price } /////////////// Admin Mint Functions /** * @dev Mints tokens to an address. * This is owner only and allows a fee-free drop * @param _to address of the future owner of the token * @param _qty amount of tokens to drop the owner in decimal value (wei typically 1e18) */ function adminMint(address _to, uint256 _qty) public onlyTeamOrOwner{ if(_qty < 1 ether) revert MintZeroQuantity(); if(!canMintAmount(_qty)) revert CapExceeded(); _mint(_to, _qty); } function adminMintBulk(address[] memory _tos, uint256 _qty) public onlyTeamOrOwner{ if(_qty < 1 ether) revert MintZeroQuantity(); for(uint i=0; i < _tos.length; i++ ) { _mint(_tos[i], _qty); } } /////////////// GENERIC MINT FUNCTIONS /** * @dev Mints tokens to an address in batch. * fee may or may not be required* * @param _to address of the future owner of the token * @param _amount number of tokens to mint in wei */ function mintMany(address _to, uint256 _amount) public payable { if(onlyERC20MintingMode) revert PublicMintingClosed(); if(_amount < 1 ether) revert MintZeroQuantity(); if(!inPublicMint()) revert PublicMintingClosed(); if(!canMintBatch(_amount)) revert TransactionCapExceeded(); if(!canMintAmount(_amount)) revert CapExceeded(); if(!canAccountMintAmount(_to, _amount)) revert ExcessiveOwnedMints(); if(msg.value != getPrice(_amount)) revert InvalidPayment(); sendProviderFee(); addMintsToAccount(_to, _amount); _mint(_to, _amount); } /** * @dev Mints tokens to an address in batch using an ERC-20 token for payment * fee may or may not be required* * @param _to address of the future owner of the token * @param _amount number of tokens to mint in wei * @param _erc20TokenContract erc-20 token contract to mint with */ function mintManyERC20(address _to, uint256 _amount, address _erc20TokenContract) public payable { if(_amount < 1 ether) revert MintZeroQuantity(); if(!canMintAmount(_amount)) revert CapExceeded(); if(!inPublicMint()) revert PublicMintingClosed(); if(!canMintBatch(_amount)) revert TransactionCapExceeded(); if(!canAccountMintAmount(_to, _amount)) revert ExcessiveOwnedMints(); if(msg.value != PROVIDER_FEE) revert InvalidPayment(); // ERC-20 Specific pre-flight checks if(!isApprovedForERC20Payments(_erc20TokenContract)) revert ERC20TokenNotApproved(); uint256 tokensQtyToTransfer = chargeAmountForERC20(_erc20TokenContract) * _amount; IERC20 payableToken = IERC20(_erc20TokenContract); if(payableToken.balanceOf(_to) < tokensQtyToTransfer) revert ERC20InsufficientBalance(); if(payableToken.allowance(_to, address(this)) < tokensQtyToTransfer) revert ERC20InsufficientAllowance(); bool transferComplete = payableToken.transferFrom(_to, address(this), tokensQtyToTransfer); if(!transferComplete) revert ERC20TransferFailed(); sendProviderFee(); addMintsToAccount(_to, _amount); _mint(_to, _amount); } /** * @dev Mints tokens to an address using an allowlist. * fee may or may not be required* * @param _to address of the future owner of the token * @param _amount number of tokens to mint in wei * @param _merkleProof merkle proof array */ function mintManyAL(address _to, uint256 _amount, bytes32[] calldata _merkleProof) public payable { if(onlyERC20MintingMode) revert AllowlistMintClosed(); if(_amount < 1 ether) revert MintZeroQuantity(); if(!inAllowlistMint()) revert AllowlistMintClosed(); if(!isAllowlisted(_to, _merkleProof)) revert AddressNotAllowlisted(); if(!canMintBatch(_amount)) revert TransactionCapExceeded(); if(!canAccountMintAmount(_to, _amount)) revert ExcessiveOwnedMints(); if(!canMintAmount(_amount)) revert CapExceeded(); if(msg.value != getPrice(_amount)) revert InvalidPayment(); sendProviderFee(); addMintsToAccount(_to, _amount); _mint(_to, _amount); } /** * @dev Mints tokens to an address using an allowlist. * fee may or may not be required* * @param _to address of the future owner of the token * @param _amount number of tokens to mint in wei * @param _merkleProof merkle proof array * @param _erc20TokenContract erc-20 token contract to mint with */ function mintManyERC20AL(address _to, uint256 _amount, bytes32[] calldata _merkleProof, address _erc20TokenContract) public payable { if(!inAllowlistMint()) revert AllowlistMintClosed(); if(_amount < 1 ether) revert MintZeroQuantity(); if(!isAllowlisted(_to, _merkleProof)) revert AddressNotAllowlisted(); if(!canMintBatch(_amount)) revert TransactionCapExceeded(); if(!canAccountMintAmount(_to, _amount)) revert ExcessiveOwnedMints(); if(!canMintAmount(_amount)) revert CapExceeded(); if(msg.value != PROVIDER_FEE) revert InvalidPayment(); // ERC-20 Specific pre-flight checks if(!isApprovedForERC20Payments(_erc20TokenContract)) revert ERC20TokenNotApproved(); uint256 tokensQtyToTransfer = chargeAmountForERC20(_erc20TokenContract) * _amount; IERC20 payableToken = IERC20(_erc20TokenContract); if(payableToken.balanceOf(_to) < tokensQtyToTransfer) revert ERC20InsufficientBalance(); if(payableToken.allowance(_to, address(this)) < tokensQtyToTransfer) revert ERC20InsufficientAllowance(); bool transferComplete = payableToken.transferFrom(_to, address(this), tokensQtyToTransfer); if(!transferComplete) revert ERC20TransferFailed(); sendProviderFee(); addMintsToAccount(_to, _amount); _mint(_to, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AddressNotAllowlisted","type":"error"},{"inputs":[],"name":"AllowlistMintClosed","type":"error"},{"inputs":[],"name":"CannotBeNullAddress","type":"error"},{"inputs":[],"name":"CapExceeded","type":"error"},{"inputs":[],"name":"ERC20CappedInvalidValue","type":"error"},{"inputs":[],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[],"name":"ERC20TokenNotApproved","type":"error"},{"inputs":[],"name":"ERC20TransferFailed","type":"error"},{"inputs":[],"name":"ExcessiveOwnedMints","type":"error"},{"inputs":[],"name":"InvalidInputValue","type":"error"},{"inputs":[],"name":"InvalidPayment","type":"error"},{"inputs":[],"name":"InvalidTeamChange","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"NoStateChange","type":"error"},{"inputs":[],"name":"NotMaintainer","type":"error"},{"inputs":[],"name":"PublicMintingClosed","type":"error"},{"inputs":[],"name":"TransactionCapExceeded","type":"error"},{"inputs":[],"name":"ValueCannotBeZero","type":"error"},{"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":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROVIDER_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_capEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20TokenContract","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"},{"internalType":"uint256","name":"_chargeAmountInTokens","type":"uint256"}],"name":"addOrUpdateERC20ContractAsPayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addToTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tos","type":"address[]"},{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"adminMintBulk","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":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"canAccountMintAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"canMintAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"canMintBatch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20TokenContract","type":"address"}],"name":"chargeAmountForERC20","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closeMinting","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":"_newPayables","type":"address[]"},{"internalType":"uint256[]","name":"_newFees","type":"uint256[]"}],"name":"definePayables","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAllowlistOnlyMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20TokenContract","type":"address"}],"name":"disableERC20ContractAsPayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableERC20OnlyMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableAllowlistOnlyMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20TokenContract","type":"address"}],"name":"enableERC20ContractAsPayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableERC20OnlyMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"erc20Payable","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inAllowlistMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inPublicMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"inTeam","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"isAllowlisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20TokenContract","type":"address"}],"name":"isApprovedForERC20Payments","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintsPerTxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintBatchSizeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintCapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintMany","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mintManyAL","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_erc20TokenContract","type":"address"}],"name":"mintManyERC20","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"address","name":"_erc20TokenContract","type":"address"}],"name":"mintManyERC20AL","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"mintedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyAllowlistMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyERC20MintingMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openAllowlistMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"openPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payableAddressCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"payableAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"payableFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeFromTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_capStatus","type":"bool"}],"name":"setCapStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newErc20Payable","type":"address"}],"name":"setERC20PayableAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBatchSize","type":"uint256"}],"name":"setMaxBatchSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_newStatus","type":"bool"}],"name":"setMaxBatchSizeStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMintCap","type":"uint256"}],"name":"setMintCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_newStatus","type":"bool"}],"name":"setMintCapStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeInWei","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setProviderFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCap","type":"uint256"}],"name":"setSupplyCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supplyCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"bytes32","name":"_newMerkleRoot","type":"bytes32"}],"name":"updateMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_amountToWithdraw","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040525f600d556602c2ad68fd9000600e555f60105f6101000a81548160ff0219169083151502179055505f601660016101000a81548160ff0219169083151502179055505f601660026101000a81548160ff021916908315150217905550600160ff1660809060ff16815250348015610079575f80fd5b506040516152bc3803806152bc833981810160405281019061009b91906102f9565b818181600390816100ac919061057c565b5080600490816100bc919061057c565b5050506100db6100d06100e260201b60201c565b6100e960201b60201c565b505061064b565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61020b826101c5565b810181811067ffffffffffffffff8211171561022a576102296101d5565b5b80604052505050565b5f61023c6101ac565b90506102488282610202565b919050565b5f67ffffffffffffffff821115610267576102666101d5565b5b610270826101c5565b9050602081019050919050565b8281835e5f83830152505050565b5f61029d6102988461024d565b610233565b9050828152602081018484840111156102b9576102b86101c1565b5b6102c484828561027d565b509392505050565b5f82601f8301126102e0576102df6101bd565b5b81516102f084826020860161028b565b91505092915050565b5f806040838503121561030f5761030e6101b5565b5b5f83015167ffffffffffffffff81111561032c5761032b6101b9565b5b610338858286016102cc565b925050602083015167ffffffffffffffff811115610359576103586101b9565b5b610365858286016102cc565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806103bd57607f821691505b6020821081036103d0576103cf610379565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104327fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826103f7565b61043c86836103f7565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61048061047b61047684610454565b61045d565b610454565b9050919050565b5f819050919050565b61049983610466565b6104ad6104a582610487565b848454610403565b825550505050565b5f90565b6104c16104b5565b6104cc818484610490565b505050565b5b818110156104ef576104e45f826104b9565b6001810190506104d2565b5050565b601f82111561053457610505816103d6565b61050e846103e8565b8101602085101561051d578190505b610531610529856103e8565b8301826104d1565b50505b505050565b5f82821c905092915050565b5f6105545f1984600802610539565b1980831691505092915050565b5f61056c8383610545565b9150826002028217905092915050565b6105858261036f565b67ffffffffffffffff81111561059e5761059d6101d5565b5b6105a882546103a6565b6105b38282856104f3565b5f60209050601f8311600181146105e4575f84156105d2578287015190505b6105dc8582610561565b865550610643565b601f1984166105f2866103d6565b5f5b82811015610619578489015182556001820191506020850194506020810190506105f4565b868310156106365784890151610632601f891682610545565b8355505b6001600288020188555050505b505050505050565b608051614c5c6106605f395f5050614c5c5ff3fe608060405260043610610425575f3560e01c806388993c8111610228578063b0cfbf161161012d578063dd62ed3e116100b5578063f2fde38b11610079578063f2fde38b14610f81578063f623bb8b14610fa9578063f82fa75614610fd3578063f8c0fd2014610ffd578063fbbf8cc31461101357610425565b8063dd62ed3e14610e8f578063dfdedf6914610ecb578063e58306f914610ef3578063e6c6990a14610f1b578063e757223014610f4557610425565b8063c3cb97c6116100fc578063c3cb97c614610dbf578063c6ee6e3514610de7578063cacf084214610e03578063d266f3a914610e2b578063d83ae33214610e6757610425565b8063b0cfbf1614610d1d578063b6a3f59a14610d59578063b94b237614610d81578063c326876814610d9757610425565b8063a1af10ca116101b0578063a9059cbb1161017f578063a9059cbb14610c4b578063a91bd1a914610c87578063ad1203dc14610caf578063af54001e14610ccb578063afb16d1814610cf557610425565b8063a1af10ca14610b83578063a1db978214610bbf578063a457c2d714610be7578063a7593fb714610c2357610425565b80638da5cb5b116101f75780638da5cb5b14610ab55780638f770ad014610adf57806391b7f5ed14610b0957806395d89b4114610b3157806398ad441714610b5b57610425565b806388993c8114610a0f578063891bbe7314610a3957806389f26d5814610a755780638d859f3e14610a8b57610425565b80634070a0c91161032e578063627255df116102b657806379ab3c891161028557806379ab3c891461097b57806379cc6790146109915780637fb8c6d3146109b9578063853828b6146109e357806387491c60146109f957610425565b8063627255df146108d75780636d3de8061461091357806370a0823114610929578063715018a61461096557610425565b8063464c3428116102fd578063464c34281461081757806346f41ed51461083f5780634783f0ef146108695780634c23ce91146108915780635e830656146108bb57610425565b80634070a0c91461078957806342966c68146107b157806343696f18146107d957806345f7e06e1461080157610425565b806328ff1b51116103b15780633300678611610380578063330067861461068157806334d00766146106bd57806339509351146106e75780633d3f9c57146107235780633e07311c1461075f57610425565b806328ff1b51146105dd5780632b26a6bf146106055780632eb4a7ab1461062d578063313ce5671461065757610425565b80631963d0cc116103f85780631963d0cc146104f557806320fab1421461051f5780632181384e1461054957806323b872dd14610565578063286c8137146105a157610425565b806306fdde03146104295780630825850a14610453578063095ea7b31461048f57806318160ddd146104cb575b5f80fd5b348015610434575f80fd5b5061043d61104f565b60405161044a9190613edf565b60405180910390f35b34801561045e575f80fd5b5061047960048036038101906104749190613f9d565b6110df565b6040516104869190613ff5565b60405180910390f35b34801561049a575f80fd5b506104b560048036038101906104b09190613f9d565b61111e565b6040516104c29190613ff5565b60405180910390f35b3480156104d6575f80fd5b506104df611140565b6040516104ec919061401d565b60405180910390f35b348015610500575f80fd5b50610509611149565b6040516105169190613ff5565b60405180910390f35b34801561052a575f80fd5b5061053361115e565b6040516105409190613ff5565b60405180910390f35b610563600480360381019061055e9190614097565b611170565b005b348015610570575f80fd5b5061058b6004803603810190610586919061411b565b6115c5565b6040516105989190613ff5565b60405180910390f35b3480156105ac575f80fd5b506105c760048036038101906105c2919061416b565b6115f3565b6040516105d4919061401d565b60405180910390f35b3480156105e8575f80fd5b5061060360048036038101906105fe919061438e565b611613565b005b348015610610575f80fd5b5061062b6004803603810190610626919061416b565b61166f565b005b348015610638575f80fd5b50610641611681565b60405161064e919061441c565b60405180910390f35b348015610662575f80fd5b5061066b611687565b6040516106789190614450565b60405180910390f35b34801561068c575f80fd5b506106a760048036038101906106a29190614469565b61168f565b6040516106b49190613ff5565b60405180910390f35b3480156106c8575f80fd5b506106d161174e565b6040516106de919061401d565b60405180910390f35b3480156106f2575f80fd5b5061070d60048036038101906107089190613f9d565b611757565b60405161071a9190613ff5565b60405180910390f35b34801561072e575f80fd5b50610749600480360381019061074491906144c6565b61178d565b6040516107569190613ff5565b60405180910390f35b34801561076a575f80fd5b506107736117e8565b604051610780919061401d565b60405180910390f35b348015610794575f80fd5b506107af60048036038101906107aa919061416b565b6117ee565b005b3480156107bc575f80fd5b506107d760048036038101906107d2919061416b565b611800565b005b3480156107e4575f80fd5b506107ff60048036038101906107fa91906144c6565b611814565b005b34801561080c575f80fd5b50610815611919565b005b348015610822575f80fd5b5061083d600480360381019061083891906144c6565b611958565b005b34801561084a575f80fd5b506108536119ba565b6040516108609190613ff5565b60405180910390f35b348015610874575f80fd5b5061088f600480360381019061088a919061451b565b6119cc565b005b34801561089c575f80fd5b506108a5611a19565b6040516108b29190613ff5565b60405180910390f35b6108d560048036038101906108d09190613f9d565b611a48565b005b3480156108e2575f80fd5b506108fd60048036038101906108f8919061416b565b611c2d565b60405161090a9190613ff5565b60405180910390f35b34801561091e575f80fd5b50610927611c59565b005b348015610934575f80fd5b5061094f600480360381019061094a91906144c6565b611c7c565b60405161095c919061401d565b60405180910390f35b348015610970575f80fd5b50610979611cc1565b005b348015610986575f80fd5b5061098f611cd4565b005b34801561099c575f80fd5b506109b760048036038101906109b29190613f9d565b611cf8565b005b3480156109c4575f80fd5b506109cd611d18565b6040516109da9190614555565b60405180910390f35b3480156109ee575f80fd5b506109f7611d3d565b005b348015610a04575f80fd5b50610a0d611d89565b005b348015610a1a575f80fd5b50610a23611dc7565b604051610a309190613ff5565b60405180910390f35b348015610a44575f80fd5b50610a5f6004803603810190610a5a919061416b565b611df6565b604051610a6c9190614555565b60405180910390f35b348015610a80575f80fd5b50610a89611e31565b005b348015610a96575f80fd5b50610a9f611e55565b604051610aac919061401d565b60405180910390f35b348015610ac0575f80fd5b50610ac9611e5b565b604051610ad69190614555565b60405180910390f35b348015610aea575f80fd5b50610af3611e83565b604051610b00919061401d565b60405180910390f35b348015610b14575f80fd5b50610b2f6004803603810190610b2a919061416b565b611eaf565b005b348015610b3c575f80fd5b50610b45611ec1565b604051610b529190613edf565b60405180910390f35b348015610b66575f80fd5b50610b816004803603810190610b7c9190614598565b611f51565b005b348015610b8e575f80fd5b50610ba96004803603810190610ba491906144c6565b611f76565b604051610bb69190613ff5565b60405180910390f35b348015610bca575f80fd5b50610be56004803603810190610be09190613f9d565b612034565b005b348015610bf2575f80fd5b50610c0d6004803603810190610c089190613f9d565b6121cc565b604051610c1a9190613ff5565b60405180910390f35b348015610c2e575f80fd5b50610c496004803603810190610c44919061416b565b612238565b005b348015610c56575f80fd5b50610c716004803603810190610c6c9190613f9d565b6122c2565b604051610c7e9190613ff5565b60405180910390f35b348015610c92575f80fd5b50610cad6004803603810190610ca891906144c6565b6122e4565b005b610cc96004803603810190610cc491906145c3565b61241a565b005b348015610cd6575f80fd5b50610cdf612642565b604051610cec919061401d565b60405180910390f35b348015610d00575f80fd5b50610d1b6004803603810190610d169190614634565b61264b565b005b348015610d28575f80fd5b50610d436004803603810190610d3e919061416b565b6126d6565b604051610d509190613ff5565b60405180910390f35b348015610d64575f80fd5b50610d7f6004803603810190610d7a919061416b565b612718565b005b348015610d8c575f80fd5b50610d9561276b565b005b348015610da2575f80fd5b50610dbd6004803603810190610db89190614598565b61278e565b005b348015610dca575f80fd5b50610de56004803603810190610de09190614598565b6127b2565b005b610e016004803603810190610dfc919061468e565b6127d6565b005b348015610e0e575f80fd5b50610e296004803603810190610e2491906144c6565b612be8565b005b348015610e36575f80fd5b50610e516004803603810190610e4c91906144c6565b612c49565b604051610e5e919061401d565b60405180910390f35b348015610e72575f80fd5b50610e8d6004803603810190610e8891906146de565b612cd1565b005b348015610e9a575f80fd5b50610eb56004803603810190610eb0919061472e565b612d79565b604051610ec2919061401d565b60405180910390f35b348015610ed6575f80fd5b50610ef16004803603810190610eec91906144c6565b612dfb565b005b348015610efe575f80fd5b50610f196004803603810190610f149190613f9d565b612efe565b005b348015610f26575f80fd5b50610f2f612f95565b604051610f3c9190613ff5565b60405180910390f35b348015610f50575f80fd5b50610f6b6004803603810190610f66919061416b565b612fa7565b604051610f78919061401d565b60405180910390f35b348015610f8c575f80fd5b50610fa76004803603810190610fa291906144c6565b613024565b005b348015610fb4575f80fd5b50610fbd61309d565b604051610fca919061401d565b60405180910390f35b348015610fde575f80fd5b50610fe76130a3565b604051610ff49190613ff5565b60405180910390f35b348015611008575f80fd5b506110116130b9565b005b34801561101e575f80fd5b50611039600480360381019061103491906144c6565b6130f8565b604051611046919061401d565b60405180910390f35b60606003805461105e90614799565b80601f016020809104026020016040519081016040528092919081815260200182805461108a90614799565b80156110d55780601f106110ac576101008083540402835291602001916110d5565b820191905f5260205f20905b8154815290600101906020018083116110b857829003601f168201915b5050505050905090565b5f600a5f9054906101000a900460ff166110fc5760019050611118565b600b5482611109856130f8565b61111391906147f6565b111590505b92915050565b5f8061112861313e565b9050611135818585613145565b600191505092915050565b5f600254905090565b5f600a5f9054906101000a900460ff16905090565b60075f9054906101000a900460ff1681565b611178611a19565b6111ae576040517f4e39100800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400008410156111f0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111fb85848461168f565b611231576040517f97b24df000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61123a84611c2d565b611270576040517f93eeb41500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61127a85856110df565b6112b0576040517fcd7cece200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112b9846126d6565b6112ef576040517fa4875a4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54341461132a576040517f3c6b4b2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113338161178d565b611369576040517fd8a0393200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8461137483612c49565b61137e9190614829565b90505f829050818173ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b81526004016113be9190614555565b602060405180830381865afa1580156113d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113fd919061487e565b1015611435576040517f590b7c5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e89306040518363ffffffff1660e01b81526004016114719291906148a9565b602060405180830381865afa15801561148c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b0919061487e565b10156114e8576040517f2fc50d6000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff166323b872dd8930866040518463ffffffff1660e01b8152600401611526939291906148d0565b6020604051808303815f875af1158015611542573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115669190614919565b90508061159f576040517ff27f64e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115a76132f6565b6115b18888613352565b6115bb88886133a0565b5050505050505050565b5f806115cf61313e565b90506115dc8582856134ee565b6115e7858585613570565b60019150509392505050565b60148181548110611602575f80fd5b905f5260205f20015f915090505481565b61161b6137ca565b60125f6116289190613d46565b60145f6116359190613d64565b816012908051906020019061164b929190613d82565b508060149080519060200190611662929190613e09565b5081516015819055505050565b6116776137ca565b80600c8190555050565b600f5481565b5f6012905090565b5f805f1b600f54036116cd576040517fc70d18aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f846040516020016116df9190614989565b6040516020818303038152906040528051906020012090506117448484808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f82011690508083019250505050505050600f5483613869565b9150509392505050565b5f600b54905090565b5f8061176161313e565b90506117828185856117738589612d79565b61177d91906147f6565b613145565b600191505092915050565b5f6001151560115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900460ff161515149050919050565b60155481565b6117f66137ca565b80600b8190555050565b61181161180b61313e565b8261387f565b50565b61181c613a39565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611881576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188a81611f76565b156118c1576040517f8afaeb9d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6119216137ca565b6001601660016101000a81548160ff0219169083151502179055505f601660026101000a81548160ff021916908315150217905550565b6119606137ca565b600160115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f6101000a81548160ff02191690831515021790555050565b60165f9054906101000a900460ff1681565b6119d46137ca565b600f548103611a0f576040517fa28a88c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f8190555050565b5f601660029054906101000a900460ff168015611a435750601660019054906101000a900460ff16155b905090565b60165f9054906101000a900460ff1615611a8e576040517fce2f476000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a7640000811015611ad0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ad8611dc7565b611b0e576040517fce2f476000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b1781611c2d565b611b4d576040517f93eeb41500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b56816126d6565b611b8c576040517fa4875a4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b9682826110df565b611bcc576040517fcd7cece200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bd581612fa7565b3414611c0d576040517f3c6b4b2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c156132f6565b611c1f8282613352565b611c2982826133a0565b5050565b5f600a60019054906101000a900460ff16611c4b5760019050611c54565b600c5482111590505b919050565b611c616137ca565b5f60105f6101000a81548160ff021916908315150217905550565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611cc9613a39565b611cd25f613ab7565b565b611cdc6137ca565b600160105f6101000a81548160ff021916908315150217905550565b611d0a82611d0461313e565b836134ee565b611d14828261387f565b5050565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d456137ca565b5f4703611d7e576040517fc70d18aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d8747613b7a565b565b611d916137ca565b5f601660026101000a81548160ff0219169083151502179055505f601660016101000a81548160ff021916908315150217905550565b5f601660019054906101000a900460ff168015611df15750601660029054906101000a900460ff16155b905090565b60128181548110611e05575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e396137ca565b600160165f6101000a81548160ff021916908315150217905550565b600d5481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60075f9054906101000a900460ff16611ea657611e9f611140565b9050611eac565b60085490505b90565b611eb76137ca565b80600d8190555050565b606060048054611ed090614799565b80601f0160208091040260200160405190810160405280929190818152602001828054611efc90614799565b8015611f475780601f10611f1e57610100808354040283529160200191611f47565b820191905f5260205f20905b815481529060010190602001808311611f2a57829003601f168201915b5050505050905090565b611f596137ca565b80600a60016101000a81548160ff02191690831515021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fdc576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001151560065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515149050919050565b61203c6137ca565b5f8103612075576040517fc70d18aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f829050818173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120b39190614555565b602060405180830381865afa1580156120ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120f2919061487e565b101561212a576040517f590b7c5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016121869291906149a3565b6020604051808303815f875af11580156121a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121c69190614919565b50505050565b5f806121d661313e565b90505f6121e38286612d79565b90508381101561221f576040517f590b7c5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61222c8286868403613145565b60019250505092915050565b73a9dac8f3aedc55d0fe707b86b8a45d246858d2e173ffffffffffffffffffffffffffffffffffffffff1661226b61313e565b73ffffffffffffffffffffffffffffffffffffffff16146122b8576040517f9b96b05100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e8190555050565b5f806122cc61313e565b90506122d9818585613570565b600191505092915050565b6122ec6137ca565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612351576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123d7576040517fa28a88c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165f9054906101000a900460ff1615612460576040517f4e39100800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400008310156124a2576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124aa611a19565b6124e0576040517f4e39100800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124eb84838361168f565b612521576040517f97b24df000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61252a83611c2d565b612560576040517f93eeb41500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61256a84846110df565b6125a0576040517fcd7cece200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125a9836126d6565b6125df576040517fa4875a4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125e883612fa7565b3414612620576040517f3c6b4b2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126286132f6565b6126328484613352565b61263c84846133a0565b50505050565b5f600c54905090565b6126536137ca565b670de0b6b3a7640000811015612695576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b82518110156126d1576126c48382815181106126b6576126b56149ca565b5b6020026020010151836133a0565b8080600101915050612697565b505050565b5f60075f9054906101000a900460ff166126f35760019050612713565b6126fb611e83565b82612704611140565b61270e91906147f6565b111590505b919050565b6127206137ca565b612728611140565b811015612761576040517fcc67044500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060088190555050565b6127736137ca565b5f60165f6101000a81548160ff021916908315150217905550565b6127966137ca565b8060075f6101000a81548160ff02191690831515021790555050565b6127ba6137ca565b80600a5f6101000a81548160ff02191690831515021790555050565b670de0b6b3a7640000821015612818576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612821826126d6565b612857576040517fa4875a4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61285f611dc7565b612895576040517fce2f476000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61289e82611c2d565b6128d4576040517f93eeb41500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128de83836110df565b612914576040517fcd7cece200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54341461294f576040517f3c6b4b2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129588161178d565b61298e576040517fd8a0393200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8261299983612c49565b6129a39190614829565b90505f829050818173ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b81526004016129e39190614555565b602060405180830381865afa1580156129fe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a22919061487e565b1015612a5a576040517f590b7c5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e87306040518363ffffffff1660e01b8152600401612a969291906148a9565b602060405180830381865afa158015612ab1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ad5919061487e565b1015612b0d576040517f2fc50d6000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff166323b872dd8730866040518463ffffffff1660e01b8152600401612b4b939291906148d0565b6020604051808303815f875af1158015612b67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b8b9190614919565b905080612bc4576040517ff27f64e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612bcc6132f6565b612bd68686613352565b612be086866133a0565b505050505050565b612bf06137ca565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f6101000a81548160ff02191690831515021790555050565b5f612c538261178d565b612c89576040517fd8a0393200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101549050919050565b612cd96137ca565b8160115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f6101000a81548160ff0219169083151502179055508060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060010181905550505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b612e03613a39565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612e68576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e7181611f76565b612ea7576040517f8afaeb9d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b612f066137ca565b670de0b6b3a7640000811015612f48576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f51816126d6565b612f87576040517fa4875a4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f9182826133a0565b5050565b60105f9054906101000a900460ff1681565b5f670de0b6b3a7640000821015612fea576040517fe6d50f6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f670de0b6b3a764000083612fff9190614a24565b9050600e5481600d546130129190614829565b61301c91906147f6565b915050919050565b61302c613a39565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613091576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61309a81613ab7565b50565b600e5481565b5f600a60019054906101000a900460ff16905090565b6130c16137ca565b6001601660026101000a81548160ff0219169083151502179055505f601660016101000a81548160ff021916908315150217905550565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131aa576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361320f576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516132e9919061401d565b60405180910390a3505050565b73a9dac8f3aedc55d0fe707b86b8a45d246858d2e173ffffffffffffffffffffffffffffffffffffffff166108fc600e5490811502906040515f60405180830381858888f1935050505015801561334f573d5f803e3d5ffd5b50565b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613405576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134105f8383613c0f565b8060025f82825461342191906147f6565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461347391906147f6565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134d7919061401d565b60405180910390a36134ea5f8383613c14565b5050565b5f6134f98484612d79565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461356a578181101561355c576040517f590b7c5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6135698484848403613145565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036135d5576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361363a576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613645838383613c0f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156136bf576040517f590b7c5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461374d91906147f6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137b1919061401d565b60405180910390a36137c4848484613c14565b50505050565b5f6137d361313e565b73ffffffffffffffffffffffffffffffffffffffff166137f1611e5b565b73ffffffffffffffffffffffffffffffffffffffff161490505f61381b61381661313e565b611f76565b905081806138265750805b613865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385c90614ac4565b60405180910390fd5b5050565b5f826138758584613c19565b1490509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036138e4576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6138ef825f83613c0f565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613969576040517f590b7c5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f8282546139bd9190614ae2565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a21919061401d565b60405180910390a3613a34835f84613c14565b505050565b613a4161313e565b73ffffffffffffffffffffffffffffffffffffffff16613a5f611e5b565b73ffffffffffffffffffffffffffffffffffffffff1614613ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613aac90614b5f565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5b601554811015613c0b57613bfe60128281548110613b9d57613b9c6149ca565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16606460148481548110613bdb57613bda6149ca565b5b905f5260205f20015485613bef9190614829565b613bf99190614a24565b613c85565b8080600101915050613b7c565b5050565b505050565b505050565b5f808290505f5b8451811015613c7a575f858281518110613c3d57613c3c6149ca565b5b60200260200101519050808311613c5f57613c588382613d32565b9250613c6c565b613c698184613d32565b92505b508080600101915050613c20565b508091505092915050565b5f8273ffffffffffffffffffffffffffffffffffffffff1682604051613caa90614baa565b5f6040518083038185875af1925050503d805f8114613ce4576040519150601f19603f3d011682016040523d82523d5f602084013e613ce9565b606091505b5050905080613d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2490614c08565b60405180910390fd5b505050565b5f825f528160205260405f20905092915050565b5080545f8255905f5260205f2090810190613d619190613e54565b50565b5080545f8255905f5260205f2090810190613d7f9190613e54565b50565b828054828255905f5260205f20908101928215613df8579160200282015b82811115613df7578251825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613da0565b5b509050613e059190613e54565b5090565b828054828255905f5260205f20908101928215613e43579160200282015b82811115613e42578251825591602001919060010190613e27565b5b509050613e509190613e54565b5090565b5b80821115613e6b575f815f905550600101613e55565b5090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613eb182613e6f565b613ebb8185613e79565b9350613ecb818560208601613e89565b613ed481613e97565b840191505092915050565b5f6020820190508181035f830152613ef78184613ea7565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f3982613f10565b9050919050565b613f4981613f2f565b8114613f53575f80fd5b50565b5f81359050613f6481613f40565b92915050565b5f819050919050565b613f7c81613f6a565b8114613f86575f80fd5b50565b5f81359050613f9781613f73565b92915050565b5f8060408385031215613fb357613fb2613f08565b5b5f613fc085828601613f56565b9250506020613fd185828601613f89565b9150509250929050565b5f8115159050919050565b613fef81613fdb565b82525050565b5f6020820190506140085f830184613fe6565b92915050565b61401781613f6a565b82525050565b5f6020820190506140305f83018461400e565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261405757614056614036565b5b8235905067ffffffffffffffff8111156140745761407361403a565b5b6020830191508360208202830111156140905761408f61403e565b5b9250929050565b5f805f805f608086880312156140b0576140af613f08565b5b5f6140bd88828901613f56565b95505060206140ce88828901613f89565b945050604086013567ffffffffffffffff8111156140ef576140ee613f0c565b5b6140fb88828901614042565b9350935050606061410e88828901613f56565b9150509295509295909350565b5f805f6060848603121561413257614131613f08565b5b5f61413f86828701613f56565b935050602061415086828701613f56565b925050604061416186828701613f89565b9150509250925092565b5f602082840312156141805761417f613f08565b5b5f61418d84828501613f89565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6141cc82613e97565b810181811067ffffffffffffffff821117156141eb576141ea614196565b5b80604052505050565b5f6141fd613eff565b905061420982826141c3565b919050565b5f67ffffffffffffffff82111561422857614227614196565b5b602082029050602081019050919050565b5f61424b6142468461420e565b6141f4565b9050808382526020820190506020840283018581111561426e5761426d61403e565b5b835b8181101561429757806142838882613f56565b845260208401935050602081019050614270565b5050509392505050565b5f82601f8301126142b5576142b4614036565b5b81356142c5848260208601614239565b91505092915050565b5f67ffffffffffffffff8211156142e8576142e7614196565b5b602082029050602081019050919050565b5f61430b614306846142ce565b6141f4565b9050808382526020820190506020840283018581111561432e5761432d61403e565b5b835b8181101561435757806143438882613f89565b845260208401935050602081019050614330565b5050509392505050565b5f82601f83011261437557614374614036565b5b81356143858482602086016142f9565b91505092915050565b5f80604083850312156143a4576143a3613f08565b5b5f83013567ffffffffffffffff8111156143c1576143c0613f0c565b5b6143cd858286016142a1565b925050602083013567ffffffffffffffff8111156143ee576143ed613f0c565b5b6143fa85828601614361565b9150509250929050565b5f819050919050565b61441681614404565b82525050565b5f60208201905061442f5f83018461440d565b92915050565b5f60ff82169050919050565b61444a81614435565b82525050565b5f6020820190506144635f830184614441565b92915050565b5f805f604084860312156144805761447f613f08565b5b5f61448d86828701613f56565b935050602084013567ffffffffffffffff8111156144ae576144ad613f0c565b5b6144ba86828701614042565b92509250509250925092565b5f602082840312156144db576144da613f08565b5b5f6144e884828501613f56565b91505092915050565b6144fa81614404565b8114614504575f80fd5b50565b5f81359050614515816144f1565b92915050565b5f602082840312156145305761452f613f08565b5b5f61453d84828501614507565b91505092915050565b61454f81613f2f565b82525050565b5f6020820190506145685f830184614546565b92915050565b61457781613fdb565b8114614581575f80fd5b50565b5f813590506145928161456e565b92915050565b5f602082840312156145ad576145ac613f08565b5b5f6145ba84828501614584565b91505092915050565b5f805f80606085870312156145db576145da613f08565b5b5f6145e887828801613f56565b94505060206145f987828801613f89565b935050604085013567ffffffffffffffff81111561461a57614619613f0c565b5b61462687828801614042565b925092505092959194509250565b5f806040838503121561464a57614649613f08565b5b5f83013567ffffffffffffffff81111561466757614666613f0c565b5b614673858286016142a1565b925050602061468485828601613f89565b9150509250929050565b5f805f606084860312156146a5576146a4613f08565b5b5f6146b286828701613f56565b93505060206146c386828701613f89565b92505060406146d486828701613f56565b9150509250925092565b5f805f606084860312156146f5576146f4613f08565b5b5f61470286828701613f56565b935050602061471386828701614584565b925050604061472486828701613f89565b9150509250925092565b5f806040838503121561474457614743613f08565b5b5f61475185828601613f56565b925050602061476285828601613f56565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806147b057607f821691505b6020821081036147c3576147c261476c565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61480082613f6a565b915061480b83613f6a565b9250828201905080821115614823576148226147c9565b5b92915050565b5f61483382613f6a565b915061483e83613f6a565b925082820261484c81613f6a565b91508282048414831517614863576148626147c9565b5b5092915050565b5f8151905061487881613f73565b92915050565b5f6020828403121561489357614892613f08565b5b5f6148a08482850161486a565b91505092915050565b5f6040820190506148bc5f830185614546565b6148c96020830184614546565b9392505050565b5f6060820190506148e35f830186614546565b6148f06020830185614546565b6148fd604083018461400e565b949350505050565b5f815190506149138161456e565b92915050565b5f6020828403121561492e5761492d613f08565b5b5f61493b84828501614905565b91505092915050565b5f8160601b9050919050565b5f61495a82614944565b9050919050565b5f61496b82614950565b9050919050565b61498361497e82613f2f565b614961565b82525050565b5f6149948284614972565b60148201915081905092915050565b5f6040820190506149b65f830185614546565b6149c3602083018461400e565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614a2e82613f6a565b9150614a3983613f6a565b925082614a4957614a486149f7565b5b828204905092915050565b7f5465616d3a2063616c6c6572206973206e6f7420746865206f776e6572206f725f8201527f20696e205465616d2e0000000000000000000000000000000000000000000000602082015250565b5f614aae602983613e79565b9150614ab982614a54565b604082019050919050565b5f6020820190508181035f830152614adb81614aa2565b9050919050565b5f614aec82613f6a565b9150614af783613f6a565b9250828203905081811115614b0f57614b0e6147c9565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614b49602083613e79565b9150614b5482614b15565b602082019050919050565b5f6020820190508181035f830152614b7681614b3d565b9050919050565b5f81905092915050565b50565b5f614b955f83614b7d565b9150614ba082614b87565b5f82019050919050565b5f614bb482614b8a565b9150819050919050565b7f5472616e73666572206661696c65642e000000000000000000000000000000005f82015250565b5f614bf2601083613e79565b9150614bfd82614bbe565b602082019050919050565b5f6020820190508181035f830152614c1f81614be6565b905091905056fea2646970667358221220e6b6c7576c5972e13026d71c6ef34c4d0a37773e514f7b14d3adf0851ea3edc564736f6c634300081900330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000044b49524f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044b49524f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405260043610610425575f3560e01c806388993c8111610228578063b0cfbf161161012d578063dd62ed3e116100b5578063f2fde38b11610079578063f2fde38b14610f81578063f623bb8b14610fa9578063f82fa75614610fd3578063f8c0fd2014610ffd578063fbbf8cc31461101357610425565b8063dd62ed3e14610e8f578063dfdedf6914610ecb578063e58306f914610ef3578063e6c6990a14610f1b578063e757223014610f4557610425565b8063c3cb97c6116100fc578063c3cb97c614610dbf578063c6ee6e3514610de7578063cacf084214610e03578063d266f3a914610e2b578063d83ae33214610e6757610425565b8063b0cfbf1614610d1d578063b6a3f59a14610d59578063b94b237614610d81578063c326876814610d9757610425565b8063a1af10ca116101b0578063a9059cbb1161017f578063a9059cbb14610c4b578063a91bd1a914610c87578063ad1203dc14610caf578063af54001e14610ccb578063afb16d1814610cf557610425565b8063a1af10ca14610b83578063a1db978214610bbf578063a457c2d714610be7578063a7593fb714610c2357610425565b80638da5cb5b116101f75780638da5cb5b14610ab55780638f770ad014610adf57806391b7f5ed14610b0957806395d89b4114610b3157806398ad441714610b5b57610425565b806388993c8114610a0f578063891bbe7314610a3957806389f26d5814610a755780638d859f3e14610a8b57610425565b80634070a0c91161032e578063627255df116102b657806379ab3c891161028557806379ab3c891461097b57806379cc6790146109915780637fb8c6d3146109b9578063853828b6146109e357806387491c60146109f957610425565b8063627255df146108d75780636d3de8061461091357806370a0823114610929578063715018a61461096557610425565b8063464c3428116102fd578063464c34281461081757806346f41ed51461083f5780634783f0ef146108695780634c23ce91146108915780635e830656146108bb57610425565b80634070a0c91461078957806342966c68146107b157806343696f18146107d957806345f7e06e1461080157610425565b806328ff1b51116103b15780633300678611610380578063330067861461068157806334d00766146106bd57806339509351146106e75780633d3f9c57146107235780633e07311c1461075f57610425565b806328ff1b51146105dd5780632b26a6bf146106055780632eb4a7ab1461062d578063313ce5671461065757610425565b80631963d0cc116103f85780631963d0cc146104f557806320fab1421461051f5780632181384e1461054957806323b872dd14610565578063286c8137146105a157610425565b806306fdde03146104295780630825850a14610453578063095ea7b31461048f57806318160ddd146104cb575b5f80fd5b348015610434575f80fd5b5061043d61104f565b60405161044a9190613edf565b60405180910390f35b34801561045e575f80fd5b5061047960048036038101906104749190613f9d565b6110df565b6040516104869190613ff5565b60405180910390f35b34801561049a575f80fd5b506104b560048036038101906104b09190613f9d565b61111e565b6040516104c29190613ff5565b60405180910390f35b3480156104d6575f80fd5b506104df611140565b6040516104ec919061401d565b60405180910390f35b348015610500575f80fd5b50610509611149565b6040516105169190613ff5565b60405180910390f35b34801561052a575f80fd5b5061053361115e565b6040516105409190613ff5565b60405180910390f35b610563600480360381019061055e9190614097565b611170565b005b348015610570575f80fd5b5061058b6004803603810190610586919061411b565b6115c5565b6040516105989190613ff5565b60405180910390f35b3480156105ac575f80fd5b506105c760048036038101906105c2919061416b565b6115f3565b6040516105d4919061401d565b60405180910390f35b3480156105e8575f80fd5b5061060360048036038101906105fe919061438e565b611613565b005b348015610610575f80fd5b5061062b6004803603810190610626919061416b565b61166f565b005b348015610638575f80fd5b50610641611681565b60405161064e919061441c565b60405180910390f35b348015610662575f80fd5b5061066b611687565b6040516106789190614450565b60405180910390f35b34801561068c575f80fd5b506106a760048036038101906106a29190614469565b61168f565b6040516106b49190613ff5565b60405180910390f35b3480156106c8575f80fd5b506106d161174e565b6040516106de919061401d565b60405180910390f35b3480156106f2575f80fd5b5061070d60048036038101906107089190613f9d565b611757565b60405161071a9190613ff5565b60405180910390f35b34801561072e575f80fd5b50610749600480360381019061074491906144c6565b61178d565b6040516107569190613ff5565b60405180910390f35b34801561076a575f80fd5b506107736117e8565b604051610780919061401d565b60405180910390f35b348015610794575f80fd5b506107af60048036038101906107aa919061416b565b6117ee565b005b3480156107bc575f80fd5b506107d760048036038101906107d2919061416b565b611800565b005b3480156107e4575f80fd5b506107ff60048036038101906107fa91906144c6565b611814565b005b34801561080c575f80fd5b50610815611919565b005b348015610822575f80fd5b5061083d600480360381019061083891906144c6565b611958565b005b34801561084a575f80fd5b506108536119ba565b6040516108609190613ff5565b60405180910390f35b348015610874575f80fd5b5061088f600480360381019061088a919061451b565b6119cc565b005b34801561089c575f80fd5b506108a5611a19565b6040516108b29190613ff5565b60405180910390f35b6108d560048036038101906108d09190613f9d565b611a48565b005b3480156108e2575f80fd5b506108fd60048036038101906108f8919061416b565b611c2d565b60405161090a9190613ff5565b60405180910390f35b34801561091e575f80fd5b50610927611c59565b005b348015610934575f80fd5b5061094f600480360381019061094a91906144c6565b611c7c565b60405161095c919061401d565b60405180910390f35b348015610970575f80fd5b50610979611cc1565b005b348015610986575f80fd5b5061098f611cd4565b005b34801561099c575f80fd5b506109b760048036038101906109b29190613f9d565b611cf8565b005b3480156109c4575f80fd5b506109cd611d18565b6040516109da9190614555565b60405180910390f35b3480156109ee575f80fd5b506109f7611d3d565b005b348015610a04575f80fd5b50610a0d611d89565b005b348015610a1a575f80fd5b50610a23611dc7565b604051610a309190613ff5565b60405180910390f35b348015610a44575f80fd5b50610a5f6004803603810190610a5a919061416b565b611df6565b604051610a6c9190614555565b60405180910390f35b348015610a80575f80fd5b50610a89611e31565b005b348015610a96575f80fd5b50610a9f611e55565b604051610aac919061401d565b60405180910390f35b348015610ac0575f80fd5b50610ac9611e5b565b604051610ad69190614555565b60405180910390f35b348015610aea575f80fd5b50610af3611e83565b604051610b00919061401d565b60405180910390f35b348015610b14575f80fd5b50610b2f6004803603810190610b2a919061416b565b611eaf565b005b348015610b3c575f80fd5b50610b45611ec1565b604051610b529190613edf565b60405180910390f35b348015610b66575f80fd5b50610b816004803603810190610b7c9190614598565b611f51565b005b348015610b8e575f80fd5b50610ba96004803603810190610ba491906144c6565b611f76565b604051610bb69190613ff5565b60405180910390f35b348015610bca575f80fd5b50610be56004803603810190610be09190613f9d565b612034565b005b348015610bf2575f80fd5b50610c0d6004803603810190610c089190613f9d565b6121cc565b604051610c1a9190613ff5565b60405180910390f35b348015610c2e575f80fd5b50610c496004803603810190610c44919061416b565b612238565b005b348015610c56575f80fd5b50610c716004803603810190610c6c9190613f9d565b6122c2565b604051610c7e9190613ff5565b60405180910390f35b348015610c92575f80fd5b50610cad6004803603810190610ca891906144c6565b6122e4565b005b610cc96004803603810190610cc491906145c3565b61241a565b005b348015610cd6575f80fd5b50610cdf612642565b604051610cec919061401d565b60405180910390f35b348015610d00575f80fd5b50610d1b6004803603810190610d169190614634565b61264b565b005b348015610d28575f80fd5b50610d436004803603810190610d3e919061416b565b6126d6565b604051610d509190613ff5565b60405180910390f35b348015610d64575f80fd5b50610d7f6004803603810190610d7a919061416b565b612718565b005b348015610d8c575f80fd5b50610d9561276b565b005b348015610da2575f80fd5b50610dbd6004803603810190610db89190614598565b61278e565b005b348015610dca575f80fd5b50610de56004803603810190610de09190614598565b6127b2565b005b610e016004803603810190610dfc919061468e565b6127d6565b005b348015610e0e575f80fd5b50610e296004803603810190610e2491906144c6565b612be8565b005b348015610e36575f80fd5b50610e516004803603810190610e4c91906144c6565b612c49565b604051610e5e919061401d565b60405180910390f35b348015610e72575f80fd5b50610e8d6004803603810190610e8891906146de565b612cd1565b005b348015610e9a575f80fd5b50610eb56004803603810190610eb0919061472e565b612d79565b604051610ec2919061401d565b60405180910390f35b348015610ed6575f80fd5b50610ef16004803603810190610eec91906144c6565b612dfb565b005b348015610efe575f80fd5b50610f196004803603810190610f149190613f9d565b612efe565b005b348015610f26575f80fd5b50610f2f612f95565b604051610f3c9190613ff5565b60405180910390f35b348015610f50575f80fd5b50610f6b6004803603810190610f66919061416b565b612fa7565b604051610f78919061401d565b60405180910390f35b348015610f8c575f80fd5b50610fa76004803603810190610fa291906144c6565b613024565b005b348015610fb4575f80fd5b50610fbd61309d565b604051610fca919061401d565b60405180910390f35b348015610fde575f80fd5b50610fe76130a3565b604051610ff49190613ff5565b60405180910390f35b348015611008575f80fd5b506110116130b9565b005b34801561101e575f80fd5b50611039600480360381019061103491906144c6565b6130f8565b604051611046919061401d565b60405180910390f35b60606003805461105e90614799565b80601f016020809104026020016040519081016040528092919081815260200182805461108a90614799565b80156110d55780601f106110ac576101008083540402835291602001916110d5565b820191905f5260205f20905b8154815290600101906020018083116110b857829003601f168201915b5050505050905090565b5f600a5f9054906101000a900460ff166110fc5760019050611118565b600b5482611109856130f8565b61111391906147f6565b111590505b92915050565b5f8061112861313e565b9050611135818585613145565b600191505092915050565b5f600254905090565b5f600a5f9054906101000a900460ff16905090565b60075f9054906101000a900460ff1681565b611178611a19565b6111ae576040517f4e39100800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400008410156111f0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111fb85848461168f565b611231576040517f97b24df000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61123a84611c2d565b611270576040517f93eeb41500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61127a85856110df565b6112b0576040517fcd7cece200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112b9846126d6565b6112ef576040517fa4875a4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54341461132a576040517f3c6b4b2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113338161178d565b611369576040517fd8a0393200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8461137483612c49565b61137e9190614829565b90505f829050818173ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b81526004016113be9190614555565b602060405180830381865afa1580156113d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113fd919061487e565b1015611435576040517f590b7c5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e89306040518363ffffffff1660e01b81526004016114719291906148a9565b602060405180830381865afa15801561148c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b0919061487e565b10156114e8576040517f2fc50d6000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff166323b872dd8930866040518463ffffffff1660e01b8152600401611526939291906148d0565b6020604051808303815f875af1158015611542573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115669190614919565b90508061159f576040517ff27f64e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115a76132f6565b6115b18888613352565b6115bb88886133a0565b5050505050505050565b5f806115cf61313e565b90506115dc8582856134ee565b6115e7858585613570565b60019150509392505050565b60148181548110611602575f80fd5b905f5260205f20015f915090505481565b61161b6137ca565b60125f6116289190613d46565b60145f6116359190613d64565b816012908051906020019061164b929190613d82565b508060149080519060200190611662929190613e09565b5081516015819055505050565b6116776137ca565b80600c8190555050565b600f5481565b5f6012905090565b5f805f1b600f54036116cd576040517fc70d18aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f846040516020016116df9190614989565b6040516020818303038152906040528051906020012090506117448484808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f82011690508083019250505050505050600f5483613869565b9150509392505050565b5f600b54905090565b5f8061176161313e565b90506117828185856117738589612d79565b61177d91906147f6565b613145565b600191505092915050565b5f6001151560115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900460ff161515149050919050565b60155481565b6117f66137ca565b80600b8190555050565b61181161180b61313e565b8261387f565b50565b61181c613a39565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611881576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188a81611f76565b156118c1576040517f8afaeb9d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6119216137ca565b6001601660016101000a81548160ff0219169083151502179055505f601660026101000a81548160ff021916908315150217905550565b6119606137ca565b600160115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f6101000a81548160ff02191690831515021790555050565b60165f9054906101000a900460ff1681565b6119d46137ca565b600f548103611a0f576040517fa28a88c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f8190555050565b5f601660029054906101000a900460ff168015611a435750601660019054906101000a900460ff16155b905090565b60165f9054906101000a900460ff1615611a8e576040517fce2f476000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a7640000811015611ad0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ad8611dc7565b611b0e576040517fce2f476000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b1781611c2d565b611b4d576040517f93eeb41500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b56816126d6565b611b8c576040517fa4875a4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b9682826110df565b611bcc576040517fcd7cece200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bd581612fa7565b3414611c0d576040517f3c6b4b2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c156132f6565b611c1f8282613352565b611c2982826133a0565b5050565b5f600a60019054906101000a900460ff16611c4b5760019050611c54565b600c5482111590505b919050565b611c616137ca565b5f60105f6101000a81548160ff021916908315150217905550565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611cc9613a39565b611cd25f613ab7565b565b611cdc6137ca565b600160105f6101000a81548160ff021916908315150217905550565b611d0a82611d0461313e565b836134ee565b611d14828261387f565b5050565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d456137ca565b5f4703611d7e576040517fc70d18aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d8747613b7a565b565b611d916137ca565b5f601660026101000a81548160ff0219169083151502179055505f601660016101000a81548160ff021916908315150217905550565b5f601660019054906101000a900460ff168015611df15750601660029054906101000a900460ff16155b905090565b60128181548110611e05575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e396137ca565b600160165f6101000a81548160ff021916908315150217905550565b600d5481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60075f9054906101000a900460ff16611ea657611e9f611140565b9050611eac565b60085490505b90565b611eb76137ca565b80600d8190555050565b606060048054611ed090614799565b80601f0160208091040260200160405190810160405280929190818152602001828054611efc90614799565b8015611f475780601f10611f1e57610100808354040283529160200191611f47565b820191905f5260205f20905b815481529060010190602001808311611f2a57829003601f168201915b5050505050905090565b611f596137ca565b80600a60016101000a81548160ff02191690831515021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fdc576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001151560065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515149050919050565b61203c6137ca565b5f8103612075576040517fc70d18aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f829050818173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120b39190614555565b602060405180830381865afa1580156120ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120f2919061487e565b101561212a576040517f590b7c5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016121869291906149a3565b6020604051808303815f875af11580156121a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121c69190614919565b50505050565b5f806121d661313e565b90505f6121e38286612d79565b90508381101561221f576040517f590b7c5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61222c8286868403613145565b60019250505092915050565b73a9dac8f3aedc55d0fe707b86b8a45d246858d2e173ffffffffffffffffffffffffffffffffffffffff1661226b61313e565b73ffffffffffffffffffffffffffffffffffffffff16146122b8576040517f9b96b05100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e8190555050565b5f806122cc61313e565b90506122d9818585613570565b600191505092915050565b6122ec6137ca565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612351576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123d7576040517fa28a88c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165f9054906101000a900460ff1615612460576040517f4e39100800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400008310156124a2576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124aa611a19565b6124e0576040517f4e39100800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124eb84838361168f565b612521576040517f97b24df000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61252a83611c2d565b612560576040517f93eeb41500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61256a84846110df565b6125a0576040517fcd7cece200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125a9836126d6565b6125df576040517fa4875a4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125e883612fa7565b3414612620576040517f3c6b4b2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126286132f6565b6126328484613352565b61263c84846133a0565b50505050565b5f600c54905090565b6126536137ca565b670de0b6b3a7640000811015612695576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b82518110156126d1576126c48382815181106126b6576126b56149ca565b5b6020026020010151836133a0565b8080600101915050612697565b505050565b5f60075f9054906101000a900460ff166126f35760019050612713565b6126fb611e83565b82612704611140565b61270e91906147f6565b111590505b919050565b6127206137ca565b612728611140565b811015612761576040517fcc67044500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060088190555050565b6127736137ca565b5f60165f6101000a81548160ff021916908315150217905550565b6127966137ca565b8060075f6101000a81548160ff02191690831515021790555050565b6127ba6137ca565b80600a5f6101000a81548160ff02191690831515021790555050565b670de0b6b3a7640000821015612818576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612821826126d6565b612857576040517fa4875a4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61285f611dc7565b612895576040517fce2f476000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61289e82611c2d565b6128d4576040517f93eeb41500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128de83836110df565b612914576040517fcd7cece200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54341461294f576040517f3c6b4b2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129588161178d565b61298e576040517fd8a0393200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8261299983612c49565b6129a39190614829565b90505f829050818173ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b81526004016129e39190614555565b602060405180830381865afa1580156129fe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a22919061487e565b1015612a5a576040517f590b7c5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e87306040518363ffffffff1660e01b8152600401612a969291906148a9565b602060405180830381865afa158015612ab1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ad5919061487e565b1015612b0d576040517f2fc50d6000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff166323b872dd8730866040518463ffffffff1660e01b8152600401612b4b939291906148d0565b6020604051808303815f875af1158015612b67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b8b9190614919565b905080612bc4576040517ff27f64e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612bcc6132f6565b612bd68686613352565b612be086866133a0565b505050505050565b612bf06137ca565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f6101000a81548160ff02191690831515021790555050565b5f612c538261178d565b612c89576040517fd8a0393200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101549050919050565b612cd96137ca565b8160115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f6101000a81548160ff0219169083151502179055508060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060010181905550505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b612e03613a39565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612e68576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e7181611f76565b612ea7576040517f8afaeb9d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b612f066137ca565b670de0b6b3a7640000811015612f48576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f51816126d6565b612f87576040517fa4875a4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f9182826133a0565b5050565b60105f9054906101000a900460ff1681565b5f670de0b6b3a7640000821015612fea576040517fe6d50f6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f670de0b6b3a764000083612fff9190614a24565b9050600e5481600d546130129190614829565b61301c91906147f6565b915050919050565b61302c613a39565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613091576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61309a81613ab7565b50565b600e5481565b5f600a60019054906101000a900460ff16905090565b6130c16137ca565b6001601660026101000a81548160ff0219169083151502179055505f601660016101000a81548160ff021916908315150217905550565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131aa576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361320f576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516132e9919061401d565b60405180910390a3505050565b73a9dac8f3aedc55d0fe707b86b8a45d246858d2e173ffffffffffffffffffffffffffffffffffffffff166108fc600e5490811502906040515f60405180830381858888f1935050505015801561334f573d5f803e3d5ffd5b50565b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613405576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134105f8383613c0f565b8060025f82825461342191906147f6565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461347391906147f6565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134d7919061401d565b60405180910390a36134ea5f8383613c14565b5050565b5f6134f98484612d79565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461356a578181101561355c576040517f590b7c5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6135698484848403613145565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036135d5576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361363a576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613645838383613c0f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156136bf576040517f590b7c5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461374d91906147f6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137b1919061401d565b60405180910390a36137c4848484613c14565b50505050565b5f6137d361313e565b73ffffffffffffffffffffffffffffffffffffffff166137f1611e5b565b73ffffffffffffffffffffffffffffffffffffffff161490505f61381b61381661313e565b611f76565b905081806138265750805b613865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385c90614ac4565b60405180910390fd5b5050565b5f826138758584613c19565b1490509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036138e4576040517f8991aa5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6138ef825f83613c0f565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613969576040517f590b7c5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f8282546139bd9190614ae2565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a21919061401d565b60405180910390a3613a34835f84613c14565b505050565b613a4161313e565b73ffffffffffffffffffffffffffffffffffffffff16613a5f611e5b565b73ffffffffffffffffffffffffffffffffffffffff1614613ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613aac90614b5f565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5b601554811015613c0b57613bfe60128281548110613b9d57613b9c6149ca565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16606460148481548110613bdb57613bda6149ca565b5b905f5260205f20015485613bef9190614829565b613bf99190614a24565b613c85565b8080600101915050613b7c565b5050565b505050565b505050565b5f808290505f5b8451811015613c7a575f858281518110613c3d57613c3c6149ca565b5b60200260200101519050808311613c5f57613c588382613d32565b9250613c6c565b613c698184613d32565b92505b508080600101915050613c20565b508091505092915050565b5f8273ffffffffffffffffffffffffffffffffffffffff1682604051613caa90614baa565b5f6040518083038185875af1925050503d805f8114613ce4576040519150601f19603f3d011682016040523d82523d5f602084013e613ce9565b606091505b5050905080613d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2490614c08565b60405180910390fd5b505050565b5f825f528160205260405f20905092915050565b5080545f8255905f5260205f2090810190613d619190613e54565b50565b5080545f8255905f5260205f2090810190613d7f9190613e54565b50565b828054828255905f5260205f20908101928215613df8579160200282015b82811115613df7578251825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613da0565b5b509050613e059190613e54565b5090565b828054828255905f5260205f20908101928215613e43579160200282015b82811115613e42578251825591602001919060010190613e27565b5b509050613e509190613e54565b5090565b5b80821115613e6b575f815f905550600101613e55565b5090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613eb182613e6f565b613ebb8185613e79565b9350613ecb818560208601613e89565b613ed481613e97565b840191505092915050565b5f6020820190508181035f830152613ef78184613ea7565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f3982613f10565b9050919050565b613f4981613f2f565b8114613f53575f80fd5b50565b5f81359050613f6481613f40565b92915050565b5f819050919050565b613f7c81613f6a565b8114613f86575f80fd5b50565b5f81359050613f9781613f73565b92915050565b5f8060408385031215613fb357613fb2613f08565b5b5f613fc085828601613f56565b9250506020613fd185828601613f89565b9150509250929050565b5f8115159050919050565b613fef81613fdb565b82525050565b5f6020820190506140085f830184613fe6565b92915050565b61401781613f6a565b82525050565b5f6020820190506140305f83018461400e565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261405757614056614036565b5b8235905067ffffffffffffffff8111156140745761407361403a565b5b6020830191508360208202830111156140905761408f61403e565b5b9250929050565b5f805f805f608086880312156140b0576140af613f08565b5b5f6140bd88828901613f56565b95505060206140ce88828901613f89565b945050604086013567ffffffffffffffff8111156140ef576140ee613f0c565b5b6140fb88828901614042565b9350935050606061410e88828901613f56565b9150509295509295909350565b5f805f6060848603121561413257614131613f08565b5b5f61413f86828701613f56565b935050602061415086828701613f56565b925050604061416186828701613f89565b9150509250925092565b5f602082840312156141805761417f613f08565b5b5f61418d84828501613f89565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6141cc82613e97565b810181811067ffffffffffffffff821117156141eb576141ea614196565b5b80604052505050565b5f6141fd613eff565b905061420982826141c3565b919050565b5f67ffffffffffffffff82111561422857614227614196565b5b602082029050602081019050919050565b5f61424b6142468461420e565b6141f4565b9050808382526020820190506020840283018581111561426e5761426d61403e565b5b835b8181101561429757806142838882613f56565b845260208401935050602081019050614270565b5050509392505050565b5f82601f8301126142b5576142b4614036565b5b81356142c5848260208601614239565b91505092915050565b5f67ffffffffffffffff8211156142e8576142e7614196565b5b602082029050602081019050919050565b5f61430b614306846142ce565b6141f4565b9050808382526020820190506020840283018581111561432e5761432d61403e565b5b835b8181101561435757806143438882613f89565b845260208401935050602081019050614330565b5050509392505050565b5f82601f83011261437557614374614036565b5b81356143858482602086016142f9565b91505092915050565b5f80604083850312156143a4576143a3613f08565b5b5f83013567ffffffffffffffff8111156143c1576143c0613f0c565b5b6143cd858286016142a1565b925050602083013567ffffffffffffffff8111156143ee576143ed613f0c565b5b6143fa85828601614361565b9150509250929050565b5f819050919050565b61441681614404565b82525050565b5f60208201905061442f5f83018461440d565b92915050565b5f60ff82169050919050565b61444a81614435565b82525050565b5f6020820190506144635f830184614441565b92915050565b5f805f604084860312156144805761447f613f08565b5b5f61448d86828701613f56565b935050602084013567ffffffffffffffff8111156144ae576144ad613f0c565b5b6144ba86828701614042565b92509250509250925092565b5f602082840312156144db576144da613f08565b5b5f6144e884828501613f56565b91505092915050565b6144fa81614404565b8114614504575f80fd5b50565b5f81359050614515816144f1565b92915050565b5f602082840312156145305761452f613f08565b5b5f61453d84828501614507565b91505092915050565b61454f81613f2f565b82525050565b5f6020820190506145685f830184614546565b92915050565b61457781613fdb565b8114614581575f80fd5b50565b5f813590506145928161456e565b92915050565b5f602082840312156145ad576145ac613f08565b5b5f6145ba84828501614584565b91505092915050565b5f805f80606085870312156145db576145da613f08565b5b5f6145e887828801613f56565b94505060206145f987828801613f89565b935050604085013567ffffffffffffffff81111561461a57614619613f0c565b5b61462687828801614042565b925092505092959194509250565b5f806040838503121561464a57614649613f08565b5b5f83013567ffffffffffffffff81111561466757614666613f0c565b5b614673858286016142a1565b925050602061468485828601613f89565b9150509250929050565b5f805f606084860312156146a5576146a4613f08565b5b5f6146b286828701613f56565b93505060206146c386828701613f89565b92505060406146d486828701613f56565b9150509250925092565b5f805f606084860312156146f5576146f4613f08565b5b5f61470286828701613f56565b935050602061471386828701614584565b925050604061472486828701613f89565b9150509250925092565b5f806040838503121561474457614743613f08565b5b5f61475185828601613f56565b925050602061476285828601613f56565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806147b057607f821691505b6020821081036147c3576147c261476c565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61480082613f6a565b915061480b83613f6a565b9250828201905080821115614823576148226147c9565b5b92915050565b5f61483382613f6a565b915061483e83613f6a565b925082820261484c81613f6a565b91508282048414831517614863576148626147c9565b5b5092915050565b5f8151905061487881613f73565b92915050565b5f6020828403121561489357614892613f08565b5b5f6148a08482850161486a565b91505092915050565b5f6040820190506148bc5f830185614546565b6148c96020830184614546565b9392505050565b5f6060820190506148e35f830186614546565b6148f06020830185614546565b6148fd604083018461400e565b949350505050565b5f815190506149138161456e565b92915050565b5f6020828403121561492e5761492d613f08565b5b5f61493b84828501614905565b91505092915050565b5f8160601b9050919050565b5f61495a82614944565b9050919050565b5f61496b82614950565b9050919050565b61498361497e82613f2f565b614961565b82525050565b5f6149948284614972565b60148201915081905092915050565b5f6040820190506149b65f830185614546565b6149c3602083018461400e565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614a2e82613f6a565b9150614a3983613f6a565b925082614a4957614a486149f7565b5b828204905092915050565b7f5465616d3a2063616c6c6572206973206e6f7420746865206f776e6572206f725f8201527f20696e205465616d2e0000000000000000000000000000000000000000000000602082015250565b5f614aae602983613e79565b9150614ab982614a54565b604082019050919050565b5f6020820190508181035f830152614adb81614aa2565b9050919050565b5f614aec82613f6a565b9150614af783613f6a565b9250828203905081811115614b0f57614b0e6147c9565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614b49602083613e79565b9150614b5482614b15565b602082019050919050565b5f6020820190508181035f830152614b7681614b3d565b9050919050565b5f81905092915050565b50565b5f614b955f83614b7d565b9150614ba082614b87565b5f82019050919050565b5f614bb482614b8a565b9150819050919050565b7f5472616e73666572206661696c65642e000000000000000000000000000000005f82015250565b5f614bf2601083613e79565b9150614bfd82614bbe565b602082019050919050565b5f6020820190508181035f830152614c1f81614be6565b905091905056fea2646970667358221220e6b6c7576c5972e13026d71c6ef34c4d0a37773e514f7b14d3adf0851ea3edc564736f6c63430008190033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000044b49524f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044b49524f00000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): KIRO
Arg [1] : symbol (string): KIRO
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [3] : 4b49524f00000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 4b49524f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
39226:6633:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9838:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37370:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12189:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10958:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36239:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26331:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44447:1409;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12970:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30034:28;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34628:291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35565:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28407:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10800:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29075:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36500:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13674:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31647:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30067:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35332:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21034:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24846:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38676:125;;;;;;;;;;;;;:::i;:::-;;33201:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30106:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28655:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38553:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40813:638;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35937:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29482:103;;;;;;;;;;;;;:::i;:::-;;11129:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23439:103;;;;;;;;;;;;;:::i;:::-;;29373:101;;;;;;;;;;;;;:::i;:::-;;21444:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30002:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30145:162;;;;;;;;;;;;;:::i;:::-;;39032:124;;;;;;;;;;;;;:::i;:::-;;38433:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29964:33;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33918:97;;;;;;;;;;;;;:::i;:::-;;27318:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22791:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27125:146;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27489:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10057:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35691:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25551:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31052:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14415:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28168:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11462:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34361:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43341:755;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36984:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40304:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26543:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26945:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34102:99;;;;;;;;;;;;;:::i;:::-;;26430:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35444:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41785:1274;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33669:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31975:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32594:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11718:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25197:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40082:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28439:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27850:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23697:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27353:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36735:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38809:128;;;;;;;;;;;;;:::i;:::-;;37710:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9838:100;9892:13;9925:5;9918:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9838:100;:::o;37370:207::-;37456:4;37477:15;;;;;;;;;;;37473:36;;37502:4;37495:11;;;;37473:36;37562:7;;37551;37526:22;37539:8;37526:12;:22::i;:::-;:32;;;;:::i;:::-;:43;;37519:50;;37370:207;;;;;:::o;12189:201::-;12272:4;12289:13;12305:12;:10;:12::i;:::-;12289:28;;12328:32;12337:5;12344:7;12353:6;12328:8;:32::i;:::-;12378:4;12371:11;;;12189:201;;;;:::o;10958:108::-;11019:7;11046:12;;11039:19;;10958:108;:::o;36239:94::-;36286:4;36310:15;;;;;;;;;;;36303:22;;36239:94;:::o;26331:23::-;;;;;;;;;;;;;:::o;44447:1409::-;44594:17;:15;:17::i;:::-;44590:51;;44620:21;;;;;;;;;;;;;;44590:51;44665:7;44655;:17;44652:47;;;44681:18;;;;;;;;;;;;;;44652:47;44714:32;44728:3;44733:12;;44714:13;:32::i;:::-;44710:68;;44755:23;;;;;;;;;;;;;;44710:68;44793:21;44806:7;44793:12;:21::i;:::-;44789:58;;44823:24;;;;;;;;;;;;;;44789:58;44862:34;44883:3;44888:7;44862:20;:34::i;:::-;44858:68;;44905:21;;;;;;;;;;;;;;44858:68;44941:22;44955:7;44941:13;:22::i;:::-;44937:48;;44972:13;;;;;;;;;;;;;;44937:48;45012:12;;44999:9;:25;44996:53;;45033:16;;;;;;;;;;;;;;44996:53;45120:47;45147:19;45120:26;:47::i;:::-;45116:83;;45176:23;;;;;;;;;;;;;;45116:83;45210:27;45284:7;45240:41;45261:19;45240:20;:41::i;:::-;:51;;;;:::i;:::-;45210:81;;45302:19;45331;45302:49;;45405:19;45375:12;:22;;;45398:3;45375:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;45372:87;;;45433:26;;;;;;;;;;;;;;45372:87;45518:19;45473:12;:22;;;45496:3;45509:4;45473:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:64;45470:104;;;45546:28;;;;;;;;;;;;;;45470:104;45595:21;45619:12;:25;;;45645:3;45658:4;45665:19;45619:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45595:90;;45700:16;45696:50;;45725:21;;;;;;;;;;;;;;45696:50;45759:17;:15;:17::i;:::-;45787:31;45805:3;45810:7;45787:17;:31::i;:::-;45829:19;45835:3;45840:7;45829:5;:19::i;:::-;44579:1277;;;44447:1409;;;;;:::o;12970:295::-;13101:4;13118:15;13136:12;:10;:12::i;:::-;13118:30;;13159:38;13175:4;13181:7;13190:6;13159:15;:38::i;:::-;13208:27;13218:4;13224:2;13228:6;13208:9;:27::i;:::-;13253:4;13246:11;;;12970:295;;;;;:::o;30034:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34628:291::-;26087:18;:16;:18::i;:::-;34749:16:::1;;34742:23;;;;:::i;:::-;34781:11;;34774:18;;;;:::i;:::-;34820:12;34801:16;:31;;;;;;;;;;;;:::i;:::-;;34855:8;34841:11;:22;;;;;;;;;;;;:::i;:::-;;34894:12;:19;34872;:41;;;;34628:291:::0;;:::o;35565:118::-;26087:18;:16;:18::i;:::-;35662:13:::1;35647:12;:28;;;;35565:118:::0;:::o;28407:25::-;;;;:::o;10800:93::-;10858:5;10883:2;10876:9;;10800:93;:::o;29075:288::-;29164:4;29198:1;29184:15;;:10;;:15;29181:46;;29208:19;;;;;;;;;;;;;;29181:46;29238:12;29280:3;29263:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;29253:32;;;;;;29238:47;;29305:50;29324:12;;29305:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29338:10;;29350:4;29305:18;:50::i;:::-;29298:57;;;29075:288;;;;;:::o;36500:88::-;36546:7;36573;;36566:14;;36500:88;:::o;13674:238::-;13762:4;13779:13;13795:12;:10;:12::i;:::-;13779:28;;13818:64;13827:5;13834:7;13871:10;13843:25;13853:5;13860:7;13843:9;:25::i;:::-;:38;;;;:::i;:::-;13818:8;:64::i;:::-;13900:4;13893:11;;;13674:238;;;;:::o;31647:170::-;31732:4;31807;31752:59;;:21;:42;31774:19;31752:42;;;;;;;;;;;;;;;:51;;;;;;;;;;;;:59;;;31745:66;;31647:170;;;:::o;30067:34::-;;;;:::o;35332:104::-;26087:18;:16;:18::i;:::-;35417:11:::1;35407:7;:21;;;;35332:104:::0;:::o;21034:91::-;21090:27;21096:12;:10;:12::i;:::-;21110:6;21090:5;:27::i;:::-;21034:91;:::o;24846:208::-;22677:13;:11;:13::i;:::-;24930:1:::1;24910:22;;:8;:22;;::::0;24907:55:::1;;24941:21;;;;;;;;;;;;;;24907:55;24972:16;24979:8;24972:6;:16::i;:::-;24969:47;;;24997:19;;;;;;;;;;;;;;24969:47;25044:4;25027;:14;25032:8;25027:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;24846:208:::0;:::o;38676:125::-;26087:18;:16;:18::i;:::-;38753:4:::1;38736:14;;:21;;;;;;;;;;;;;;;;;;38788:5;38768:17;;:25;;;;;;;;;;;;;;;;;;38676:125::o:0;33201:161::-;26087:18;:16;:18::i;:::-;33352:4:::1;33298:21;:42;33320:19;33298:42;;;;;;;;;;;;;;;:51;;;:58;;;;;;;;;;;;;;;;;;33201:161:::0;:::o;30106:32::-;;;;;;;;;;;;;:::o;28655:185::-;26087:18;:16;:18::i;:::-;28760:10:::1;;28742:14;:28:::0;28739:55:::1;;28779:15;;;;;;;;;;;;;;28739:55;28818:14;28805:10;:27;;;;28655:185:::0;:::o;38553:115::-;38601:4;38624:17;;;;;;;;;;;:36;;;;;38646:14;;;;;;;;;;;38645:15;38624:36;38617:43;;38553:115;:::o;40813:638::-;40890:20;;;;;;;;;;;40887:53;;;40919:21;;;;;;;;;;;;;;40887:53;40964:7;40954;:17;40951:47;;;40980:18;;;;;;;;;;;;;;40951:47;41013:14;:12;:14::i;:::-;41009:48;;41036:21;;;;;;;;;;;;;;41009:48;41072:21;41085:7;41072:12;:21::i;:::-;41068:58;;41102:24;;;;;;;;;;;;;;41068:58;41141:22;41155:7;41141:13;:22::i;:::-;41137:48;;41172:13;;;;;;;;;;;;;;41137:48;41200:34;41221:3;41226:7;41200:20;:34::i;:::-;41196:68;;41243:21;;;;;;;;;;;;;;41196:68;41291:17;41300:7;41291:8;:17::i;:::-;41278:9;:30;41275:58;;41317:16;;;;;;;;;;;;;;41275:58;41354:17;:15;:17::i;:::-;41382:31;41400:3;41405:7;41382:17;:31::i;:::-;41424:19;41430:3;41435:7;41424:5;:19::i;:::-;40813:638;;:::o;35937:163::-;35997:4;36018:17;;;;;;;;;;;36014:38;;36045:4;36038:11;;;;36014:38;36080:12;;36069:7;:23;;36062:30;;35937:163;;;;:::o;29482:103::-;26087:18;:16;:18::i;:::-;29572:5:::1;29552:17;;:25;;;;;;;;;;;;;;;;;;29482:103::o:0;11129:127::-;11203:7;11230:9;:18;11240:7;11230:18;;;;;;;;;;;;;;;;11223:25;;11129:127;;;:::o;23439:103::-;22677:13;:11;:13::i;:::-;23504:30:::1;23531:1;23504:18;:30::i;:::-;23439:103::o:0;29373:101::-;26087:18;:16;:18::i;:::-;29462:4:::1;29442:17;;:24;;;;;;;;;;;;;;;;;;29373:101::o:0;21444:164::-;21521:46;21537:7;21546:12;:10;:12::i;:::-;21560:6;21521:15;:46::i;:::-;21578:22;21584:7;21593:6;21578:5;:22::i;:::-;21444:164;;:::o;30002:27::-;;;;;;;;;;;;;:::o;30145:162::-;26087:18;:16;:18::i;:::-;30228:1:::1;30203:21;:26:::0;30200:57:::1;;30238:19;;;;;;;;;;;;;;30200:57;30266:35;30279:21;30266:12;:35::i;:::-;30145:162::o:0;39032:124::-;26087:18;:16;:18::i;:::-;39110:5:::1;39090:17;;:25;;;;;;;;;;;;;;;;;;39143:5;39126:14;;:22;;;;;;;;;;;;;;;;;;39032:124::o:0;38433:112::-;38478:4;38501:14;;;;;;;;;;;:36;;;;;38520:17;;;;;;;;;;;38519:18;38501:36;38494:43;;38433:112;:::o;29964:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33918:97::-;26087:18;:16;:18::i;:::-;34005:4:::1;33982:20;;:27;;;;;;;;;;;;;;;;;;33918:97::o:0;27318:30::-;;;;:::o;22791:87::-;22837:7;22864:6;;;;;;;;;;;22857:13;;22791:87;:::o;27125:146::-;27175:7;27199:11;;;;;;;;;;;27195:47;;27220:19;:17;:19::i;:::-;27213:26;;;;27195:47;27259:4;;27252:11;;27125:146;;:::o;27489:90::-;26087:18;:16;:18::i;:::-;27564:9:::1;27556:5;:17;;;;27489:90:::0;:::o;10057:104::-;10113:13;10146:7;10139:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10057:104;:::o;35691:120::-;26087:18;:16;:18::i;:::-;35793:10:::1;35773:17;;:30;;;;;;;;;;;;;;;;;;35691:120:::0;:::o;25551:183::-;25621:4;25660:1;25640:22;;:8;:22;;;25637:55;;25671:21;;;;;;;;;;;;;;25637:55;25724:4;25706:22;;:4;:14;25711:8;25706:14;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;25699:29;;25551:183;;;:::o;31052:417::-;26087:18;:16;:18::i;:::-;31180:1:::1;31159:17;:22:::0;31156:53:::1;;31190:19;;;;;;;;;;;;;;31156:53;31216:20;31246:14;31216:45;;31312:17;31271:13;:23;;;31303:4;31271:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;31268:96;;;31338:26;;;;;;;;;;;;;;31268:96;31371:13;:22;;;31394:12;;;;;;;;;;;31408:17;31371:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31149:320;31052:417:::0;;:::o;14415:423::-;14508:4;14525:13;14541:12;:10;:12::i;:::-;14525:28;;14564:24;14591:25;14601:5;14608:7;14591:9;:25::i;:::-;14564:52;;14649:15;14630:16;:34;14627:72;;;14673:26;;;;;;;;;;;;;;14627:72;14735:60;14744:5;14751:7;14779:15;14760:16;:34;14735:8;:60::i;:::-;14826:4;14819:11;;;;14415:423;;;;:::o;28168:135::-;27440:42;28223:24;;:12;:10;:12::i;:::-;:24;;;28220:51;;28256:15;;;;;;;;;;;;;;28220:51;28293:4;28278:12;:19;;;;28168:135;:::o;11462:193::-;11541:4;11558:13;11574:12;:10;:12::i;:::-;11558:28;;11597;11607:5;11614:2;11618:6;11597:9;:28::i;:::-;11643:4;11636:11;;;11462:193;;;;:::o;34361:261::-;26087:18;:16;:18::i;:::-;34480:1:::1;34452:30;;:16;:30;;::::0;34449:63:::1;;34491:21;;;;;;;;;;;;;;34449:63;34542:12;;;;;;;;;;;34522:32;;:16;:32;;::::0;34519:59:::1;;34563:15;;;;;;;;;;;;;;34519:59;34600:16;34585:12;;:31;;;;;;;;;;;;;;;;;;34361:261:::0;:::o;43341:755::-;43453:20;;;;;;;;;;;43450:53;;;43482:21;;;;;;;;;;;;;;43450:53;43527:7;43517;:17;43514:47;;;43543:18;;;;;;;;;;;;;;43514:47;43576:17;:15;:17::i;:::-;43572:51;;43602:21;;;;;;;;;;;;;;43572:51;43638:32;43652:3;43657:12;;43638:13;:32::i;:::-;43634:68;;43679:23;;;;;;;;;;;;;;43634:68;43717:21;43730:7;43717:12;:21::i;:::-;43713:58;;43747:24;;;;;;;;;;;;;;43713:58;43786:34;43807:3;43812:7;43786:20;:34::i;:::-;43782:68;;43829:21;;;;;;;;;;;;;;43782:68;43865:22;43879:7;43865:13;:22::i;:::-;43861:48;;43896:13;;;;;;;;;;;;;;43861:48;43936:17;43945:7;43936:8;:17::i;:::-;43923:9;:30;43920:58;;43962:16;;;;;;;;;;;;;;43920:58;43999:17;:15;:17::i;:::-;44027:31;44045:3;44050:7;44027:17;:31::i;:::-;44069:19;44075:3;44080:7;44069:5;:19::i;:::-;43341:755;;;;:::o;36984:94::-;37031:7;37058:12;;37051:19;;36984:94;:::o;40304:239::-;26087:18;:16;:18::i;:::-;40407:7:::1;40400:4;:14;40397:44;;;40423:18;;;;;;;;;;;;;;40397:44;40456:6;40452:84;40470:4;:11;40466:1;:15;40452:84;;;40504:20;40510:4;40515:1;40510:7;;;;;;;;:::i;:::-;;;;;;;;40519:4;40504:5;:20::i;:::-;40483:3;;;;;;;40452:84;;;;40304:239:::0;;:::o;26543:179::-;26604:4;26625:11;;;;;;;;;;;26621:32;;26646:4;26639:11;;;;26621:32;26703:11;:9;:11::i;:::-;26692:7;26670:19;:17;:19::i;:::-;:29;;;;:::i;:::-;:44;;26663:51;;26543:179;;;;:::o;26945:172::-;26087:18;:16;:18::i;:::-;27031:19:::1;:17;:19::i;:::-;27021:7;:29;27018:66;;;27059:25;;;;;;;;;;;;;;27018:66;27102:7;27095:4;:14;;;;26945:172:::0;:::o;34102:99::-;26087:18;:16;:18::i;:::-;34190:5:::1;34167:20;;:28;;;;;;;;;;;;;;;;;;34102:99::o:0;26430:105::-;26087:18;:16;:18::i;:::-;26517:10:::1;26503:11;;:24;;;;;;;;;;;;;;;;;;26430:105:::0;:::o;35444:113::-;26087:18;:16;:18::i;:::-;35539:10:::1;35521:15;;:28;;;;;;;;;;;;;;;;;;35444:113:::0;:::o;41785:1274::-;41906:7;41896;:17;41893:47;;;41922:18;;;;;;;;;;;;;;41893:47;41955:22;41969:7;41955:13;:22::i;:::-;41951:48;;41986:13;;;;;;;;;;;;;;41951:48;42014:14;:12;:14::i;:::-;42010:48;;42037:21;;;;;;;;;;;;;;42010:48;42073:21;42086:7;42073:12;:21::i;:::-;42069:58;;42103:24;;;;;;;;;;;;;;42069:58;42142:34;42163:3;42168:7;42142:20;:34::i;:::-;42138:68;;42185:21;;;;;;;;;;;;;;42138:68;42233:12;;42220:9;:25;42217:53;;42254:16;;;;;;;;;;;;;;42217:53;42333:47;42360:19;42333:26;:47::i;:::-;42329:83;;42389:23;;;;;;;;;;;;;;42329:83;42423:27;42497:7;42453:41;42474:19;42453:20;:41::i;:::-;:51;;;;:::i;:::-;42423:81;;42515:19;42544;42515:49;;42610:19;42580:12;:22;;;42603:3;42580:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;42577:87;;;42638:26;;;;;;;;;;;;;;42577:87;42723:19;42678:12;:22;;;42701:3;42714:4;42678:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:64;42675:104;;;42751:28;;;;;;;;;;;;;;42675:104;42790:21;42814:12;:25;;;42840:3;42853:4;42860:19;42814:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42790:90;;42895:16;42891:50;;42920:21;;;;;;;;;;;;;;42891:50;42962:17;:15;:17::i;:::-;42990:31;43008:3;43013:7;42990:17;:31::i;:::-;43032:19;43038:3;43043:7;43032:5;:19::i;:::-;41882:1177;;;41785:1274;;;:::o;33669:163::-;26087:18;:16;:18::i;:::-;33821:5:::1;33767:21;:42;33789:19;33767:42;;;;;;;;;;;;;;;:51;;;:59;;;;;;;;;;;;;;;;;;33669:163:::0;:::o;31975:253::-;32054:7;32074:47;32101:19;32074:26;:47::i;:::-;32070:83;;32130:23;;;;;;;;;;;;;;32070:83;32167:21;:42;32189:19;32167:42;;;;;;;;;;;;;;;:55;;;32160:62;;31975:253;;;:::o;32594:304::-;26087:18;:16;:18::i;:::-;32797:9:::1;32743:21;:42;32765:19;32743:42;;;;;;;;;;;;;;;:51;;;:63;;;;;;;;;;;;;;;;;;32871:21;32813;:42;32835:19;32813:42;;;;;;;;;;;;;;;:55;;:79;;;;32594:304:::0;;;:::o;11718:151::-;11807:7;11834:11;:18;11846:5;11834:18;;;;;;;;;;;;;;;:27;11853:7;11834:27;;;;;;;;;;;;;;;;11827:34;;11718:151;;;;:::o;25197:215::-;22677:13;:11;:13::i;:::-;25286:1:::1;25266:22;;:8;:22;;::::0;25263:55:::1;;25297:21;;;;;;;;;;;;;;25263:55;25329:16;25336:8;25329:6;:16::i;:::-;25325:48;;25354:19;;;;;;;;;;;;;;25325:48;25401:5;25384:4;:14;25389:8;25384:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;25197:215:::0;:::o;40082:214::-;26087:18;:16;:18::i;:::-;40171:7:::1;40164:4;:14;40161:44;;;40187:18;;;;;;;;;;;;;;40161:44;40220:19;40234:4;40220:13;:19::i;:::-;40216:45;;40248:13;;;;;;;;;;;;;;40216:45;40272:16;40278:3;40283:4;40272:5;:16::i;:::-;40082:214:::0;;:::o;28439:37::-;;;;;;;;;;;;;:::o;27850:217::-;27905:7;27933;27924:6;:16;27921:47;;;27949:19;;;;;;;;;;;;;;27921:47;27975:18;28005:7;27996:6;:16;;;;:::i;:::-;27975:37;;28049:12;;28035:10;28027:5;;:18;;;;:::i;:::-;28026:35;;;;:::i;:::-;28019:42;;;27850:217;;;:::o;23697:183::-;22677:13;:11;:13::i;:::-;23801:1:::1;23781:22;;:8;:22;;::::0;23778:55:::1;;23812:21;;;;;;;;;;;;;;23778:55;23844:28;23863:8;23844:18;:28::i;:::-;23697:183:::0;:::o;27353:44::-;;;;:::o;36735:102::-;36788:4;36812:17;;;;;;;;;;;36805:24;;36735:102;:::o;38809:128::-;26087:18;:16;:18::i;:::-;38892:4:::1;38872:17;;:24;;;;;;;;;;;;;;;;;;38924:5;38907:14;;:22;;;;;;;;;;;;;;;;;;38809:128::o:0;37710:113::-;37771:7;37798;:17;37806:8;37798:17;;;;;;;;;;;;;;;;37791:24;;37710:113;;;:::o;3870:98::-;3923:7;3950:10;3943:17;;3870:98;:::o;17947:350::-;18095:1;18078:19;;:5;:19;;;18075:52;;18106:21;;;;;;;;;;;;;;18075:52;18160:1;18141:21;;:7;:21;;;18138:54;;18171:21;;;;;;;;;;;;;;18138:54;18235:6;18205:11;:18;18217:5;18205:18;;;;;;;;;;;;;;;:27;18224:7;18205:27;;;;;;;;;;;;;;;:36;;;;18273:7;18257:32;;18266:5;18257:32;;;18282:6;18257:32;;;;;;:::i;:::-;;;;;;;;17947:350;;;:::o;28073:89::-;27440:42;28116:26;;:40;28143:12;;28116:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28073:89::o;38127:154::-;38255:7;38234;:17;38242:8;38234:17;;;;;;;;;;;;;;;;:28;;;;;;;;;;;38127:154;;:::o;16220:388::-;16318:1;16299:21;;:7;:21;;;16296:54;;16329:21;;;;;;;;;;;;;;16296:54;16363:49;16392:1;16396:7;16405:6;16363:20;:49::i;:::-;16441:6;16425:12;;:22;;;;;;;:::i;:::-;;;;;;;;16480:6;16458:9;:18;16468:7;16458:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;16523:7;16502:37;;16519:1;16502:37;;;16532:6;16502:37;;;;;;:::i;:::-;;;;;;;;16552:48;16580:1;16584:7;16593:6;16552:19;:48::i;:::-;16220:388;;:::o;18588:448::-;18723:24;18750:25;18760:5;18767:7;18750:9;:25::i;:::-;18723:52;;18810:17;18790:16;:37;18786:243;;18866:6;18847:16;:25;18844:63;;;18881:26;;;;;;;;;;;;;;18844:63;18951:51;18960:5;18967:7;18995:6;18976:16;:25;18951:8;:51::i;:::-;18786:243;18712:324;18588:448;;;:::o;15308:625::-;15450:1;15434:18;;:4;:18;;;15431:51;;15461:21;;;;;;;;;;;;;;15431:51;15510:1;15496:16;;:2;:16;;;15493:49;;15521:21;;;;;;;;;;;;;;15493:49;15555:38;15576:4;15582:2;15586:6;15555:20;:38::i;:::-;15606:19;15628:9;:15;15638:4;15628:15;;;;;;;;;;;;;;;;15606:37;;15671:6;15657:11;:20;15654:58;;;15686:26;;;;;;;;;;;;;;15654:58;15780:6;15766:11;:20;15748:9;:15;15758:4;15748:15;;;;;;;;;;;;;;;:38;;;;15825:6;15808:9;:13;15818:2;15808:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;15864:2;15849:26;;15858:4;15849:26;;;15868:6;15849:26;;;;;;:::i;:::-;;;;;;;;15888:37;15908:4;15914:2;15918:6;15888:19;:37::i;:::-;15420:513;15308:625;;;:::o;25832:215::-;25880:13;25907:12;:10;:12::i;:::-;25896:23;;:7;:5;:7::i;:::-;:23;;;25880:39;;25926:12;25941:20;25948:12;:10;:12::i;:::-;25941:6;:20::i;:::-;25926:35;;25976:8;:19;;;;25988:7;25976:19;25968:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25873:174;;25832:215::o;1733:190::-;1858:4;1911;1882:25;1895:5;1902:4;1882:12;:25::i;:::-;:33;1875:40;;1733:190;;;;;:::o;16941:568::-;17039:1;17020:21;;:7;:21;;;17017:54;;17050:21;;;;;;;;;;;;;;17017:54;17084:49;17105:7;17122:1;17126:6;17084:20;:49::i;:::-;17146:22;17171:9;:18;17181:7;17171:18;;;;;;;;;;;;;;;;17146:43;;17220:6;17203:14;:23;17200:61;;;17235:26;;;;;;;;;;;;;;17200:61;17335:6;17318:14;:23;17297:9;:18;17307:7;17297:18;;;;;;;;;;;;;;;:44;;;;17379:6;17363:12;;:22;;;;;;;:::i;:::-;;;;;;;;17429:1;17403:37;;17412:7;17403:37;;;17433:6;17403:37;;;;;;:::i;:::-;;;;;;;;17453:48;17473:7;17490:1;17494:6;17453:19;:48::i;:::-;17006:503;16941:568;;:::o;22956:132::-;23031:12;:10;:12::i;:::-;23020:23;;:7;:5;:7::i;:::-;:23;;;23012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22956:132::o;24040:191::-;24114:16;24133:6;;;;;;;;;;;24114:25;;24159:8;24150:6;;:17;;;;;;;;;;;;;;;;;;24214:8;24183:40;;24204:8;24183:40;;;;;;;;;;;;24103:128;24040:191;:::o;30313:237::-;30373:6;30369:176;30387:19;;30383:1;:23;30369:176;;;30427:108;30454:16;30471:1;30454:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30519:3;30501:11;30513:1;30501:14;;;;;;;;:::i;:::-;;;;;;;;;;30491:7;:24;;;;:::i;:::-;30490:32;;;;:::i;:::-;30427:10;:108::i;:::-;30408:3;;;;;;;30369:176;;;;30313:237;:::o;19636:125::-;;;;:::o;20365:124::-;;;;:::o;2277:675::-;2360:7;2380:20;2403:4;2380:27;;2423:9;2418:497;2442:5;:12;2438:1;:16;2418:497;;;2476:20;2499:5;2505:1;2499:8;;;;;;;;:::i;:::-;;;;;;;;2476:31;;2542:12;2526;:28;2522:382;;2669:42;2684:12;2698;2669:14;:42::i;:::-;2654:57;;2522:382;;;2846:42;2861:12;2875;2846:14;:42::i;:::-;2831:57;;2522:382;2461:454;2456:3;;;;;;;2418:497;;;;2932:12;2925:19;;;2277:675;;;;:::o;30558:175::-;30631:12;30649:8;:13;;30670:7;30649:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30630:52;;;30699:7;30691:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;30621:112;30558:175;;:::o;2960:224::-;3028:13;3091:1;3085:4;3078:15;3120:1;3114:4;3107:15;3161:4;3155;3145:21;3136:30;;2960:224;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1242:75::-;1275:6;1308:2;1302:9;1292:19;;1242:75;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:118::-;3426:24;3444:5;3426:24;:::i;:::-;3421:3;3414:37;3339:118;;:::o;3463:222::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3607:71;3675:1;3664:9;3660:17;3651:6;3607:71;:::i;:::-;3463:222;;;;:::o;3691:117::-;3800:1;3797;3790:12;3814:117;3923:1;3920;3913:12;3937:117;4046:1;4043;4036:12;4077:568;4150:8;4160:6;4210:3;4203:4;4195:6;4191:17;4187:27;4177:122;;4218:79;;:::i;:::-;4177:122;4331:6;4318:20;4308:30;;4361:18;4353:6;4350:30;4347:117;;;4383:79;;:::i;:::-;4347:117;4497:4;4489:6;4485:17;4473:29;;4551:3;4543:4;4535:6;4531:17;4521:8;4517:32;4514:41;4511:128;;;4558:79;;:::i;:::-;4511:128;4077:568;;;;;:::o;4651:995::-;4764:6;4772;4780;4788;4796;4845:3;4833:9;4824:7;4820:23;4816:33;4813:120;;;4852:79;;:::i;:::-;4813:120;4972:1;4997:53;5042:7;5033:6;5022:9;5018:22;4997:53;:::i;:::-;4987:63;;4943:117;5099:2;5125:53;5170:7;5161:6;5150:9;5146:22;5125:53;:::i;:::-;5115:63;;5070:118;5255:2;5244:9;5240:18;5227:32;5286:18;5278:6;5275:30;5272:117;;;5308:79;;:::i;:::-;5272:117;5421:80;5493:7;5484:6;5473:9;5469:22;5421:80;:::i;:::-;5403:98;;;;5198:313;5550:2;5576:53;5621:7;5612:6;5601:9;5597:22;5576:53;:::i;:::-;5566:63;;5521:118;4651:995;;;;;;;;:::o;5652:619::-;5729:6;5737;5745;5794:2;5782:9;5773:7;5769:23;5765:32;5762:119;;;5800:79;;:::i;:::-;5762:119;5920:1;5945:53;5990:7;5981:6;5970:9;5966:22;5945:53;:::i;:::-;5935:63;;5891:117;6047:2;6073:53;6118:7;6109:6;6098:9;6094:22;6073:53;:::i;:::-;6063:63;;6018:118;6175:2;6201:53;6246:7;6237:6;6226:9;6222:22;6201:53;:::i;:::-;6191:63;;6146:118;5652:619;;;;;:::o;6277:329::-;6336:6;6385:2;6373:9;6364:7;6360:23;6356:32;6353:119;;;6391:79;;:::i;:::-;6353:119;6511:1;6536:53;6581:7;6572:6;6561:9;6557:22;6536:53;:::i;:::-;6526:63;;6482:117;6277:329;;;;:::o;6612:180::-;6660:77;6657:1;6650:88;6757:4;6754:1;6747:15;6781:4;6778:1;6771:15;6798:281;6881:27;6903:4;6881:27;:::i;:::-;6873:6;6869:40;7011:6;6999:10;6996:22;6975:18;6963:10;6960:34;6957:62;6954:88;;;7022:18;;:::i;:::-;6954:88;7062:10;7058:2;7051:22;6841:238;6798:281;;:::o;7085:129::-;7119:6;7146:20;;:::i;:::-;7136:30;;7175:33;7203:4;7195:6;7175:33;:::i;:::-;7085:129;;;:::o;7220:311::-;7297:4;7387:18;7379:6;7376:30;7373:56;;;7409:18;;:::i;:::-;7373:56;7459:4;7451:6;7447:17;7439:25;;7519:4;7513;7509:15;7501:23;;7220:311;;;:::o;7554:710::-;7650:5;7675:81;7691:64;7748:6;7691:64;:::i;:::-;7675:81;:::i;:::-;7666:90;;7776:5;7805:6;7798:5;7791:21;7839:4;7832:5;7828:16;7821:23;;7892:4;7884:6;7880:17;7872:6;7868:30;7921:3;7913:6;7910:15;7907:122;;;7940:79;;:::i;:::-;7907:122;8055:6;8038:220;8072:6;8067:3;8064:15;8038:220;;;8147:3;8176:37;8209:3;8197:10;8176:37;:::i;:::-;8171:3;8164:50;8243:4;8238:3;8234:14;8227:21;;8114:144;8098:4;8093:3;8089:14;8082:21;;8038:220;;;8042:21;7656:608;;7554:710;;;;;:::o;8287:370::-;8358:5;8407:3;8400:4;8392:6;8388:17;8384:27;8374:122;;8415:79;;:::i;:::-;8374:122;8532:6;8519:20;8557:94;8647:3;8639:6;8632:4;8624:6;8620:17;8557:94;:::i;:::-;8548:103;;8364:293;8287:370;;;;:::o;8663:311::-;8740:4;8830:18;8822:6;8819:30;8816:56;;;8852:18;;:::i;:::-;8816:56;8902:4;8894:6;8890:17;8882:25;;8962:4;8956;8952:15;8944:23;;8663:311;;;:::o;8997:710::-;9093:5;9118:81;9134:64;9191:6;9134:64;:::i;:::-;9118:81;:::i;:::-;9109:90;;9219:5;9248:6;9241:5;9234:21;9282:4;9275:5;9271:16;9264:23;;9335:4;9327:6;9323:17;9315:6;9311:30;9364:3;9356:6;9353:15;9350:122;;;9383:79;;:::i;:::-;9350:122;9498:6;9481:220;9515:6;9510:3;9507:15;9481:220;;;9590:3;9619:37;9652:3;9640:10;9619:37;:::i;:::-;9614:3;9607:50;9686:4;9681:3;9677:14;9670:21;;9557:144;9541:4;9536:3;9532:14;9525:21;;9481:220;;;9485:21;9099:608;;8997:710;;;;;:::o;9730:370::-;9801:5;9850:3;9843:4;9835:6;9831:17;9827:27;9817:122;;9858:79;;:::i;:::-;9817:122;9975:6;9962:20;10000:94;10090:3;10082:6;10075:4;10067:6;10063:17;10000:94;:::i;:::-;9991:103;;9807:293;9730:370;;;;:::o;10106:894::-;10224:6;10232;10281:2;10269:9;10260:7;10256:23;10252:32;10249:119;;;10287:79;;:::i;:::-;10249:119;10435:1;10424:9;10420:17;10407:31;10465:18;10457:6;10454:30;10451:117;;;10487:79;;:::i;:::-;10451:117;10592:78;10662:7;10653:6;10642:9;10638:22;10592:78;:::i;:::-;10582:88;;10378:302;10747:2;10736:9;10732:18;10719:32;10778:18;10770:6;10767:30;10764:117;;;10800:79;;:::i;:::-;10764:117;10905:78;10975:7;10966:6;10955:9;10951:22;10905:78;:::i;:::-;10895:88;;10690:303;10106:894;;;;;:::o;11006:77::-;11043:7;11072:5;11061:16;;11006:77;;;:::o;11089:118::-;11176:24;11194:5;11176:24;:::i;:::-;11171:3;11164:37;11089:118;;:::o;11213:222::-;11306:4;11344:2;11333:9;11329:18;11321:26;;11357:71;11425:1;11414:9;11410:17;11401:6;11357:71;:::i;:::-;11213:222;;;;:::o;11441:86::-;11476:7;11516:4;11509:5;11505:16;11494:27;;11441:86;;;:::o;11533:112::-;11616:22;11632:5;11616:22;:::i;:::-;11611:3;11604:35;11533:112;;:::o;11651:214::-;11740:4;11778:2;11767:9;11763:18;11755:26;;11791:67;11855:1;11844:9;11840:17;11831:6;11791:67;:::i;:::-;11651:214;;;;:::o;11871:704::-;11966:6;11974;11982;12031:2;12019:9;12010:7;12006:23;12002:32;11999:119;;;12037:79;;:::i;:::-;11999:119;12157:1;12182:53;12227:7;12218:6;12207:9;12203:22;12182:53;:::i;:::-;12172:63;;12128:117;12312:2;12301:9;12297:18;12284:32;12343:18;12335:6;12332:30;12329:117;;;12365:79;;:::i;:::-;12329:117;12478:80;12550:7;12541:6;12530:9;12526:22;12478:80;:::i;:::-;12460:98;;;;12255:313;11871:704;;;;;:::o;12581:329::-;12640:6;12689:2;12677:9;12668:7;12664:23;12660:32;12657:119;;;12695:79;;:::i;:::-;12657:119;12815:1;12840:53;12885:7;12876:6;12865:9;12861:22;12840:53;:::i;:::-;12830:63;;12786:117;12581:329;;;;:::o;12916:122::-;12989:24;13007:5;12989:24;:::i;:::-;12982:5;12979:35;12969:63;;13028:1;13025;13018:12;12969:63;12916:122;:::o;13044:139::-;13090:5;13128:6;13115:20;13106:29;;13144:33;13171:5;13144:33;:::i;:::-;13044:139;;;;:::o;13189:329::-;13248:6;13297:2;13285:9;13276:7;13272:23;13268:32;13265:119;;;13303:79;;:::i;:::-;13265:119;13423:1;13448:53;13493:7;13484:6;13473:9;13469:22;13448:53;:::i;:::-;13438:63;;13394:117;13189:329;;;;:::o;13524:118::-;13611:24;13629:5;13611:24;:::i;:::-;13606:3;13599:37;13524:118;;:::o;13648:222::-;13741:4;13779:2;13768:9;13764:18;13756:26;;13792:71;13860:1;13849:9;13845:17;13836:6;13792:71;:::i;:::-;13648:222;;;;:::o;13876:116::-;13946:21;13961:5;13946:21;:::i;:::-;13939:5;13936:32;13926:60;;13982:1;13979;13972:12;13926:60;13876:116;:::o;13998:133::-;14041:5;14079:6;14066:20;14057:29;;14095:30;14119:5;14095:30;:::i;:::-;13998:133;;;;:::o;14137:323::-;14193:6;14242:2;14230:9;14221:7;14217:23;14213:32;14210:119;;;14248:79;;:::i;:::-;14210:119;14368:1;14393:50;14435:7;14426:6;14415:9;14411:22;14393:50;:::i;:::-;14383:60;;14339:114;14137:323;;;;:::o;14466:849::-;14570:6;14578;14586;14594;14643:2;14631:9;14622:7;14618:23;14614:32;14611:119;;;14649:79;;:::i;:::-;14611:119;14769:1;14794:53;14839:7;14830:6;14819:9;14815:22;14794:53;:::i;:::-;14784:63;;14740:117;14896:2;14922:53;14967:7;14958:6;14947:9;14943:22;14922:53;:::i;:::-;14912:63;;14867:118;15052:2;15041:9;15037:18;15024:32;15083:18;15075:6;15072:30;15069:117;;;15105:79;;:::i;:::-;15069:117;15218:80;15290:7;15281:6;15270:9;15266:22;15218:80;:::i;:::-;15200:98;;;;14995:313;14466:849;;;;;;;:::o;15321:684::-;15414:6;15422;15471:2;15459:9;15450:7;15446:23;15442:32;15439:119;;;15477:79;;:::i;:::-;15439:119;15625:1;15614:9;15610:17;15597:31;15655:18;15647:6;15644:30;15641:117;;;15677:79;;:::i;:::-;15641:117;15782:78;15852:7;15843:6;15832:9;15828:22;15782:78;:::i;:::-;15772:88;;15568:302;15909:2;15935:53;15980:7;15971:6;15960:9;15956:22;15935:53;:::i;:::-;15925:63;;15880:118;15321:684;;;;;:::o;16011:619::-;16088:6;16096;16104;16153:2;16141:9;16132:7;16128:23;16124:32;16121:119;;;16159:79;;:::i;:::-;16121:119;16279:1;16304:53;16349:7;16340:6;16329:9;16325:22;16304:53;:::i;:::-;16294:63;;16250:117;16406:2;16432:53;16477:7;16468:6;16457:9;16453:22;16432:53;:::i;:::-;16422:63;;16377:118;16534:2;16560:53;16605:7;16596:6;16585:9;16581:22;16560:53;:::i;:::-;16550:63;;16505:118;16011:619;;;;;:::o;16636:613::-;16710:6;16718;16726;16775:2;16763:9;16754:7;16750:23;16746:32;16743:119;;;16781:79;;:::i;:::-;16743:119;16901:1;16926:53;16971:7;16962:6;16951:9;16947:22;16926:53;:::i;:::-;16916:63;;16872:117;17028:2;17054:50;17096:7;17087:6;17076:9;17072:22;17054:50;:::i;:::-;17044:60;;16999:115;17153:2;17179:53;17224:7;17215:6;17204:9;17200:22;17179:53;:::i;:::-;17169:63;;17124:118;16636:613;;;;;:::o;17255:474::-;17323:6;17331;17380:2;17368:9;17359:7;17355:23;17351:32;17348:119;;;17386:79;;:::i;:::-;17348:119;17506:1;17531:53;17576:7;17567:6;17556:9;17552:22;17531:53;:::i;:::-;17521:63;;17477:117;17633:2;17659:53;17704:7;17695:6;17684:9;17680:22;17659:53;:::i;:::-;17649:63;;17604:118;17255:474;;;;;:::o;17735:180::-;17783:77;17780:1;17773:88;17880:4;17877:1;17870:15;17904:4;17901:1;17894:15;17921:320;17965:6;18002:1;17996:4;17992:12;17982:22;;18049:1;18043:4;18039:12;18070:18;18060:81;;18126:4;18118:6;18114:17;18104:27;;18060:81;18188:2;18180:6;18177:14;18157:18;18154:38;18151:84;;18207:18;;:::i;:::-;18151:84;17972:269;17921:320;;;:::o;18247:180::-;18295:77;18292:1;18285:88;18392:4;18389:1;18382:15;18416:4;18413:1;18406:15;18433:191;18473:3;18492:20;18510:1;18492:20;:::i;:::-;18487:25;;18526:20;18544:1;18526:20;:::i;:::-;18521:25;;18569:1;18566;18562:9;18555:16;;18590:3;18587:1;18584:10;18581:36;;;18597:18;;:::i;:::-;18581:36;18433:191;;;;:::o;18630:410::-;18670:7;18693:20;18711:1;18693:20;:::i;:::-;18688:25;;18727:20;18745:1;18727:20;:::i;:::-;18722:25;;18782:1;18779;18775:9;18804:30;18822:11;18804:30;:::i;:::-;18793:41;;18983:1;18974:7;18970:15;18967:1;18964:22;18944:1;18937:9;18917:83;18894:139;;19013:18;;:::i;:::-;18894:139;18678:362;18630:410;;;;:::o;19046:143::-;19103:5;19134:6;19128:13;19119:22;;19150:33;19177:5;19150:33;:::i;:::-;19046:143;;;;:::o;19195:351::-;19265:6;19314:2;19302:9;19293:7;19289:23;19285:32;19282:119;;;19320:79;;:::i;:::-;19282:119;19440:1;19465:64;19521:7;19512:6;19501:9;19497:22;19465:64;:::i;:::-;19455:74;;19411:128;19195:351;;;;:::o;19552:332::-;19673:4;19711:2;19700:9;19696:18;19688:26;;19724:71;19792:1;19781:9;19777:17;19768:6;19724:71;:::i;:::-;19805:72;19873:2;19862:9;19858:18;19849:6;19805:72;:::i;:::-;19552:332;;;;;:::o;19890:442::-;20039:4;20077:2;20066:9;20062:18;20054:26;;20090:71;20158:1;20147:9;20143:17;20134:6;20090:71;:::i;:::-;20171:72;20239:2;20228:9;20224:18;20215:6;20171:72;:::i;:::-;20253;20321:2;20310:9;20306:18;20297:6;20253:72;:::i;:::-;19890:442;;;;;;:::o;20338:137::-;20392:5;20423:6;20417:13;20408:22;;20439:30;20463:5;20439:30;:::i;:::-;20338:137;;;;:::o;20481:345::-;20548:6;20597:2;20585:9;20576:7;20572:23;20568:32;20565:119;;;20603:79;;:::i;:::-;20565:119;20723:1;20748:61;20801:7;20792:6;20781:9;20777:22;20748:61;:::i;:::-;20738:71;;20694:125;20481:345;;;;:::o;20832:94::-;20865:8;20913:5;20909:2;20905:14;20884:35;;20832:94;;;:::o;20932:::-;20971:7;21000:20;21014:5;21000:20;:::i;:::-;20989:31;;20932:94;;;:::o;21032:100::-;21071:7;21100:26;21120:5;21100:26;:::i;:::-;21089:37;;21032:100;;;:::o;21138:157::-;21243:45;21263:24;21281:5;21263:24;:::i;:::-;21243:45;:::i;:::-;21238:3;21231:58;21138:157;;:::o;21301:256::-;21413:3;21428:75;21499:3;21490:6;21428:75;:::i;:::-;21528:2;21523:3;21519:12;21512:19;;21548:3;21541:10;;21301:256;;;;:::o;21563:332::-;21684:4;21722:2;21711:9;21707:18;21699:26;;21735:71;21803:1;21792:9;21788:17;21779:6;21735:71;:::i;:::-;21816:72;21884:2;21873:9;21869:18;21860:6;21816:72;:::i;:::-;21563:332;;;;;:::o;21901:180::-;21949:77;21946:1;21939:88;22046:4;22043:1;22036:15;22070:4;22067:1;22060:15;22087:180;22135:77;22132:1;22125:88;22232:4;22229:1;22222:15;22256:4;22253:1;22246:15;22273:185;22313:1;22330:20;22348:1;22330:20;:::i;:::-;22325:25;;22364:20;22382:1;22364:20;:::i;:::-;22359:25;;22403:1;22393:35;;22408:18;;:::i;:::-;22393:35;22450:1;22447;22443:9;22438:14;;22273:185;;;;:::o;22464:228::-;22604:34;22600:1;22592:6;22588:14;22581:58;22673:11;22668:2;22660:6;22656:15;22649:36;22464:228;:::o;22698:366::-;22840:3;22861:67;22925:2;22920:3;22861:67;:::i;:::-;22854:74;;22937:93;23026:3;22937:93;:::i;:::-;23055:2;23050:3;23046:12;23039:19;;22698:366;;;:::o;23070:419::-;23236:4;23274:2;23263:9;23259:18;23251:26;;23323:9;23317:4;23313:20;23309:1;23298:9;23294:17;23287:47;23351:131;23477:4;23351:131;:::i;:::-;23343:139;;23070:419;;;:::o;23495:194::-;23535:4;23555:20;23573:1;23555:20;:::i;:::-;23550:25;;23589:20;23607:1;23589:20;:::i;:::-;23584:25;;23633:1;23630;23626:9;23618:17;;23657:1;23651:4;23648:11;23645:37;;;23662:18;;:::i;:::-;23645:37;23495:194;;;;:::o;23695:182::-;23835:34;23831:1;23823:6;23819:14;23812:58;23695:182;:::o;23883:366::-;24025:3;24046:67;24110:2;24105:3;24046:67;:::i;:::-;24039:74;;24122:93;24211:3;24122:93;:::i;:::-;24240:2;24235:3;24231:12;24224:19;;23883:366;;;:::o;24255:419::-;24421:4;24459:2;24448:9;24444:18;24436:26;;24508:9;24502:4;24498:20;24494:1;24483:9;24479:17;24472:47;24536:131;24662:4;24536:131;:::i;:::-;24528:139;;24255:419;;;:::o;24680:147::-;24781:11;24818:3;24803:18;;24680:147;;;;:::o;24833:114::-;;:::o;24953:398::-;25112:3;25133:83;25214:1;25209:3;25133:83;:::i;:::-;25126:90;;25225:93;25314:3;25225:93;:::i;:::-;25343:1;25338:3;25334:11;25327:18;;24953:398;;;:::o;25357:379::-;25541:3;25563:147;25706:3;25563:147;:::i;:::-;25556:154;;25727:3;25720:10;;25357:379;;;:::o;25742:166::-;25882:18;25878:1;25870:6;25866:14;25859:42;25742:166;:::o;25914:366::-;26056:3;26077:67;26141:2;26136:3;26077:67;:::i;:::-;26070:74;;26153:93;26242:3;26153:93;:::i;:::-;26271:2;26266:3;26262:12;26255:19;;25914:366;;;:::o;26286:419::-;26452:4;26490:2;26479:9;26475:18;26467:26;;26539:9;26533:4;26529:20;26525:1;26514:9;26510:17;26503:47;26567:131;26693:4;26567:131;:::i;:::-;26559:139;;26286:419;;;:::o
Swarm Source
ipfs://e6b6c7576c5972e13026d71c6ef34c4d0a37773e514f7b14d3adf0851ea3edc5
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.