ERC-20
Overview
Max Total Supply
1,000,000,000 EP
Holders
83
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000001526037 EPValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EP
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BSD-3-Clause pragma solidity ^0.8.10; import "./utils/ECDSA.sol"; contract EP { /// @notice EIP-20 token name for this token string public constant name = "ErcProtocol"; /// @notice EIP-20 token symbol for this token string public constant symbol = "EP"; /// @notice EIP-20 token decimals for this token uint8 public constant decimals = 18; /// @notice Total number of tokens in circulation uint public totalSupply = 1_000_000_000e18; // 1B EP /// @notice Allowance amounts on behalf of others mapping (address => mapping (address => uint96)) internal allowances; /// @notice Official record of token balances for each account mapping (address => uint96) internal balances; /// @notice A record of each accounts delegate mapping (address => address) public delegates; /// @notice A checkpoint for marking number of votes from a given block struct Checkpoint { uint32 fromBlock; uint96 votes; } /// @notice Address which may mint new tokens address public minter; /// @notice The timestamp after which minting may occur uint public mintingAllowedAfter; /// @notice Minimum time between mints uint32 public constant MINIMUM_TIME_BETWEEN_MINTS = 1 days * 365; /// @notice Cap on the percentage of totalSupply that can be minted at each mint uint8 public constant MINT_CAP = 2; /// @notice A record of votes checkpoints for each account, by index mapping (address => mapping (uint32 => Checkpoint)) public checkpoints; /// @notice The number of checkpoints for each account mapping (address => uint32) public numCheckpoints; /// @notice The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); /// @notice The EIP-712 typehash for the delegation struct used by the contract bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); /// @notice A record of states for signing / validating signatures mapping (address => uint) public nonces; /// @notice An event thats emitted when an account changes its delegate event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate); /// @notice An event thats emitted when a delegate account's vote balance changes event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance); /// @notice The standard EIP-20 transfer event event Transfer(address indexed from, address indexed to, uint256 amount); /// @notice The standard EIP-20 approval event event Approval(address indexed owner, address indexed spender, uint256 amount); /// @notice An event thats emitted when the minter address is changed event MinterChanged(address minter, address newMinter); /** * @notice Construct a new EP token * @param account The initial account to grant all the tokens */ constructor(address account, address minter_, uint mintingAllowedAfter_) { require(minter_ != address(0), "ep::constructor: minter can not be zero address"); require(mintingAllowedAfter_ >= block.timestamp, "ep::constructor: minting can only begin after deployment"); balances[account] = uint96(totalSupply); emit Transfer(address(0), account, totalSupply); minter = minter_; emit MinterChanged(address(0), minter); mintingAllowedAfter = mintingAllowedAfter_; } /** * @notice Change the minter address * @param minter_ The address of the new minter */ function setMinter(address minter_) external { require(minter_ != address(0), "ep::constructor: minter can not be zero address"); require(msg.sender == minter, "ep::setMinter: only the minter can change the minter address"); emit MinterChanged(minter, minter_); minter = minter_; } /** * @notice Mint new tokens * @param dst The address of the destination account * @param rawAmount The number of tokens to be minted */ function mint(address dst, uint rawAmount) external { require(msg.sender == minter, "ep::mint: only the minter can mint"); require(block.timestamp >= mintingAllowedAfter, "ep::mint: minting not allowed yet"); require(dst != address(0), "ep::mint: cannot transfer to the zero address"); // record the mint mintingAllowedAfter = block.timestamp + MINIMUM_TIME_BETWEEN_MINTS; // mint the amount uint96 amount = safe96(rawAmount, "ep::mint: amount exceeds 96 bits"); require(amount <= totalSupply * MINT_CAP / 100, "ep::mint: exceeded mint cap"); totalSupply = safe96(totalSupply + amount, "ep::mint: totalSupply exceeds 96 bits"); // transfer the amount to the recipient balances[dst] = add96(balances[dst], amount, "ep::mint: transfer amount overflows"); emit Transfer(address(0), dst, amount); // move delegates _moveDelegates(address(0), delegates[dst], amount); } /** * @notice Get the number of tokens `spender` is approved to spend on behalf of `account` * @param account The address of the account holding the funds * @param spender The address of the account spending the funds * @return The number of tokens approved */ function allowance(address account, address spender) external view returns (uint) { return allowances[account][spender]; } /** * @notice Approve `spender` to transfer up to `amount` from `src` * @dev This will overwrite the approval amount for `spender` * and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve) * @param spender The address of the account which may transfer tokens * @param rawAmount The number of tokens that are approved (2^256-1 means infinite) * @return Whether or not the approval succeeded */ function approve(address spender, uint rawAmount) external returns (bool) { uint96 amount; if (rawAmount == type(uint).max) { amount = type(uint96).max; } else { amount = safe96(rawAmount, "ep::approve: amount exceeds 96 bits"); } allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } /** * @notice Get the number of tokens held by the `account` * @param account The address of the account to get the balance of * @return The number of tokens held */ function balanceOf(address account) external view returns (uint) { return balances[account]; } /** * @notice Transfer `amount` tokens from `msg.sender` to `dst` * @param dst The address of the destination account * @param rawAmount The number of tokens to transfer * @return Whether or not the transfer succeeded */ function transfer(address dst, uint rawAmount) external returns (bool) { uint96 amount = safe96(rawAmount, "ep::transfer: amount exceeds 96 bits"); _transferTokens(msg.sender, dst, amount); return true; } /** * @notice Transfer `amount` tokens from `src` to `dst` * @param src The address of the source account * @param dst The address of the destination account * @param rawAmount The number of tokens to transfer * @return Whether or not the transfer succeeded */ function transferFrom(address src, address dst, uint rawAmount) external returns (bool) { address spender = msg.sender; uint96 spenderAllowance = allowances[src][spender]; uint96 amount = safe96(rawAmount, "ep::transferFrom: amount exceeds 96 bits"); if (spender != src && spenderAllowance != type(uint96).max) { uint96 newAllowance = sub96(spenderAllowance, amount, "ep::transferFrom: transfer amount exceeds spender allowance"); allowances[src][spender] = newAllowance; emit Approval(src, spender, newAllowance); } _transferTokens(src, dst, amount); return true; } /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegatee The address to delegate votes to */ function delegate(address delegatee) public { return _delegate(msg.sender, delegatee); } /** * @notice Delegates votes from signatory to `delegatee` * @param delegatee The address to delegate votes to * @param nonce The contract state required to match the signature * @param expiry The time at which to expire the signature * @param v The recovery byte of the signature * @param r Half of the ECDSA signature pair * @param s Half of the ECDSA signature pair */ function delegateBySig(address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s) public { bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this))); bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry)); bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); address signatory = ECDSA.recover(digest, v, r, s); require(signatory != address(0), "ep::delegateBySig: invalid signature"); require(nonce == nonces[signatory]++, "ep::delegateBySig: invalid nonce"); require(block.timestamp <= expiry, "ep::delegateBySig: signature expired"); return _delegate(signatory, delegatee); } /** * @notice Gets the current votes balance for `account` * @param account The address to get votes balance * @return The number of current votes for `account` */ function getCurrentVotes(address account) external view returns (uint96) { uint32 nCheckpoints = numCheckpoints[account]; return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0; } /** * @notice Determine the prior number of votes for an account as of a block number * @dev Block number must be a finalized block or else this function will revert to prevent misinformation. * @param account The address of the account to check * @param blockNumber The block number to get the vote balance at * @return The number of votes the account had as of the given block */ function getPriorVotes(address account, uint blockNumber) public view returns (uint96) { require(blockNumber < block.number, "ep::getPriorVotes: not yet determined"); uint32 nCheckpoints = numCheckpoints[account]; if (nCheckpoints == 0) { return 0; } // First check most recent balance if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) { return checkpoints[account][nCheckpoints - 1].votes; } // Next check implicit zero balance if (checkpoints[account][0].fromBlock > blockNumber) { return 0; } uint32 lower = 0; uint32 upper = nCheckpoints - 1; while (upper > lower) { uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow Checkpoint memory cp = checkpoints[account][center]; if (cp.fromBlock == blockNumber) { return cp.votes; } else if (cp.fromBlock < blockNumber) { lower = center; } else { upper = center - 1; } } return checkpoints[account][lower].votes; } function _delegate(address delegator, address delegatee) internal { address currentDelegate = delegates[delegator]; uint96 delegatorBalance = balances[delegator]; delegates[delegator] = delegatee; emit DelegateChanged(delegator, currentDelegate, delegatee); _moveDelegates(currentDelegate, delegatee, delegatorBalance); } function _transferTokens(address src, address dst, uint96 amount) internal { require(src != address(0), "ep::_transferTokens: cannot transfer from the zero address"); require(dst != address(0), "ep::_transferTokens: cannot transfer to the zero address"); balances[src] = sub96(balances[src], amount, "ep::_transferTokens: transfer amount exceeds balance"); balances[dst] = add96(balances[dst], amount, "ep::_transferTokens: transfer amount overflows"); emit Transfer(src, dst, amount); _moveDelegates(delegates[src], delegates[dst], amount); } function _moveDelegates(address srcRep, address dstRep, uint96 amount) internal { if (srcRep != dstRep && amount > 0) { if (srcRep != address(0)) { uint32 srcRepNum = numCheckpoints[srcRep]; uint96 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0; uint96 srcRepNew = sub96(srcRepOld, amount, "ep::_moveVotes: vote amount underflows"); _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew); } if (dstRep != address(0)) { uint32 dstRepNum = numCheckpoints[dstRep]; uint96 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0; uint96 dstRepNew = add96(dstRepOld, amount, "ep::_moveVotes: vote amount overflows"); _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew); } } } function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint96 oldVotes, uint96 newVotes) internal { uint32 blockNumber = safe32(block.number, "ep::_writeCheckpoint: block number exceeds 32 bits"); if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) { checkpoints[delegatee][nCheckpoints - 1].votes = newVotes; } else { checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes); numCheckpoints[delegatee] = nCheckpoints + 1; } emit DelegateVotesChanged(delegatee, oldVotes, newVotes); } function safe32(uint n, string memory errorMessage) internal pure returns (uint32) { require(n < 2**32, errorMessage); return uint32(n); } function safe96(uint n, string memory errorMessage) internal pure returns (uint96) { require(n < 2**96, errorMessage); return uint96(n); } function add96(uint96 a, uint96 b, string memory errorMessage) internal pure returns (uint96) { uint96 c = a + b; require(c >= a, errorMessage); return c; } function sub96(uint96 a, uint96 b, string memory errorMessage) internal pure returns (uint96) { require(b <= a, errorMessage); return a - b; } function getChainId() internal view returns (uint) { uint256 chainId; assembly { chainId := chainid() } return chainId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV // Deprecated in v4.8 } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"minter_","type":"address"},{"internalType":"uint256","name":"mintingAllowedAfter_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"address","name":"newMinter","type":"address"}],"name":"MinterChanged","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_TIME_BETWEEN_MINTS","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_CAP","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","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":"rawAmount","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":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint96","name":"votes","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingAllowedAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter_","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","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":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526b033b2e3c9fd0803ce80000006000553480156200002157600080fd5b50604051620042d1380380620042d183398181016040528101906200004791906200032d565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620000b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000b09062000410565b60405180910390fd5b42811015620000ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000f690620004a8565b60405180910390fd5b600054600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600054604051620001d19190620004db565b60405180910390a381600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f66000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200027092919062000509565b60405180910390a18060058190555050505062000536565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002ba826200028d565b9050919050565b620002cc81620002ad565b8114620002d857600080fd5b50565b600081519050620002ec81620002c1565b92915050565b6000819050919050565b6200030781620002f2565b81146200031357600080fd5b50565b6000815190506200032781620002fc565b92915050565b60008060006060848603121562000349576200034862000288565b5b60006200035986828701620002db565b93505060206200036c86828701620002db565b92505060406200037f8682870162000316565b9150509250925092565b600082825260208201905092915050565b7f65703a3a636f6e7374727563746f723a206d696e7465722063616e206e6f742060008201527f6265207a65726f20616464726573730000000000000000000000000000000000602082015250565b6000620003f8602f8362000389565b915062000405826200039a565b604082019050919050565b600060208201905081810360008301526200042b81620003e9565b9050919050565b7f65703a3a636f6e7374727563746f723a206d696e74696e672063616e206f6e6c60008201527f7920626567696e206166746572206465706c6f796d656e740000000000000000602082015250565b60006200049060388362000389565b91506200049d8262000432565b604082019050919050565b60006020820190508181036000830152620004c38162000481565b9050919050565b620004d581620002f2565b82525050565b6000602082019050620004f26000830184620004ca565b92915050565b6200050381620002ad565b82525050565b6000604082019050620005206000830185620004f8565b6200052f6020830184620004f8565b9392505050565b613d8b80620005466000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80636fcfff45116100de578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e1461048a578063e7a324dc146104ba578063f1127ed8146104d8578063fca3b5aa1461050957610173565b8063a9059cbb1461040e578063b4b5ea571461043e578063c3cda5201461046e57610173565b80636fcfff451461031257806370a0823114610342578063782d6fe1146103725780637ecebe00146103a257806395d89b41146103d257806398f1312e146103f057610173565b806323b872dd1161013057806323b872dd1461023e57806330b36cef1461026e578063313ce5671461028c57806340c10f19146102aa578063587cde1e146102c65780635c19a95c146102f657610173565b806306fdde03146101785780630754617214610196578063095ea7b3146101b45780630d8c0205146101e457806318160ddd1461020257806320606b7014610220575b600080fd5b610180610525565b60405161018d9190612a25565b60405180910390f35b61019e61055e565b6040516101ab9190612a88565b60405180910390f35b6101ce60048036038101906101c99190612b0a565b610584565b6040516101db9190612b65565b60405180910390f35b6101ec610702565b6040516101f99190612b9f565b60405180910390f35b61020a61070a565b6040516102179190612bc9565b60405180910390f35b610228610710565b6040516102359190612bfd565b60405180910390f35b61025860048036038101906102539190612c18565b610734565b6040516102659190612b65565b60405180910390f35b6102766109a8565b6040516102839190612bc9565b60405180910390f35b6102946109ae565b6040516102a19190612c87565b60405180910390f35b6102c460048036038101906102bf9190612b0a565b6109b3565b005b6102e060048036038101906102db9190612ca2565b610dd2565b6040516102ed9190612a88565b60405180910390f35b610310600480360381019061030b9190612ca2565b610e05565b005b61032c60048036038101906103279190612ca2565b610e12565b6040516103399190612b9f565b60405180910390f35b61035c60048036038101906103579190612ca2565b610e35565b6040516103699190612bc9565b60405180910390f35b61038c60048036038101906103879190612b0a565b610ea4565b6040516103999190612cf6565b60405180910390f35b6103bc60048036038101906103b79190612ca2565b6112dd565b6040516103c99190612bc9565b60405180910390f35b6103da6112f5565b6040516103e79190612a25565b60405180910390f35b6103f861132e565b6040516104059190612c87565b60405180910390f35b61042860048036038101906104239190612b0a565b611333565b6040516104359190612b65565b60405180910390f35b61045860048036038101906104539190612ca2565b611370565b6040516104659190612cf6565b60405180910390f35b61048860048036038101906104839190612d69565b611467565b005b6104a4600480360381019061049f9190612df6565b6116e6565b6040516104b19190612bc9565b60405180910390f35b6104c2611793565b6040516104cf9190612bfd565b60405180910390f35b6104f260048036038101906104ed9190612e62565b6117b7565b604051610500929190612ea2565b60405180910390f35b610523600480360381019061051e9190612ca2565b611810565b005b6040518060400160405280600b81526020017f45726350726f746f636f6c00000000000000000000000000000000000000000081525081565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036105c2576bffffffffffffffffffffffff90506105e7565b6105e483604051806060016040528060238152602001613bcd602391396119ae565b90505b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516106ef9190612f06565b60405180910390a3600191505092915050565b6301e1338081565b60005481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6000803390506000600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16905060006107f785604051806060016040528060288152602001613cb6602891396119ae565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561085157506bffffffffffffffffffffffff8016826bffffffffffffffffffffffff1614155b1561098f57600061087b83836040518060600160405280603b8152602001613c7b603b9139611a0c565b905080600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516109859190612f06565b60405180910390a3505b61099a878783611a86565b600193505050509392505050565b60055481565b601281565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3a90612f93565b60405180910390fd5b600554421015610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f90613025565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aee906130b7565b60405180910390fd5b6301e1338063ffffffff1642610b0d9190613106565b6005819055506000610b54826040518060400160405280602081526020017f65703a3a6d696e743a20616d6f756e74206578636565647320393620626974738152506119ae565b90506064600260ff16600054610b6a919061313a565b610b7491906131ab565b816bffffffffffffffffffffffff161115610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90613228565b60405180910390fd5b610c01816bffffffffffffffffffffffff16600054610be39190613106565b604051806060016040528060258152602001613b85602591396119ae565b6bffffffffffffffffffffffff16600081905550610c8f600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff1682604051806060016040528060238152602001613baa60239139611e65565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d5a9190612f06565b60405180910390a3610dcd6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611ee4565b505050565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e0f33826121f1565b50565b60076020528060005260406000206000915054906101000a900463ffffffff1681565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff169050919050565b6000438210610ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edf906132ba565b60405180910390fd5b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1603610f545760009150506112d7565b82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610fa391906132da565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161161106857600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018361102a91906132da565b63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff169150506112d7565b82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611156110e95760009150506112d7565b6000806001836110f991906132da565b90505b8163ffffffff168163ffffffff1611156112595760006002838361112091906132da565b61112a9190613312565b8261113591906132da565b90506000600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905086816000015163ffffffff1603611228578060200151955050505050506112d7565b86816000015163ffffffff16101561124257819350611252565b60018261124f91906132da565b92505b50506110fc565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff1693505050505b92915050565b60086020528060005260406000206000915090505481565b6040518060400160405280600281526020017f455000000000000000000000000000000000000000000000000000000000000081525081565b600281565b60008061135883604051806060016040528060248152602001613d04602491396119ae565b9050611365338583611a86565b600191505092915050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff16116113da57600061145f565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018361142891906132da565b63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b915050919050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666040518060400160405280600b81526020017f45726350726f746f636f6c000000000000000000000000000000000000000000815250805190602001206114cf6123b1565b306040516020016114e39493929190613343565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8888886040516020016115349493929190613388565b60405160208183030381529060405280519060200120905060008282604051602001611561929190613445565b6040516020818303038152906040528051906020012090506000611587828888886123be565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ef906134ee565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906116489061350e565b91905055891461168d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611684906135a2565b60405180910390fd5b874211156116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c790613634565b60405180910390fd5b6116da818b6121f1565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6006602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060000160049054906101000a90046bffffffffffffffffffffffff16905082565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361187f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611876906136c6565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461190f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190690613758565b60405180910390fd5b7f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f6600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051611962929190613778565b60405180910390a180600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006c0100000000000000000000000083108290611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f99190612a25565b60405180910390fd5b5082905092915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a679190612a25565b60405180910390fd5b508284611a7d91906137a1565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aec90613853565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b906138e5565b60405180910390fd5b611bde600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff1682604051806060016040528060348152602001613c2260349139611a0c565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550611cc5600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16826040518060600160405280602e8152602001613d28602e9139611e65565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d8f9190612f06565b60405180910390a3611e60600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611ee4565b505050565b6000808385611e749190613905565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecf9190612a25565b60405180910390fd5b50809150509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f2e57506000816bffffffffffffffffffffffff16115b156121ec57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461208f576000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611611fd1576000612056565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018461201f91906132da565b63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b9050600061207d8285604051806060016040528060268152602001613cde60269139611a0c565b905061208b868484846123e9565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121eb576000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff161161212d5760006121b2565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018461217b91906132da565b63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b905060006121d98285604051806060016040528060258152602001613c5660259139611e65565b90506121e7858484846123e9565b5050505b5b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16905082600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46123ab828483611ee4565b50505050565b6000804690508091505090565b60008060006123cf878787876126f7565b915091506123dc816127d9565b8192505050949350505050565b600061240d43604051806060016040528060328152602001613bf06032913961293f565b905060008463ffffffff161180156124ab57508063ffffffff16600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018761247591906132da565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b1561254f5781600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001876124ff91906132da565b63ffffffff1663ffffffff16815260200190815260200160002060000160046101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506126a0565b60405180604001604052808263ffffffff168152602001836bffffffffffffffffffffffff16815250600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050506001846126429190613945565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72484846040516126e892919061397d565b60405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156127325760006003915091506127d0565b60006001878787876040516000815260200160405260405161275794939291906139a6565b6020604051602081039080840390855afa158015612779573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127c7576000600192509250506127d0565b80600092509250505b94509492505050565b600060048111156127ed576127ec6139eb565b5b816004811115612800576127ff6139eb565b5b031561293c576001600481111561281a576128196139eb565b5b81600481111561282d5761282c6139eb565b5b0361286d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286490613a66565b60405180910390fd5b60026004811115612881576128806139eb565b5b816004811115612894576128936139eb565b5b036128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb90613ad2565b60405180910390fd5b600360048111156128e8576128e76139eb565b5b8160048111156128fb576128fa6139eb565b5b0361293b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293290613b64565b60405180910390fd5b5b50565b60006401000000008310829061298b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129829190612a25565b60405180910390fd5b5082905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156129cf5780820151818401526020810190506129b4565b60008484015250505050565b6000601f19601f8301169050919050565b60006129f782612995565b612a0181856129a0565b9350612a118185602086016129b1565b612a1a816129db565b840191505092915050565b60006020820190508181036000830152612a3f81846129ec565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a7282612a47565b9050919050565b612a8281612a67565b82525050565b6000602082019050612a9d6000830184612a79565b92915050565b600080fd5b612ab181612a67565b8114612abc57600080fd5b50565b600081359050612ace81612aa8565b92915050565b6000819050919050565b612ae781612ad4565b8114612af257600080fd5b50565b600081359050612b0481612ade565b92915050565b60008060408385031215612b2157612b20612aa3565b5b6000612b2f85828601612abf565b9250506020612b4085828601612af5565b9150509250929050565b60008115159050919050565b612b5f81612b4a565b82525050565b6000602082019050612b7a6000830184612b56565b92915050565b600063ffffffff82169050919050565b612b9981612b80565b82525050565b6000602082019050612bb46000830184612b90565b92915050565b612bc381612ad4565b82525050565b6000602082019050612bde6000830184612bba565b92915050565b6000819050919050565b612bf781612be4565b82525050565b6000602082019050612c126000830184612bee565b92915050565b600080600060608486031215612c3157612c30612aa3565b5b6000612c3f86828701612abf565b9350506020612c5086828701612abf565b9250506040612c6186828701612af5565b9150509250925092565b600060ff82169050919050565b612c8181612c6b565b82525050565b6000602082019050612c9c6000830184612c78565b92915050565b600060208284031215612cb857612cb7612aa3565b5b6000612cc684828501612abf565b91505092915050565b60006bffffffffffffffffffffffff82169050919050565b612cf081612ccf565b82525050565b6000602082019050612d0b6000830184612ce7565b92915050565b612d1a81612c6b565b8114612d2557600080fd5b50565b600081359050612d3781612d11565b92915050565b612d4681612be4565b8114612d5157600080fd5b50565b600081359050612d6381612d3d565b92915050565b60008060008060008060c08789031215612d8657612d85612aa3565b5b6000612d9489828a01612abf565b9650506020612da589828a01612af5565b9550506040612db689828a01612af5565b9450506060612dc789828a01612d28565b9350506080612dd889828a01612d54565b92505060a0612de989828a01612d54565b9150509295509295509295565b60008060408385031215612e0d57612e0c612aa3565b5b6000612e1b85828601612abf565b9250506020612e2c85828601612abf565b9150509250929050565b612e3f81612b80565b8114612e4a57600080fd5b50565b600081359050612e5c81612e36565b92915050565b60008060408385031215612e7957612e78612aa3565b5b6000612e8785828601612abf565b9250506020612e9885828601612e4d565b9150509250929050565b6000604082019050612eb76000830185612b90565b612ec46020830184612ce7565b9392505050565b6000819050919050565b6000612ef0612eeb612ee684612ccf565b612ecb565b612ad4565b9050919050565b612f0081612ed5565b82525050565b6000602082019050612f1b6000830184612ef7565b92915050565b7f65703a3a6d696e743a206f6e6c7920746865206d696e7465722063616e206d6960008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f7d6022836129a0565b9150612f8882612f21565b604082019050919050565b60006020820190508181036000830152612fac81612f70565b9050919050565b7f65703a3a6d696e743a206d696e74696e67206e6f7420616c6c6f77656420796560008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b600061300f6021836129a0565b915061301a82612fb3565b604082019050919050565b6000602082019050818103600083015261303e81613002565b9050919050565b7f65703a3a6d696e743a2063616e6e6f74207472616e7366657220746f2074686560008201527f207a65726f206164647265737300000000000000000000000000000000000000602082015250565b60006130a1602d836129a0565b91506130ac82613045565b604082019050919050565b600060208201905081810360008301526130d081613094565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061311182612ad4565b915061311c83612ad4565b9250828201905080821115613134576131336130d7565b5b92915050565b600061314582612ad4565b915061315083612ad4565b925082820261315e81612ad4565b91508282048414831517613175576131746130d7565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131b682612ad4565b91506131c183612ad4565b9250826131d1576131d061317c565b5b828204905092915050565b7f65703a3a6d696e743a206578636565646564206d696e74206361700000000000600082015250565b6000613212601b836129a0565b915061321d826131dc565b602082019050919050565b6000602082019050818103600083015261324181613205565b9050919050565b7f65703a3a6765745072696f72566f7465733a206e6f742079657420646574657260008201527f6d696e6564000000000000000000000000000000000000000000000000000000602082015250565b60006132a46025836129a0565b91506132af82613248565b604082019050919050565b600060208201905081810360008301526132d381613297565b9050919050565b60006132e582612b80565b91506132f083612b80565b9250828203905063ffffffff81111561330c5761330b6130d7565b5b92915050565b600061331d82612b80565b915061332883612b80565b9250826133385761333761317c565b5b828204905092915050565b60006080820190506133586000830187612bee565b6133656020830186612bee565b6133726040830185612bba565b61337f6060830184612a79565b95945050505050565b600060808201905061339d6000830187612bee565b6133aa6020830186612a79565b6133b76040830185612bba565b6133c46060830184612bba565b95945050505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b600061340e6002836133cd565b9150613419826133d8565b600282019050919050565b6000819050919050565b61343f61343a82612be4565b613424565b82525050565b600061345082613401565b915061345c828561342e565b60208201915061346c828461342e565b6020820191508190509392505050565b7f65703a3a64656c656761746542795369673a20696e76616c6964207369676e6160008201527f7475726500000000000000000000000000000000000000000000000000000000602082015250565b60006134d86024836129a0565b91506134e38261347c565b604082019050919050565b60006020820190508181036000830152613507816134cb565b9050919050565b600061351982612ad4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361354b5761354a6130d7565b5b600182019050919050565b7f65703a3a64656c656761746542795369673a20696e76616c6964206e6f6e6365600082015250565b600061358c6020836129a0565b915061359782613556565b602082019050919050565b600060208201905081810360008301526135bb8161357f565b9050919050565b7f65703a3a64656c656761746542795369673a207369676e61747572652065787060008201527f6972656400000000000000000000000000000000000000000000000000000000602082015250565b600061361e6024836129a0565b9150613629826135c2565b604082019050919050565b6000602082019050818103600083015261364d81613611565b9050919050565b7f65703a3a636f6e7374727563746f723a206d696e7465722063616e206e6f742060008201527f6265207a65726f20616464726573730000000000000000000000000000000000602082015250565b60006136b0602f836129a0565b91506136bb82613654565b604082019050919050565b600060208201905081810360008301526136df816136a3565b9050919050565b7f65703a3a7365744d696e7465723a206f6e6c7920746865206d696e746572206360008201527f616e206368616e676520746865206d696e746572206164647265737300000000602082015250565b6000613742603c836129a0565b915061374d826136e6565b604082019050919050565b6000602082019050818103600083015261377181613735565b9050919050565b600060408201905061378d6000830185612a79565b61379a6020830184612a79565b9392505050565b60006137ac82612ccf565b91506137b783612ccf565b925082820390506bffffffffffffffffffffffff8111156137db576137da6130d7565b5b92915050565b7f65703a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e60008201527f736665722066726f6d20746865207a65726f2061646472657373000000000000602082015250565b600061383d603a836129a0565b9150613848826137e1565b604082019050919050565b6000602082019050818103600083015261386c81613830565b9050919050565b7f65703a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e60008201527f7366657220746f20746865207a65726f20616464726573730000000000000000602082015250565b60006138cf6038836129a0565b91506138da82613873565b604082019050919050565b600060208201905081810360008301526138fe816138c2565b9050919050565b600061391082612ccf565b915061391b83612ccf565b925082820190506bffffffffffffffffffffffff81111561393f5761393e6130d7565b5b92915050565b600061395082612b80565b915061395b83612b80565b9250828201905063ffffffff811115613977576139766130d7565b5b92915050565b60006040820190506139926000830185612ef7565b61399f6020830184612ef7565b9392505050565b60006080820190506139bb6000830187612bee565b6139c86020830186612c78565b6139d56040830185612bee565b6139e26060830184612bee565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000613a506018836129a0565b9150613a5b82613a1a565b602082019050919050565b60006020820190508181036000830152613a7f81613a43565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613abc601f836129a0565b9150613ac782613a86565b602082019050919050565b60006020820190508181036000830152613aeb81613aaf565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b4e6022836129a0565b9150613b5982613af2565b604082019050919050565b60006020820190508181036000830152613b7d81613b41565b905091905056fe65703a3a6d696e743a20746f74616c537570706c792065786365656473203936206269747365703a3a6d696e743a207472616e7366657220616d6f756e74206f766572666c6f777365703a3a617070726f76653a20616d6f756e742065786365656473203936206269747365703a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747365703a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e636565703a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f777365703a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e636565703a3a7472616e7366657246726f6d3a20616d6f756e742065786365656473203936206269747365703a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f777365703a3a7472616e736665723a20616d6f756e742065786365656473203936206269747365703a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773a26469706673582212208668dc2e2795b85cc866c1d72ff9d18d7f4c5745156ad51343ce83caf609ad9464736f6c634300081200330000000000000000000000008166a61df72a844b8d0a0ac65fc9a3134c75bff90000000000000000000000008166a61df72a844b8d0a0ac65fc9a3134c75bff9000000000000000000000000000000000000000000000000000000006ba008f3
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c80636fcfff45116100de578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e1461048a578063e7a324dc146104ba578063f1127ed8146104d8578063fca3b5aa1461050957610173565b8063a9059cbb1461040e578063b4b5ea571461043e578063c3cda5201461046e57610173565b80636fcfff451461031257806370a0823114610342578063782d6fe1146103725780637ecebe00146103a257806395d89b41146103d257806398f1312e146103f057610173565b806323b872dd1161013057806323b872dd1461023e57806330b36cef1461026e578063313ce5671461028c57806340c10f19146102aa578063587cde1e146102c65780635c19a95c146102f657610173565b806306fdde03146101785780630754617214610196578063095ea7b3146101b45780630d8c0205146101e457806318160ddd1461020257806320606b7014610220575b600080fd5b610180610525565b60405161018d9190612a25565b60405180910390f35b61019e61055e565b6040516101ab9190612a88565b60405180910390f35b6101ce60048036038101906101c99190612b0a565b610584565b6040516101db9190612b65565b60405180910390f35b6101ec610702565b6040516101f99190612b9f565b60405180910390f35b61020a61070a565b6040516102179190612bc9565b60405180910390f35b610228610710565b6040516102359190612bfd565b60405180910390f35b61025860048036038101906102539190612c18565b610734565b6040516102659190612b65565b60405180910390f35b6102766109a8565b6040516102839190612bc9565b60405180910390f35b6102946109ae565b6040516102a19190612c87565b60405180910390f35b6102c460048036038101906102bf9190612b0a565b6109b3565b005b6102e060048036038101906102db9190612ca2565b610dd2565b6040516102ed9190612a88565b60405180910390f35b610310600480360381019061030b9190612ca2565b610e05565b005b61032c60048036038101906103279190612ca2565b610e12565b6040516103399190612b9f565b60405180910390f35b61035c60048036038101906103579190612ca2565b610e35565b6040516103699190612bc9565b60405180910390f35b61038c60048036038101906103879190612b0a565b610ea4565b6040516103999190612cf6565b60405180910390f35b6103bc60048036038101906103b79190612ca2565b6112dd565b6040516103c99190612bc9565b60405180910390f35b6103da6112f5565b6040516103e79190612a25565b60405180910390f35b6103f861132e565b6040516104059190612c87565b60405180910390f35b61042860048036038101906104239190612b0a565b611333565b6040516104359190612b65565b60405180910390f35b61045860048036038101906104539190612ca2565b611370565b6040516104659190612cf6565b60405180910390f35b61048860048036038101906104839190612d69565b611467565b005b6104a4600480360381019061049f9190612df6565b6116e6565b6040516104b19190612bc9565b60405180910390f35b6104c2611793565b6040516104cf9190612bfd565b60405180910390f35b6104f260048036038101906104ed9190612e62565b6117b7565b604051610500929190612ea2565b60405180910390f35b610523600480360381019061051e9190612ca2565b611810565b005b6040518060400160405280600b81526020017f45726350726f746f636f6c00000000000000000000000000000000000000000081525081565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036105c2576bffffffffffffffffffffffff90506105e7565b6105e483604051806060016040528060238152602001613bcd602391396119ae565b90505b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516106ef9190612f06565b60405180910390a3600191505092915050565b6301e1338081565b60005481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6000803390506000600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16905060006107f785604051806060016040528060288152602001613cb6602891396119ae565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561085157506bffffffffffffffffffffffff8016826bffffffffffffffffffffffff1614155b1561098f57600061087b83836040518060600160405280603b8152602001613c7b603b9139611a0c565b905080600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516109859190612f06565b60405180910390a3505b61099a878783611a86565b600193505050509392505050565b60055481565b601281565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3a90612f93565b60405180910390fd5b600554421015610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f90613025565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aee906130b7565b60405180910390fd5b6301e1338063ffffffff1642610b0d9190613106565b6005819055506000610b54826040518060400160405280602081526020017f65703a3a6d696e743a20616d6f756e74206578636565647320393620626974738152506119ae565b90506064600260ff16600054610b6a919061313a565b610b7491906131ab565b816bffffffffffffffffffffffff161115610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90613228565b60405180910390fd5b610c01816bffffffffffffffffffffffff16600054610be39190613106565b604051806060016040528060258152602001613b85602591396119ae565b6bffffffffffffffffffffffff16600081905550610c8f600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff1682604051806060016040528060238152602001613baa60239139611e65565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d5a9190612f06565b60405180910390a3610dcd6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611ee4565b505050565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e0f33826121f1565b50565b60076020528060005260406000206000915054906101000a900463ffffffff1681565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff169050919050565b6000438210610ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edf906132ba565b60405180910390fd5b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1603610f545760009150506112d7565b82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610fa391906132da565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161161106857600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018361102a91906132da565b63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff169150506112d7565b82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611156110e95760009150506112d7565b6000806001836110f991906132da565b90505b8163ffffffff168163ffffffff1611156112595760006002838361112091906132da565b61112a9190613312565b8261113591906132da565b90506000600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905086816000015163ffffffff1603611228578060200151955050505050506112d7565b86816000015163ffffffff16101561124257819350611252565b60018261124f91906132da565b92505b50506110fc565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff1693505050505b92915050565b60086020528060005260406000206000915090505481565b6040518060400160405280600281526020017f455000000000000000000000000000000000000000000000000000000000000081525081565b600281565b60008061135883604051806060016040528060248152602001613d04602491396119ae565b9050611365338583611a86565b600191505092915050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff16116113da57600061145f565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018361142891906132da565b63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b915050919050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666040518060400160405280600b81526020017f45726350726f746f636f6c000000000000000000000000000000000000000000815250805190602001206114cf6123b1565b306040516020016114e39493929190613343565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8888886040516020016115349493929190613388565b60405160208183030381529060405280519060200120905060008282604051602001611561929190613445565b6040516020818303038152906040528051906020012090506000611587828888886123be565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ef906134ee565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906116489061350e565b91905055891461168d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611684906135a2565b60405180910390fd5b874211156116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c790613634565b60405180910390fd5b6116da818b6121f1565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6006602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060000160049054906101000a90046bffffffffffffffffffffffff16905082565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361187f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611876906136c6565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461190f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190690613758565b60405180910390fd5b7f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f6600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051611962929190613778565b60405180910390a180600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006c0100000000000000000000000083108290611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f99190612a25565b60405180910390fd5b5082905092915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a679190612a25565b60405180910390fd5b508284611a7d91906137a1565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aec90613853565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b906138e5565b60405180910390fd5b611bde600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff1682604051806060016040528060348152602001613c2260349139611a0c565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550611cc5600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16826040518060600160405280602e8152602001613d28602e9139611e65565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d8f9190612f06565b60405180910390a3611e60600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611ee4565b505050565b6000808385611e749190613905565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecf9190612a25565b60405180910390fd5b50809150509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f2e57506000816bffffffffffffffffffffffff16115b156121ec57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461208f576000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611611fd1576000612056565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018461201f91906132da565b63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b9050600061207d8285604051806060016040528060268152602001613cde60269139611a0c565b905061208b868484846123e9565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121eb576000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff161161212d5760006121b2565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018461217b91906132da565b63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b905060006121d98285604051806060016040528060258152602001613c5660259139611e65565b90506121e7858484846123e9565b5050505b5b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16905082600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46123ab828483611ee4565b50505050565b6000804690508091505090565b60008060006123cf878787876126f7565b915091506123dc816127d9565b8192505050949350505050565b600061240d43604051806060016040528060328152602001613bf06032913961293f565b905060008463ffffffff161180156124ab57508063ffffffff16600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018761247591906132da565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b1561254f5781600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001876124ff91906132da565b63ffffffff1663ffffffff16815260200190815260200160002060000160046101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506126a0565b60405180604001604052808263ffffffff168152602001836bffffffffffffffffffffffff16815250600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050506001846126429190613945565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72484846040516126e892919061397d565b60405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156127325760006003915091506127d0565b60006001878787876040516000815260200160405260405161275794939291906139a6565b6020604051602081039080840390855afa158015612779573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127c7576000600192509250506127d0565b80600092509250505b94509492505050565b600060048111156127ed576127ec6139eb565b5b816004811115612800576127ff6139eb565b5b031561293c576001600481111561281a576128196139eb565b5b81600481111561282d5761282c6139eb565b5b0361286d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286490613a66565b60405180910390fd5b60026004811115612881576128806139eb565b5b816004811115612894576128936139eb565b5b036128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb90613ad2565b60405180910390fd5b600360048111156128e8576128e76139eb565b5b8160048111156128fb576128fa6139eb565b5b0361293b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293290613b64565b60405180910390fd5b5b50565b60006401000000008310829061298b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129829190612a25565b60405180910390fd5b5082905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156129cf5780820151818401526020810190506129b4565b60008484015250505050565b6000601f19601f8301169050919050565b60006129f782612995565b612a0181856129a0565b9350612a118185602086016129b1565b612a1a816129db565b840191505092915050565b60006020820190508181036000830152612a3f81846129ec565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a7282612a47565b9050919050565b612a8281612a67565b82525050565b6000602082019050612a9d6000830184612a79565b92915050565b600080fd5b612ab181612a67565b8114612abc57600080fd5b50565b600081359050612ace81612aa8565b92915050565b6000819050919050565b612ae781612ad4565b8114612af257600080fd5b50565b600081359050612b0481612ade565b92915050565b60008060408385031215612b2157612b20612aa3565b5b6000612b2f85828601612abf565b9250506020612b4085828601612af5565b9150509250929050565b60008115159050919050565b612b5f81612b4a565b82525050565b6000602082019050612b7a6000830184612b56565b92915050565b600063ffffffff82169050919050565b612b9981612b80565b82525050565b6000602082019050612bb46000830184612b90565b92915050565b612bc381612ad4565b82525050565b6000602082019050612bde6000830184612bba565b92915050565b6000819050919050565b612bf781612be4565b82525050565b6000602082019050612c126000830184612bee565b92915050565b600080600060608486031215612c3157612c30612aa3565b5b6000612c3f86828701612abf565b9350506020612c5086828701612abf565b9250506040612c6186828701612af5565b9150509250925092565b600060ff82169050919050565b612c8181612c6b565b82525050565b6000602082019050612c9c6000830184612c78565b92915050565b600060208284031215612cb857612cb7612aa3565b5b6000612cc684828501612abf565b91505092915050565b60006bffffffffffffffffffffffff82169050919050565b612cf081612ccf565b82525050565b6000602082019050612d0b6000830184612ce7565b92915050565b612d1a81612c6b565b8114612d2557600080fd5b50565b600081359050612d3781612d11565b92915050565b612d4681612be4565b8114612d5157600080fd5b50565b600081359050612d6381612d3d565b92915050565b60008060008060008060c08789031215612d8657612d85612aa3565b5b6000612d9489828a01612abf565b9650506020612da589828a01612af5565b9550506040612db689828a01612af5565b9450506060612dc789828a01612d28565b9350506080612dd889828a01612d54565b92505060a0612de989828a01612d54565b9150509295509295509295565b60008060408385031215612e0d57612e0c612aa3565b5b6000612e1b85828601612abf565b9250506020612e2c85828601612abf565b9150509250929050565b612e3f81612b80565b8114612e4a57600080fd5b50565b600081359050612e5c81612e36565b92915050565b60008060408385031215612e7957612e78612aa3565b5b6000612e8785828601612abf565b9250506020612e9885828601612e4d565b9150509250929050565b6000604082019050612eb76000830185612b90565b612ec46020830184612ce7565b9392505050565b6000819050919050565b6000612ef0612eeb612ee684612ccf565b612ecb565b612ad4565b9050919050565b612f0081612ed5565b82525050565b6000602082019050612f1b6000830184612ef7565b92915050565b7f65703a3a6d696e743a206f6e6c7920746865206d696e7465722063616e206d6960008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f7d6022836129a0565b9150612f8882612f21565b604082019050919050565b60006020820190508181036000830152612fac81612f70565b9050919050565b7f65703a3a6d696e743a206d696e74696e67206e6f7420616c6c6f77656420796560008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b600061300f6021836129a0565b915061301a82612fb3565b604082019050919050565b6000602082019050818103600083015261303e81613002565b9050919050565b7f65703a3a6d696e743a2063616e6e6f74207472616e7366657220746f2074686560008201527f207a65726f206164647265737300000000000000000000000000000000000000602082015250565b60006130a1602d836129a0565b91506130ac82613045565b604082019050919050565b600060208201905081810360008301526130d081613094565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061311182612ad4565b915061311c83612ad4565b9250828201905080821115613134576131336130d7565b5b92915050565b600061314582612ad4565b915061315083612ad4565b925082820261315e81612ad4565b91508282048414831517613175576131746130d7565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131b682612ad4565b91506131c183612ad4565b9250826131d1576131d061317c565b5b828204905092915050565b7f65703a3a6d696e743a206578636565646564206d696e74206361700000000000600082015250565b6000613212601b836129a0565b915061321d826131dc565b602082019050919050565b6000602082019050818103600083015261324181613205565b9050919050565b7f65703a3a6765745072696f72566f7465733a206e6f742079657420646574657260008201527f6d696e6564000000000000000000000000000000000000000000000000000000602082015250565b60006132a46025836129a0565b91506132af82613248565b604082019050919050565b600060208201905081810360008301526132d381613297565b9050919050565b60006132e582612b80565b91506132f083612b80565b9250828203905063ffffffff81111561330c5761330b6130d7565b5b92915050565b600061331d82612b80565b915061332883612b80565b9250826133385761333761317c565b5b828204905092915050565b60006080820190506133586000830187612bee565b6133656020830186612bee565b6133726040830185612bba565b61337f6060830184612a79565b95945050505050565b600060808201905061339d6000830187612bee565b6133aa6020830186612a79565b6133b76040830185612bba565b6133c46060830184612bba565b95945050505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b600061340e6002836133cd565b9150613419826133d8565b600282019050919050565b6000819050919050565b61343f61343a82612be4565b613424565b82525050565b600061345082613401565b915061345c828561342e565b60208201915061346c828461342e565b6020820191508190509392505050565b7f65703a3a64656c656761746542795369673a20696e76616c6964207369676e6160008201527f7475726500000000000000000000000000000000000000000000000000000000602082015250565b60006134d86024836129a0565b91506134e38261347c565b604082019050919050565b60006020820190508181036000830152613507816134cb565b9050919050565b600061351982612ad4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361354b5761354a6130d7565b5b600182019050919050565b7f65703a3a64656c656761746542795369673a20696e76616c6964206e6f6e6365600082015250565b600061358c6020836129a0565b915061359782613556565b602082019050919050565b600060208201905081810360008301526135bb8161357f565b9050919050565b7f65703a3a64656c656761746542795369673a207369676e61747572652065787060008201527f6972656400000000000000000000000000000000000000000000000000000000602082015250565b600061361e6024836129a0565b9150613629826135c2565b604082019050919050565b6000602082019050818103600083015261364d81613611565b9050919050565b7f65703a3a636f6e7374727563746f723a206d696e7465722063616e206e6f742060008201527f6265207a65726f20616464726573730000000000000000000000000000000000602082015250565b60006136b0602f836129a0565b91506136bb82613654565b604082019050919050565b600060208201905081810360008301526136df816136a3565b9050919050565b7f65703a3a7365744d696e7465723a206f6e6c7920746865206d696e746572206360008201527f616e206368616e676520746865206d696e746572206164647265737300000000602082015250565b6000613742603c836129a0565b915061374d826136e6565b604082019050919050565b6000602082019050818103600083015261377181613735565b9050919050565b600060408201905061378d6000830185612a79565b61379a6020830184612a79565b9392505050565b60006137ac82612ccf565b91506137b783612ccf565b925082820390506bffffffffffffffffffffffff8111156137db576137da6130d7565b5b92915050565b7f65703a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e60008201527f736665722066726f6d20746865207a65726f2061646472657373000000000000602082015250565b600061383d603a836129a0565b9150613848826137e1565b604082019050919050565b6000602082019050818103600083015261386c81613830565b9050919050565b7f65703a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e60008201527f7366657220746f20746865207a65726f20616464726573730000000000000000602082015250565b60006138cf6038836129a0565b91506138da82613873565b604082019050919050565b600060208201905081810360008301526138fe816138c2565b9050919050565b600061391082612ccf565b915061391b83612ccf565b925082820190506bffffffffffffffffffffffff81111561393f5761393e6130d7565b5b92915050565b600061395082612b80565b915061395b83612b80565b9250828201905063ffffffff811115613977576139766130d7565b5b92915050565b60006040820190506139926000830185612ef7565b61399f6020830184612ef7565b9392505050565b60006080820190506139bb6000830187612bee565b6139c86020830186612c78565b6139d56040830185612bee565b6139e26060830184612bee565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000613a506018836129a0565b9150613a5b82613a1a565b602082019050919050565b60006020820190508181036000830152613a7f81613a43565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613abc601f836129a0565b9150613ac782613a86565b602082019050919050565b60006020820190508181036000830152613aeb81613aaf565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b4e6022836129a0565b9150613b5982613af2565b604082019050919050565b60006020820190508181036000830152613b7d81613b41565b905091905056fe65703a3a6d696e743a20746f74616c537570706c792065786365656473203936206269747365703a3a6d696e743a207472616e7366657220616d6f756e74206f766572666c6f777365703a3a617070726f76653a20616d6f756e742065786365656473203936206269747365703a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747365703a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e636565703a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f777365703a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e636565703a3a7472616e7366657246726f6d3a20616d6f756e742065786365656473203936206269747365703a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f777365703a3a7472616e736665723a20616d6f756e742065786365656473203936206269747365703a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773a26469706673582212208668dc2e2795b85cc866c1d72ff9d18d7f4c5745156ad51343ce83caf609ad9464736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008166a61df72a844b8d0a0ac65fc9a3134c75bff90000000000000000000000008166a61df72a844b8d0a0ac65fc9a3134c75bff9000000000000000000000000000000000000000000000000000000006ba008f3
-----Decoded View---------------
Arg [0] : account (address): 0x8166a61Df72a844B8D0A0aC65Fc9A3134c75bff9
Arg [1] : minter_ (address): 0x8166a61Df72a844B8D0A0aC65Fc9A3134c75bff9
Arg [2] : mintingAllowedAfter_ (uint256): 1805650163
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000008166a61df72a844b8d0a0ac65fc9a3134c75bff9
Arg [1] : 0000000000000000000000008166a61df72a844b8d0a0ac65fc9a3134c75bff9
Arg [2] : 000000000000000000000000000000000000000000000000000000006ba008f3
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.