Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Protocol
Overview
Max Total Supply
221,656.399002330344626494 RSV
Holders
458 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
34.74160747534118667 RSVValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Reserve
Compiler Version
v0.5.7+commit.6da8b019
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-07-20 */ pragma solidity 0.5.7; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * NOTE: This is a feature of the next version of OpenZeppelin Contracts. * @dev Get it via `npm install @openzeppelin/contracts@next`. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * NOTE: This is a feature of the next version of OpenZeppelin Contracts. * @dev Get it via `npm install @openzeppelin/contracts@next`. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * NOTE: This is a feature of the next version of OpenZeppelin Contracts. * @dev Get it via `npm install @openzeppelin/contracts@next`. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /* * @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 GSN 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. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where there is an account * (owner) that can be granted exclusive access to specific functions. * * This module is used through inheritance by using the modifier `onlyOwner`. * * To change ownership, use a 2-part nominate-accept pattern. * * This contract is loosely based off of https://git.io/JenNF but additionally requires new owners * to accept ownership before the transition occurs. */ contract Ownable is Context { address private _owner; address private _nominatedOwner; event NewOwnerNominated(address indexed previousOwner, address indexed nominee); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Returns the address of the current nominated owner. */ function nominatedOwner() external view returns (address) { return _nominatedOwner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _onlyOwner(); _; } function _onlyOwner() internal view { require(_msgSender() == _owner, "caller is not owner"); } /** * @dev Nominates a new owner `newOwner`. * Requires a follow-up `acceptOwnership`. * Can only be called by the current owner. */ function nominateNewOwner(address newOwner) external onlyOwner { require(newOwner != address(0), "new owner is 0 address"); emit NewOwnerNominated(_owner, newOwner); _nominatedOwner = newOwner; } /** * @dev Accepts ownership of the contract. */ function acceptOwnership() external { require(_nominatedOwner == _msgSender(), "unauthorized"); emit OwnershipTransferred(_owner, _nominatedOwner); _owner = _nominatedOwner; } /** Set `_owner` to the 0 address. * Only do this to deliberately lock in the current permissions. * * THIS CANNOT BE UNDONE! Call this only if you know what you're doing and why you're doing it! */ function renounceOwnership(string calldata declaration) external onlyOwner { string memory requiredDeclaration = "I hereby renounce ownership of this contract forever."; require( keccak256(abi.encodePacked(declaration)) == keccak256(abi.encodePacked(requiredDeclaration)), "declaration incorrect"); emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } } /** * @title Eternal Storage for the Reserve Token * * @dev Eternal Storage facilitates future upgrades. * * If Reserve chooses to release an upgraded contract for the Reserve in the future, Reserve will * have the option of reusing the deployed version of this data contract to simplify migration. * * The use of this contract does not imply that Reserve will choose to do a future upgrade, nor * that any future upgrades will necessarily re-use this storage. It merely provides option value. */ contract ReserveEternalStorage is Ownable { using SafeMath for uint256; // ===== auth ===== address public reserveAddress; event ReserveAddressTransferred( address indexed oldReserveAddress, address indexed newReserveAddress ); /// On construction, set auth fields. constructor() public { reserveAddress = _msgSender(); emit ReserveAddressTransferred(address(0), reserveAddress); } /// Only run modified function if sent by `reserveAddress`. modifier onlyReserveAddress() { require(_msgSender() == reserveAddress, "onlyReserveAddress"); _; } /// Set `reserveAddress`. function updateReserveAddress(address newReserveAddress) external { require(newReserveAddress != address(0), "zero address"); require(_msgSender() == reserveAddress || _msgSender() == owner(), "not authorized"); emit ReserveAddressTransferred(reserveAddress, newReserveAddress); reserveAddress = newReserveAddress; } // ===== balance ===== mapping(address => uint256) public balance; /// Add `value` to `balance[key]`, unless this causes integer overflow. /// /// @dev This is a slight divergence from the strict Eternal Storage pattern, but it reduces /// the gas for the by-far most common token usage, it's a *very simple* divergence, and /// `setBalance` is available anyway. function addBalance(address key, uint256 value) external onlyReserveAddress { balance[key] = balance[key].add(value); } /// Subtract `value` from `balance[key]`, unless this causes integer underflow. function subBalance(address key, uint256 value) external onlyReserveAddress { balance[key] = balance[key].sub(value); } /// Set `balance[key]` to `value`. function setBalance(address key, uint256 value) external onlyReserveAddress { balance[key] = value; } // ===== allowed ===== mapping(address => mapping(address => uint256)) public allowed; /// Set `to`'s allowance of `from`'s tokens to `value`. function setAllowed(address from, address to, uint256 value) external onlyReserveAddress { allowed[from][to] = value; } } /** * @title An interface representing a contract that calculates transaction fees */ interface ITXFee { function calculateFee(address from, address to, uint256 amount) external returns (uint256); } /** * @title The Reserve Token * @dev An ERC-20 token with minting, burning, pausing, and user freezing. * Based on OpenZeppelin's [implementation](https://github.com/OpenZeppelin/openzeppelin-solidity/blob/41aa39afbc13f0585634061701c883fe512a5469/contracts/token/ERC20/ERC20.sol). * * Non-constant-sized data is held in ReserveEternalStorage, to facilitate potential future upgrades. */ contract Reserve is IERC20, Ownable { using SafeMath for uint256; // ==== State ==== // Non-constant-sized data ReserveEternalStorage internal trustedData; // TX Fee helper contract ITXFee public trustedTxFee; // Relayer address public trustedRelayer; // Basic token data uint256 public totalSupply; uint256 public maxSupply; // Paused data bool public paused; // Auth roles address public minter; address public pauser; address public feeRecipient; // ==== Events, Constants, and Constructor ==== // Auth role change events event MinterChanged(address indexed newMinter); event PauserChanged(address indexed newPauser); event FeeRecipientChanged(address indexed newFeeRecipient); event MaxSupplyChanged(uint256 indexed newMaxSupply); event EternalStorageTransferred(address indexed newReserveAddress); event TxFeeHelperChanged(address indexed newTxFeeHelper); event TrustedRelayerChanged(address indexed newTrustedRelayer); // Pause events event Paused(address indexed account); event Unpaused(address indexed account); // Basic information as constants string public constant name = "Reserve"; string public constant symbol = "RSV"; string public constant version = "2.1"; uint8 public constant decimals = 18; /// Initialize critical fields. constructor() public { pauser = msg.sender; feeRecipient = msg.sender; // minter defaults to the zero address. maxSupply = 2 ** 256 - 1; paused = true; trustedTxFee = ITXFee(address(0)); trustedRelayer = address(0); trustedData = ReserveEternalStorage(address(0)); } /// Accessor for eternal storage contract address. function getEternalStorageAddress() external view returns(address) { return address(trustedData); } // ==== Admin functions ==== /// Modifies a function to only run if sent by `role`. modifier only(address role) { require(msg.sender == role, "unauthorized: not role holder"); _; } /// Modifies a function to only run if sent by `role` or the contract's `owner`. modifier onlyOwnerOr(address role) { require(msg.sender == owner() || msg.sender == role, "unauthorized: not owner or role"); _; } /// Change who holds the `minter` role. function changeMinter(address newMinter) external onlyOwnerOr(minter) { minter = newMinter; emit MinterChanged(newMinter); } /// Change who holds the `pauser` role. function changePauser(address newPauser) external onlyOwnerOr(pauser) { pauser = newPauser; emit PauserChanged(newPauser); } function changeFeeRecipient(address newFeeRecipient) external onlyOwnerOr(feeRecipient) { feeRecipient = newFeeRecipient; emit FeeRecipientChanged(newFeeRecipient); } /// Make a different address the EternalStorage contract's reserveAddress. /// This will break this contract, so only do it if you're /// abandoning this contract, e.g., for an upgrade. function transferEternalStorage(address newReserveAddress) external onlyOwner isPaused { require(newReserveAddress != address(0), "zero address"); emit EternalStorageTransferred(newReserveAddress); trustedData.updateReserveAddress(newReserveAddress); } /// Change the contract that is able to do metatransactions. function changeRelayer(address newTrustedRelayer) external onlyOwner { trustedRelayer = newTrustedRelayer; emit TrustedRelayerChanged(newTrustedRelayer); } /// Change the contract that helps with transaction fee calculation. function changeTxFeeHelper(address newTrustedTxFee) external onlyOwner { trustedTxFee = ITXFee(newTrustedTxFee); emit TxFeeHelperChanged(newTrustedTxFee); } /// Change the maximum supply allowed. function changeMaxSupply(uint256 newMaxSupply) external onlyOwner { maxSupply = newMaxSupply; emit MaxSupplyChanged(newMaxSupply); } /// Pause the contract. function pause() external only(pauser) { paused = true; emit Paused(pauser); } /// Unpause the contract. function unpause() external only(pauser) { paused = false; emit Unpaused(pauser); } /// Modifies a function to run only when the contract is paused. modifier isPaused() { require(paused, "contract is not paused"); _; } /// Modifies a function to run only when the contract is not paused. modifier notPaused() { require(!paused, "contract is paused"); _; } // ==== Token transfers, allowances, minting, and burning ==== /// @return how many attoRSV are held by `holder`. function balanceOf(address holder) external view returns (uint256) { return trustedData.balance(holder); } /// @return how many attoRSV `holder` has allowed `spender` to control. function allowance(address holder, address spender) external view returns (uint256) { return trustedData.allowed(holder, spender); } /// Transfer `value` attoRSV from `msg.sender` to `to`. function transfer(address to, uint256 value) external notPaused returns (bool) { _transfer(msg.sender, to, value); return true; } /** * Approve `spender` to spend `value` attotokens on behalf of `msg.sender`. * * Beware that changing a nonzero allowance with this method brings the risk that * someone may use both the old and the new allowance by unfortunate transaction ordering. One * way to mitigate this risk is to first reduce the spender's allowance * to 0, and then set the desired value afterwards, per * [this ERC-20 issue](https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729). * * A simpler workaround is to use `increaseAllowance` or `decreaseAllowance`, below. * * @param spender address The address which will spend the funds. * @param value uint256 How many attotokens to allow `spender` to spend. */ function approve(address spender, uint256 value) external notPaused returns (bool) { _approve(msg.sender, spender, value); return true; } /// Transfer approved tokens from one address to another. /// @param from address The address to send tokens from. /// @param to address The address to send tokens to. /// @param value uint256 The number of attotokens to send. function transferFrom(address from, address to, uint256 value) external notPaused returns (bool) { _transfer(from, to, value); _approve(from, msg.sender, trustedData.allowed(from, msg.sender).sub(value)); return true; } /// Increase `spender`'s allowance of the sender's tokens. /// @dev From MonolithDAO Token.sol /// @param spender The address which will spend the funds. /// @param addedValue How many attotokens to increase the allowance by. function increaseAllowance(address spender, uint256 addedValue) external notPaused returns (bool) { _approve(msg.sender, spender, trustedData.allowed(msg.sender, spender).add(addedValue)); return true; } /// Decrease `spender`'s allowance of the sender's tokens. /// @dev From MonolithDAO Token.sol /// @param spender The address which will spend the funds. /// @param subtractedValue How many attotokens to decrease the allowance by. function decreaseAllowance(address spender, uint256 subtractedValue) external notPaused returns (bool) { _approve( msg.sender, spender, trustedData.allowed(msg.sender, spender).sub(subtractedValue) ); return true; } /// Mint `value` new attotokens to `account`. function mint(address account, uint256 value) external notPaused only(minter) { require(account != address(0), "can't mint to address zero"); totalSupply = totalSupply.add(value); require(totalSupply < maxSupply, "max supply exceeded"); trustedData.addBalance(account, value); emit Transfer(address(0), account, value); } /// Burn `value` attotokens from `account`, if sender has that much allowance from `account`. function burnFrom(address account, uint256 value) external notPaused only(minter) { _burn(account, value); _approve(account, msg.sender, trustedData.allowed(account, msg.sender).sub(value)); } // ==== Relay functions === // /// Transfer `value` attotokens from `from` to `to`. /// Callable only by the relay contract. function relayTransfer(address from, address to, uint256 value) external notPaused only(trustedRelayer) returns (bool) { _transfer(from, to, value); return true; } /// Approve `value` attotokens to be spent by `spender` from `holder`. /// Callable only by the relay contract. function relayApprove(address holder, address spender, uint256 value) external notPaused only(trustedRelayer) returns (bool) { _approve(holder, spender, value); return true; } /// `spender` transfers `value` attotokens from `holder` to `to`. /// Requires allowance. /// Callable only by the relay contract. function relayTransferFrom(address holder, address spender, address to, uint256 value) external notPaused only(trustedRelayer) returns (bool) { _transfer(holder, to, value); _approve(holder, spender, trustedData.allowed(holder, spender).sub(value)); return true; } /// @dev Transfer of `value` attotokens from `from` to `to`. /// Internal; doesn't check permissions. function _transfer(address from, address to, uint256 value) internal { require(to != address(0), "can't transfer to address zero"); trustedData.subBalance(from, value); uint256 fee = 0; if (address(trustedTxFee) != address(0)) { fee = trustedTxFee.calculateFee(from, to, value); require(fee <= value, "transaction fee out of bounds"); trustedData.addBalance(feeRecipient, fee); emit Transfer(from, feeRecipient, fee); } trustedData.addBalance(to, value.sub(fee)); emit Transfer(from, to, value.sub(fee)); } /// @dev Burn `value` attotokens from `account`. /// Internal; doesn't check permissions. function _burn(address account, uint256 value) internal { require(account != address(0), "can't burn from address zero"); totalSupply = totalSupply.sub(value); trustedData.subBalance(account, value); emit Transfer(account, address(0), value); } /// @dev Set `spender`'s allowance on `holder`'s tokens to `value` attotokens. /// Internal; doesn't check permissions. function _approve(address holder, address spender, uint256 value) internal { require(spender != address(0), "spender cannot be address zero"); require(holder != address(0), "holder cannot be address zero"); trustedData.setAllowed(holder, spender, value); emit Approval(holder, spender, value); } // =========================== Upgradeability ===================================== /// Accept upgrade from previous RSV instance. Can only be called once. function acceptUpgrade(address previousImplementation) external onlyOwner { require(address(trustedData) == address(0), "can only be run once"); Reserve previous = Reserve(previousImplementation); trustedData = ReserveEternalStorage(previous.getEternalStorageAddress()); // Copy values from old contract totalSupply = previous.totalSupply(); maxSupply = previous.maxSupply(); emit MaxSupplyChanged(maxSupply); // Unpause. paused = false; emit Unpaused(pauser); previous.acceptOwnership(); // Take control of Eternal Storage. previous.changePauser(address(this)); previous.pause(); previous.transferEternalStorage(address(this)); // Burn the bridge behind us. previous.changeMinter(address(0)); previous.changePauser(address(0)); previous.renounceOwnership("I hereby renounce ownership of this contract forever."); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minter","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"relayTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"nominateNewOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newFeeRecipient","type":"address"}],"name":"changeFeeRecipient","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newMinter","type":"address"}],"name":"changeMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newPauser","type":"address"}],"name":"changePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newMaxSupply","type":"uint256"}],"name":"changeMaxSupply","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"value","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeRecipient","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newTrustedRelayer","type":"address"}],"name":"changeRelayer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"declaration","type":"string"}],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"holder","type":"address"},{"name":"spender","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"relayTransferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"nominatedOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"holder","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"value","type":"uint256"}],"name":"burnFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"trustedRelayer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newReserveAddress","type":"address"}],"name":"transferEternalStorage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pauser","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newTrustedTxFee","type":"address"}],"name":"changeTxFeeHelper","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"trustedTxFee","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"previousImplementation","type":"address"}],"name":"acceptUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"holder","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"holder","type":"address"},{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"relayApprove","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getEternalStorageAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newMinter","type":"address"}],"name":"MinterChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newPauser","type":"address"}],"name":"PauserChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newFeeRecipient","type":"address"}],"name":"FeeRecipientChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newMaxSupply","type":"uint256"}],"name":"MaxSupplyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newReserveAddress","type":"address"}],"name":"EternalStorageTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newTxFeeHelper","type":"address"}],"name":"TxFeeHelperChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newTrustedRelayer","type":"address"}],"name":"TrustedRelayerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"nominee","type":"address"}],"name":"NewOwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]
Contract Creation Code
60806040523480156200001157600080fd5b50600062000024620000c260201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060088054336001600160a01b031991821681179092556009805482169092179091556000196006556007805460ff1916600117905560038054821690556004805482169055600280549091169055620000c6565b3390565b61364380620000d66000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c806354fd4d501161017b5780639fd0506d116100d8578063cfc1b4191161008c578063dd62ed3e11610071578063dd62ed3e146108ae578063e00f0ee4146108e9578063fb5689661461092c576102c8565b8063cfc1b41914610873578063d5abeb01146108a6576102c8565b8063a9059cbb116100bd578063a9059cbb146107ff578063ac5b54c214610838578063bdd1b96e1461086b576102c8565b80639fd0506d146107be578063a457c2d7146107c6576102c8565b80638456cb591161012f5780638da5cb5b116101145780638da5cb5b1461077b57806395d89b411461078357806396cd55361461078b576102c8565b80638456cb591461076b5780638596c22614610773576102c8565b806370a082311161016057806370a08231146106f757806379ba50971461072a57806379cc679014610732576102c8565b806354fd4d50146106e75780635c975abb146106ef576102c8565b8063313ce5671161022957806346904840116101dd5780634fdb7f44116101c25780634fdb7f44146106265780635354b9141461069657806353a47bb7146106df576102c8565b806346904840146105eb57806348d23829146105f3576102c8565b80633f4ba83a1161020e5780633f4ba83a1461058d578063404c7cdd1461059557806340c10f19146105b2576102c8565b8063313ce567146105365780633950935114610554576102c8565b806318160ddd1161028057806323b872dd1161026557806323b872dd1461048d5780632c4d4d18146104d05780632cd271e714610503576102c8565b806318160ddd14610440578063236040711461045a576102c8565b8063095ea7b3116102b1578063095ea7b31461037b5780630b9684fe146103c85780631627540c1461040b576102c8565b806306fdde03146102cd578063075461721461034a575b600080fd5b6102d5610934565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561030f5781810151838201526020016102f7565b50505050905090810190601f16801561033c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61035261096d565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103b46004803603604081101561039157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561098e565b604080519115158252519081900360200190f35b6103b4600480360360608110156103de57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610a17565b61043e6004803603602081101561042157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b29565b005b610448610c40565b60408051918252519081900360200190f35b61043e6004803603602081101561047057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c46565b6103b4600480360360608110156104a357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610d90565b61043e600480360360208110156104e657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ede565b61043e6004803603602081101561051957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611034565b61053e61117e565b6040805160ff9092168252519081900360200190f35b6103b46004803603604081101561056a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611183565b61043e6112b8565b61043e600480360360208110156105ab57600080fd5b50356113af565b61043e600480360360408110156105c857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356113ea565b6103526116d7565b61043e6004803603602081101561060957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166116f3565b61043e6004803603602081101561063c57600080fd5b81019060208101813564010000000081111561065757600080fd5b82018360208201111561066957600080fd5b8035906020019184600183028401116401000000008311171561068b57600080fd5b50909250905061176a565b6103b4600480360360808110156106ac57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101358216916040820135169060600135611929565b610352611ac6565b6102d5611ae2565b6103b4611b1b565b6104486004803603602081101561070d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611b24565b61043e611bcd565b61043e6004803603604081101561074857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611cf1565b61043e611e85565b610352611f7f565b610352611f9b565b6102d5611fb7565b61043e600480360360208110156107a157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611ff0565b6103526121bb565b6103b4600480360360408110156107dc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356121d7565b6103b46004803603604081101561081557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356122d4565b61043e6004803603602081101561084e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612354565b6103526123cb565b61043e6004803603602081101561088957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166123e7565b610448612a30565b610448600480360360408110156108c457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516612a36565b6103b4600480360360608110156108ff57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135612ae8565b610352612bef565b6040518060400160405280600781526020017f526573657276650000000000000000000000000000000000000000000000000081525081565b600754610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60075460009060ff1615610a0357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b610a0e338484612c0b565b50600192915050565b60075460009060ff1615610a8c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b60045473ffffffffffffffffffffffffffffffffffffffff16338114610b1357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b610b1e858585612dfe565b506001949350505050565b610b3161324e565b73ffffffffffffffffffffffffffffffffffffffff8116610bb357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e6577206f776e65722069732030206164647265737300000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917fb59bab42c554cfd49f4f001c983b6ed93ede25748b10114b7d1cb1b3c97df7af91a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60055481565b60095473ffffffffffffffffffffffffffffffffffffffff16610c67611f9b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610cb557503373ffffffffffffffffffffffffffffffffffffffff8216145b610d2057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f756e617574686f72697a65643a206e6f74206f776e6572206f7220726f6c6500604482015290519081900360640190fd5b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040517f167cccccc6e9b2892a740ec13fc1e51d3de8ea384f25bd87fee7412d588637e290600090a25050565b60075460009060ff1615610e0557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b610e10848484612dfe565b600254604080517f5c65816500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808816600483015233602483018190529251610ed494899493610ecf938993921691635c65816591604480820192602092909190829003018186803b158015610e9757600080fd5b505afa158015610eab573d6000803e3d6000fd5b505050506040513d6020811015610ec157600080fd5b50519063ffffffff6132f316565b612c0b565b5060019392505050565b600754610100900473ffffffffffffffffffffffffffffffffffffffff16610f04611f9b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f5257503373ffffffffffffffffffffffffffffffffffffffff8216145b610fbd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f756e617574686f72697a65643a206e6f74206f776e6572206f7220726f6c6500604482015290519081900360640190fd5b600780547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040517fb6b8f1859c5c352e5ffad07d0f77e384ac725512c015bd3a3ffc885831c8a42590600090a25050565b60085473ffffffffffffffffffffffffffffffffffffffff16611055611f9b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110a357503373ffffffffffffffffffffffffffffffffffffffff8216145b61110e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f756e617574686f72697a65643a206e6f74206f776e6572206f7220726f6c6500604482015290519081900360640190fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040517fb80482a293ca2e013eda8683c9bd7fc8347cfdaeea5ede58cba46df502c2a60490600090a25050565b601281565b60075460009060ff16156111f857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b600254604080517f5c658165000000000000000000000000000000000000000000000000000000008152336004820181905273ffffffffffffffffffffffffffffffffffffffff80881660248401529251610a0e9491938893610ecf938993921691635c65816591604480820192602092909190829003018186803b15801561128057600080fd5b505afa158015611294573d6000803e3d6000fd5b505050506040513d60208110156112aa57600080fd5b50519063ffffffff61333c16565b60085473ffffffffffffffffffffffffffffffffffffffff1633811461133f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560085460405173ffffffffffffffffffffffffffffffffffffffff909116907f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90600090a250565b6113b761324e565b600681905560405181907f28a10a2e0b5582da7164754cb994f6214b8af6aa7f7e003305fbc09e7106c51390600090a250565b60075460ff161561145c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b600754610100900473ffffffffffffffffffffffffffffffffffffffff163381146114e857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831661156a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f63616e2774206d696e7420746f2061646472657373207a65726f000000000000604482015290519081900360640190fd5b60055461157d908363ffffffff61333c16565b6005819055600654116115f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f6d617820737570706c7920657863656564656400000000000000000000000000604482015290519081900360640190fd5b600254604080517f21e5383a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201869052915191909216916321e5383a91604480830192600092919082900301818387803b15801561166c57600080fd5b505af1158015611680573d6000803e3d6000fd5b505060408051858152905173ffffffffffffffffffffffffffffffffffffffff87169350600092507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505050565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b6116fb61324e565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fc06d038b1f32a4f7e4b7cc1d794af10bf1dbbdc710af43782ae78f704d9beafc90600090a250565b61177261324e565b60606040518060600160405280603581526020016135e3603591399050806040516020018082805190602001908083835b602083106117e057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016117a3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120838360405160200180838380828437808301925050509250505060405160208183030381529060405280519060200120146118b757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6465636c61726174696f6e20696e636f72726563740000000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35050600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905550565b60075460009060ff161561199e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b60045473ffffffffffffffffffffffffffffffffffffffff16338114611a2557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b611a30868585612dfe565b600254604080517f5c65816500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808a16600483015280891660248301529151611aba938a938a93610ecf938a939290921691635c65816591604480820192602092909190829003018186803b158015610e9757600080fd5b50600195945050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b6040518060400160405280600381526020017f322e31000000000000000000000000000000000000000000000000000000000081525081565b60075460ff1681565b600254604080517fe3d670d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529151600093929092169163e3d670d791602480820192602092909190829003018186803b158015611b9b57600080fd5b505afa158015611baf573d6000803e3d6000fd5b505050506040513d6020811015611bc557600080fd5b505192915050565b611bd56133b0565b60015473ffffffffffffffffffffffffffffffffffffffff908116911614611c5e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f756e617574686f72697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60075460ff1615611d6357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b600754610100900473ffffffffffffffffffffffffffffffffffffffff16338114611def57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b611df983836133b4565b600254604080517f5c65816500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808716600483015233602483018190529251611e8094889493610ecf938993921691635c65816591604480820192602092909190829003018186803b158015610e9757600080fd5b505050565b60085473ffffffffffffffffffffffffffffffffffffffff16338114611f0c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560085460405173ffffffffffffffffffffffffffffffffffffffff909116907f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890600090a250565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6040518060400160405280600381526020017f525356000000000000000000000000000000000000000000000000000000000081525081565b611ff861324e565b60075460ff1661206957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f636f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166120eb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f20616464726573730000000000000000000000000000000000000000604482015290519081900360640190fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907f170ee3488a79c35a0d86eff88a7857910c11193864052c0323ad49222232a2d790600090a2600254604080517ff84afd4800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529151919092169163f84afd4891602480830192600092919082900301818387803b1580156121a057600080fd5b505af11580156121b4573d6000803e3d6000fd5b5050505050565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b60075460009060ff161561224c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b600254604080517f5c658165000000000000000000000000000000000000000000000000000000008152336004820181905273ffffffffffffffffffffffffffffffffffffffff80881660248401529251610a0e9491938893610ecf938993921691635c65816591604480820192602092909190829003018186803b158015610e9757600080fd5b60075460009060ff161561234957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b610a0e338484612dfe565b61235c61324e565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fe554fc9a6ce410c9b9537cefc8440997bdbd03a2a87193c1a7f4ee085188ced190600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b6123ef61324e565b60025473ffffffffffffffffffffffffffffffffffffffff161561247457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f63616e206f6e6c792062652072756e206f6e6365000000000000000000000000604482015290519081900360640190fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663fb5689666040518163ffffffff1660e01b815260040160206040518083038186803b1580156124bf57600080fd5b505afa1580156124d3573d6000803e3d6000fd5b505050506040513d60208110156124e957600080fd5b5051600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051918316916318160ddd91600480820192602092909190829003018186803b15801561257f57600080fd5b505afa158015612593573d6000803e3d6000fd5b505050506040513d60208110156125a957600080fd5b5051600555604080517fd5abeb01000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff83169163d5abeb01916004808301926020929190829003018186803b15801561261457600080fd5b505afa158015612628573d6000803e3d6000fd5b505050506040513d602081101561263e57600080fd5b505160068190556040517f28a10a2e0b5582da7164754cb994f6214b8af6aa7f7e003305fbc09e7106c51390600090a2600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560085460405173ffffffffffffffffffffffffffffffffffffffff909116907f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90600090a28073ffffffffffffffffffffffffffffffffffffffff166379ba50976040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561272357600080fd5b505af1158015612737573d6000803e3d6000fd5b5050604080517f2cd271e7000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff85169350632cd271e79250602480830192600092919082900301818387803b1580156127a857600080fd5b505af11580156127bc573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561280857600080fd5b505af115801561281c573d6000803e3d6000fd5b5050604080517f96cd5536000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff851693506396cd55369250602480830192600092919082900301818387803b15801561288d57600080fd5b505af11580156128a1573d6000803e3d6000fd5b5050604080517f2c4d4d18000000000000000000000000000000000000000000000000000000008152600060048201819052915173ffffffffffffffffffffffffffffffffffffffff86169450632c4d4d1893506024808301939282900301818387803b15801561291157600080fd5b505af1158015612925573d6000803e3d6000fd5b5050604080517f2cd271e7000000000000000000000000000000000000000000000000000000008152600060048201819052915173ffffffffffffffffffffffffffffffffffffffff86169450632cd271e793506024808301939282900301818387803b15801561299557600080fd5b505af11580156129a9573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16634fdb7f446040518163ffffffff1660e01b81526004018080602001828103825260358152602001806135e360359139604001915050600060405180830381600087803b158015612a1457600080fd5b505af1158015612a28573d6000803e3d6000fd5b505050505050565b60065481565b600254604080517f5c65816500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152848116602483015291516000939290921691635c65816591604480820192602092909190829003018186803b158015612ab557600080fd5b505afa158015612ac9573d6000803e3d6000fd5b505050506040513d6020811015612adf57600080fd5b50519392505050565b60075460009060ff1615612b5d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b60045473ffffffffffffffffffffffffffffffffffffffff16338114612be457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b610b1e858585612c0b565b60025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8216612c8d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f7370656e6465722063616e6e6f742062652061646472657373207a65726f0000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316612d0f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f686f6c6465722063616e6e6f742062652061646472657373207a65726f000000604482015290519081900360640190fd5b600254604080517f33dd1b8a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152858116602483015260448201859052915191909216916333dd1b8a91606480830192600092919082900301818387803b158015612d9257600080fd5b505af1158015612da6573d6000803e3d6000fd5b505060408051848152905173ffffffffffffffffffffffffffffffffffffffff8087169450871692507f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216612e8057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f63616e2774207472616e7366657220746f2061646472657373207a65726f0000604482015290519081900360640190fd5b600254604080517fcf8eeb7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590529151919092169163cf8eeb7e91604480830192600092919082900301818387803b158015612efb57600080fd5b505af1158015612f0f573d6000803e3d6000fd5b50506003546000925073ffffffffffffffffffffffffffffffffffffffff1615905061314157600354604080517f7ca87cb600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301526044820186905291519190921691637ca87cb69160648083019260209291908290030181600087803b158015612fb957600080fd5b505af1158015612fcd573d6000803e3d6000fd5b505050506040513d6020811015612fe357600080fd5b505190508181111561305657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f7472616e73616374696f6e20666565206f7574206f6620626f756e6473000000604482015290519081900360640190fd5b600254600954604080517f21e5383a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101859052905191909216916321e5383a91604480830192600092919082900301818387803b1580156130d457600080fd5b505af11580156130e8573d6000803e3d6000fd5b505060095460408051858152905173ffffffffffffffffffffffffffffffffffffffff928316945091881692507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35b60025473ffffffffffffffffffffffffffffffffffffffff166321e5383a84613170858563ffffffff6132f316565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156131d957600080fd5b505af11580156131ed573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff848116915085167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61323785856132f3565b60408051918252519081900360200190a350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1661326f6133b0565b73ffffffffffffffffffffffffffffffffffffffff16146132f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f63616c6c6572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b565b600061333583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613531565b9392505050565b60008282018381101561333557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b73ffffffffffffffffffffffffffffffffffffffff821661343657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e2774206275726e2066726f6d2061646472657373207a65726f00000000604482015290519081900360640190fd5b600554613449908263ffffffff6132f316565b600555600254604080517fcf8eeb7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590529151919092169163cf8eeb7e91604480830192600092919082900301818387803b1580156134c757600080fd5b505af11580156134db573d6000803e3d6000fd5b50506040805184815290516000935073ffffffffffffffffffffffffffffffffffffffff861692507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600081848411156135da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561359f578181015183820152602001613587565b50505050905090810190601f1680156135cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe49206865726562792072656e6f756e6365206f776e657273686970206f66207468697320636f6e747261637420666f72657665722ea165627a7a72305820ff21448e107a290591da2fb4a5c38e03f84252d226792d92dae425cf027694d90029
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102c85760003560e01c806354fd4d501161017b5780639fd0506d116100d8578063cfc1b4191161008c578063dd62ed3e11610071578063dd62ed3e146108ae578063e00f0ee4146108e9578063fb5689661461092c576102c8565b8063cfc1b41914610873578063d5abeb01146108a6576102c8565b8063a9059cbb116100bd578063a9059cbb146107ff578063ac5b54c214610838578063bdd1b96e1461086b576102c8565b80639fd0506d146107be578063a457c2d7146107c6576102c8565b80638456cb591161012f5780638da5cb5b116101145780638da5cb5b1461077b57806395d89b411461078357806396cd55361461078b576102c8565b80638456cb591461076b5780638596c22614610773576102c8565b806370a082311161016057806370a08231146106f757806379ba50971461072a57806379cc679014610732576102c8565b806354fd4d50146106e75780635c975abb146106ef576102c8565b8063313ce5671161022957806346904840116101dd5780634fdb7f44116101c25780634fdb7f44146106265780635354b9141461069657806353a47bb7146106df576102c8565b806346904840146105eb57806348d23829146105f3576102c8565b80633f4ba83a1161020e5780633f4ba83a1461058d578063404c7cdd1461059557806340c10f19146105b2576102c8565b8063313ce567146105365780633950935114610554576102c8565b806318160ddd1161028057806323b872dd1161026557806323b872dd1461048d5780632c4d4d18146104d05780632cd271e714610503576102c8565b806318160ddd14610440578063236040711461045a576102c8565b8063095ea7b3116102b1578063095ea7b31461037b5780630b9684fe146103c85780631627540c1461040b576102c8565b806306fdde03146102cd578063075461721461034a575b600080fd5b6102d5610934565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561030f5781810151838201526020016102f7565b50505050905090810190601f16801561033c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61035261096d565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103b46004803603604081101561039157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561098e565b604080519115158252519081900360200190f35b6103b4600480360360608110156103de57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610a17565b61043e6004803603602081101561042157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b29565b005b610448610c40565b60408051918252519081900360200190f35b61043e6004803603602081101561047057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c46565b6103b4600480360360608110156104a357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610d90565b61043e600480360360208110156104e657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ede565b61043e6004803603602081101561051957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611034565b61053e61117e565b6040805160ff9092168252519081900360200190f35b6103b46004803603604081101561056a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611183565b61043e6112b8565b61043e600480360360208110156105ab57600080fd5b50356113af565b61043e600480360360408110156105c857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356113ea565b6103526116d7565b61043e6004803603602081101561060957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166116f3565b61043e6004803603602081101561063c57600080fd5b81019060208101813564010000000081111561065757600080fd5b82018360208201111561066957600080fd5b8035906020019184600183028401116401000000008311171561068b57600080fd5b50909250905061176a565b6103b4600480360360808110156106ac57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101358216916040820135169060600135611929565b610352611ac6565b6102d5611ae2565b6103b4611b1b565b6104486004803603602081101561070d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611b24565b61043e611bcd565b61043e6004803603604081101561074857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611cf1565b61043e611e85565b610352611f7f565b610352611f9b565b6102d5611fb7565b61043e600480360360208110156107a157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611ff0565b6103526121bb565b6103b4600480360360408110156107dc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356121d7565b6103b46004803603604081101561081557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356122d4565b61043e6004803603602081101561084e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612354565b6103526123cb565b61043e6004803603602081101561088957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166123e7565b610448612a30565b610448600480360360408110156108c457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516612a36565b6103b4600480360360608110156108ff57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135612ae8565b610352612bef565b6040518060400160405280600781526020017f526573657276650000000000000000000000000000000000000000000000000081525081565b600754610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60075460009060ff1615610a0357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b610a0e338484612c0b565b50600192915050565b60075460009060ff1615610a8c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b60045473ffffffffffffffffffffffffffffffffffffffff16338114610b1357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b610b1e858585612dfe565b506001949350505050565b610b3161324e565b73ffffffffffffffffffffffffffffffffffffffff8116610bb357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e6577206f776e65722069732030206164647265737300000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917fb59bab42c554cfd49f4f001c983b6ed93ede25748b10114b7d1cb1b3c97df7af91a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60055481565b60095473ffffffffffffffffffffffffffffffffffffffff16610c67611f9b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610cb557503373ffffffffffffffffffffffffffffffffffffffff8216145b610d2057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f756e617574686f72697a65643a206e6f74206f776e6572206f7220726f6c6500604482015290519081900360640190fd5b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040517f167cccccc6e9b2892a740ec13fc1e51d3de8ea384f25bd87fee7412d588637e290600090a25050565b60075460009060ff1615610e0557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b610e10848484612dfe565b600254604080517f5c65816500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808816600483015233602483018190529251610ed494899493610ecf938993921691635c65816591604480820192602092909190829003018186803b158015610e9757600080fd5b505afa158015610eab573d6000803e3d6000fd5b505050506040513d6020811015610ec157600080fd5b50519063ffffffff6132f316565b612c0b565b5060019392505050565b600754610100900473ffffffffffffffffffffffffffffffffffffffff16610f04611f9b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f5257503373ffffffffffffffffffffffffffffffffffffffff8216145b610fbd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f756e617574686f72697a65643a206e6f74206f776e6572206f7220726f6c6500604482015290519081900360640190fd5b600780547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040517fb6b8f1859c5c352e5ffad07d0f77e384ac725512c015bd3a3ffc885831c8a42590600090a25050565b60085473ffffffffffffffffffffffffffffffffffffffff16611055611f9b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110a357503373ffffffffffffffffffffffffffffffffffffffff8216145b61110e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f756e617574686f72697a65643a206e6f74206f776e6572206f7220726f6c6500604482015290519081900360640190fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040517fb80482a293ca2e013eda8683c9bd7fc8347cfdaeea5ede58cba46df502c2a60490600090a25050565b601281565b60075460009060ff16156111f857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b600254604080517f5c658165000000000000000000000000000000000000000000000000000000008152336004820181905273ffffffffffffffffffffffffffffffffffffffff80881660248401529251610a0e9491938893610ecf938993921691635c65816591604480820192602092909190829003018186803b15801561128057600080fd5b505afa158015611294573d6000803e3d6000fd5b505050506040513d60208110156112aa57600080fd5b50519063ffffffff61333c16565b60085473ffffffffffffffffffffffffffffffffffffffff1633811461133f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560085460405173ffffffffffffffffffffffffffffffffffffffff909116907f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90600090a250565b6113b761324e565b600681905560405181907f28a10a2e0b5582da7164754cb994f6214b8af6aa7f7e003305fbc09e7106c51390600090a250565b60075460ff161561145c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b600754610100900473ffffffffffffffffffffffffffffffffffffffff163381146114e857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831661156a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f63616e2774206d696e7420746f2061646472657373207a65726f000000000000604482015290519081900360640190fd5b60055461157d908363ffffffff61333c16565b6005819055600654116115f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f6d617820737570706c7920657863656564656400000000000000000000000000604482015290519081900360640190fd5b600254604080517f21e5383a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201869052915191909216916321e5383a91604480830192600092919082900301818387803b15801561166c57600080fd5b505af1158015611680573d6000803e3d6000fd5b505060408051858152905173ffffffffffffffffffffffffffffffffffffffff87169350600092507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505050565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b6116fb61324e565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fc06d038b1f32a4f7e4b7cc1d794af10bf1dbbdc710af43782ae78f704d9beafc90600090a250565b61177261324e565b60606040518060600160405280603581526020016135e3603591399050806040516020018082805190602001908083835b602083106117e057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016117a3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120838360405160200180838380828437808301925050509250505060405160208183030381529060405280519060200120146118b757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6465636c61726174696f6e20696e636f72726563740000000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35050600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905550565b60075460009060ff161561199e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b60045473ffffffffffffffffffffffffffffffffffffffff16338114611a2557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b611a30868585612dfe565b600254604080517f5c65816500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808a16600483015280891660248301529151611aba938a938a93610ecf938a939290921691635c65816591604480820192602092909190829003018186803b158015610e9757600080fd5b50600195945050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b6040518060400160405280600381526020017f322e31000000000000000000000000000000000000000000000000000000000081525081565b60075460ff1681565b600254604080517fe3d670d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529151600093929092169163e3d670d791602480820192602092909190829003018186803b158015611b9b57600080fd5b505afa158015611baf573d6000803e3d6000fd5b505050506040513d6020811015611bc557600080fd5b505192915050565b611bd56133b0565b60015473ffffffffffffffffffffffffffffffffffffffff908116911614611c5e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f756e617574686f72697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60075460ff1615611d6357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b600754610100900473ffffffffffffffffffffffffffffffffffffffff16338114611def57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b611df983836133b4565b600254604080517f5c65816500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808716600483015233602483018190529251611e8094889493610ecf938993921691635c65816591604480820192602092909190829003018186803b158015610e9757600080fd5b505050565b60085473ffffffffffffffffffffffffffffffffffffffff16338114611f0c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560085460405173ffffffffffffffffffffffffffffffffffffffff909116907f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890600090a250565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6040518060400160405280600381526020017f525356000000000000000000000000000000000000000000000000000000000081525081565b611ff861324e565b60075460ff1661206957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f636f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166120eb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f20616464726573730000000000000000000000000000000000000000604482015290519081900360640190fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907f170ee3488a79c35a0d86eff88a7857910c11193864052c0323ad49222232a2d790600090a2600254604080517ff84afd4800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529151919092169163f84afd4891602480830192600092919082900301818387803b1580156121a057600080fd5b505af11580156121b4573d6000803e3d6000fd5b5050505050565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b60075460009060ff161561224c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b600254604080517f5c658165000000000000000000000000000000000000000000000000000000008152336004820181905273ffffffffffffffffffffffffffffffffffffffff80881660248401529251610a0e9491938893610ecf938993921691635c65816591604480820192602092909190829003018186803b158015610e9757600080fd5b60075460009060ff161561234957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b610a0e338484612dfe565b61235c61324e565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fe554fc9a6ce410c9b9537cefc8440997bdbd03a2a87193c1a7f4ee085188ced190600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b6123ef61324e565b60025473ffffffffffffffffffffffffffffffffffffffff161561247457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f63616e206f6e6c792062652072756e206f6e6365000000000000000000000000604482015290519081900360640190fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663fb5689666040518163ffffffff1660e01b815260040160206040518083038186803b1580156124bf57600080fd5b505afa1580156124d3573d6000803e3d6000fd5b505050506040513d60208110156124e957600080fd5b5051600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051918316916318160ddd91600480820192602092909190829003018186803b15801561257f57600080fd5b505afa158015612593573d6000803e3d6000fd5b505050506040513d60208110156125a957600080fd5b5051600555604080517fd5abeb01000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff83169163d5abeb01916004808301926020929190829003018186803b15801561261457600080fd5b505afa158015612628573d6000803e3d6000fd5b505050506040513d602081101561263e57600080fd5b505160068190556040517f28a10a2e0b5582da7164754cb994f6214b8af6aa7f7e003305fbc09e7106c51390600090a2600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560085460405173ffffffffffffffffffffffffffffffffffffffff909116907f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90600090a28073ffffffffffffffffffffffffffffffffffffffff166379ba50976040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561272357600080fd5b505af1158015612737573d6000803e3d6000fd5b5050604080517f2cd271e7000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff85169350632cd271e79250602480830192600092919082900301818387803b1580156127a857600080fd5b505af11580156127bc573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561280857600080fd5b505af115801561281c573d6000803e3d6000fd5b5050604080517f96cd5536000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff851693506396cd55369250602480830192600092919082900301818387803b15801561288d57600080fd5b505af11580156128a1573d6000803e3d6000fd5b5050604080517f2c4d4d18000000000000000000000000000000000000000000000000000000008152600060048201819052915173ffffffffffffffffffffffffffffffffffffffff86169450632c4d4d1893506024808301939282900301818387803b15801561291157600080fd5b505af1158015612925573d6000803e3d6000fd5b5050604080517f2cd271e7000000000000000000000000000000000000000000000000000000008152600060048201819052915173ffffffffffffffffffffffffffffffffffffffff86169450632cd271e793506024808301939282900301818387803b15801561299557600080fd5b505af11580156129a9573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16634fdb7f446040518163ffffffff1660e01b81526004018080602001828103825260358152602001806135e360359139604001915050600060405180830381600087803b158015612a1457600080fd5b505af1158015612a28573d6000803e3d6000fd5b505050505050565b60065481565b600254604080517f5c65816500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152848116602483015291516000939290921691635c65816591604480820192602092909190829003018186803b158015612ab557600080fd5b505afa158015612ac9573d6000803e3d6000fd5b505050506040513d6020811015612adf57600080fd5b50519392505050565b60075460009060ff1615612b5d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b60045473ffffffffffffffffffffffffffffffffffffffff16338114612be457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b610b1e858585612c0b565b60025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8216612c8d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f7370656e6465722063616e6e6f742062652061646472657373207a65726f0000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316612d0f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f686f6c6465722063616e6e6f742062652061646472657373207a65726f000000604482015290519081900360640190fd5b600254604080517f33dd1b8a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152858116602483015260448201859052915191909216916333dd1b8a91606480830192600092919082900301818387803b158015612d9257600080fd5b505af1158015612da6573d6000803e3d6000fd5b505060408051848152905173ffffffffffffffffffffffffffffffffffffffff8087169450871692507f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216612e8057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f63616e2774207472616e7366657220746f2061646472657373207a65726f0000604482015290519081900360640190fd5b600254604080517fcf8eeb7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590529151919092169163cf8eeb7e91604480830192600092919082900301818387803b158015612efb57600080fd5b505af1158015612f0f573d6000803e3d6000fd5b50506003546000925073ffffffffffffffffffffffffffffffffffffffff1615905061314157600354604080517f7ca87cb600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301526044820186905291519190921691637ca87cb69160648083019260209291908290030181600087803b158015612fb957600080fd5b505af1158015612fcd573d6000803e3d6000fd5b505050506040513d6020811015612fe357600080fd5b505190508181111561305657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f7472616e73616374696f6e20666565206f7574206f6620626f756e6473000000604482015290519081900360640190fd5b600254600954604080517f21e5383a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101859052905191909216916321e5383a91604480830192600092919082900301818387803b1580156130d457600080fd5b505af11580156130e8573d6000803e3d6000fd5b505060095460408051858152905173ffffffffffffffffffffffffffffffffffffffff928316945091881692507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35b60025473ffffffffffffffffffffffffffffffffffffffff166321e5383a84613170858563ffffffff6132f316565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156131d957600080fd5b505af11580156131ed573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff848116915085167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61323785856132f3565b60408051918252519081900360200190a350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1661326f6133b0565b73ffffffffffffffffffffffffffffffffffffffff16146132f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f63616c6c6572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b565b600061333583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613531565b9392505050565b60008282018381101561333557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b73ffffffffffffffffffffffffffffffffffffffff821661343657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e2774206275726e2066726f6d2061646472657373207a65726f00000000604482015290519081900360640190fd5b600554613449908263ffffffff6132f316565b600555600254604080517fcf8eeb7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590529151919092169163cf8eeb7e91604480830192600092919082900301818387803b1580156134c757600080fd5b505af11580156134db573d6000803e3d6000fd5b50506040805184815290516000935073ffffffffffffffffffffffffffffffffffffffff861692507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600081848411156135da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561359f578181015183820152602001613587565b50505050905090810190601f1680156135cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe49206865726562792072656e6f756e6365206f776e657273686970206f66207468697320636f6e747261637420666f72657665722ea165627a7a72305820ff21448e107a290591da2fb4a5c38e03f84252d226792d92dae425cf027694d90029
Deployed Bytecode Sourcemap
16175:13117:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16175:13117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17415:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17415:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16643:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22597:192;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22597:192:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;25388:229;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25388:229:0;;;;;;;;;;;;;;;;;;:::i;11527:227::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11527:227:0;;;;:::i;:::-;;16511:26;;;:::i;:::-;;;;;;;;;;;;;;;;19037:189;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19037:189:0;;;;:::i;23044:283::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23044:283:0;;;;;;;;;;;;;;;;;;:::i;18682:147::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18682:147:0;;;;:::i;18882:::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18882:147:0;;;;:::i;17550:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23581:258;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23581:258:0;;;;;;;;;:::i;20616:106::-;;;:::i;20284:155::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20284:155:0;;:::i;24475:405::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24475:405:0;;;;;;;;;:::i;16699:27::-;;;:::i;19793:178::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19793:178:0;;;;:::i;12271:450::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12271:450:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;12271:450:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;12271:450:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;12271:450:0;;-1:-1:-1;12271:450:0;-1:-1:-1;12271:450:0;:::i;26142:339::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;26142:339:0;;;;;;;;;;;;;;;;;;;;;;;:::i;10984:99::-;;;:::i;17505:38::-;;;:::i;16597:18::-;;;:::i;21202:120::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21202:120:0;;;;:::i;11828:207::-;;;:::i;24987:247::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24987:247:0;;;;;;;;;:::i;20476:101::-;;;:::i;16448:29::-;;;:::i;10814:79::-;;;:::i;17461:37::-;;;:::i;19435:284::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19435:284:0;;;;:::i;16671:21::-;;;:::i;24098:318::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24098:318:0;;;;;;;;;:::i;21622:184::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21622:184:0;;;;;;;;;:::i;20053:179::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20053:179:0;;;;:::i;16397:26::-;;;:::i;28280:1009::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28280:1009:0;;;;:::i;16544:24::-;;;:::i;21407:146::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21407:146:0;;;;;;;;;;;:::i;25747:241::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25747:241:0;;;;;;;;;;;;;;;;;;:::i;18042:113::-;;;:::i;17415:39::-;;;;;;;;;;;;;;;;;;;:::o;16643:21::-;;;;;;;;;:::o;22597:192::-;21015:6;;22701:4;;21015:6;;21014:7;21006:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22723:36;22732:10;22744:7;22753:5;22723:8;:36::i;:::-;-1:-1:-1;22777:4:0;22597:192;;;;:::o;25388:229::-;21015:6;;25539:4;;21015:6;;21014:7;21006:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25505:14;;;;18310:10;:18;;18302:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25561:26;25571:4;25577:2;25581:5;25561:9;:26::i;:::-;-1:-1:-1;25605:4:0;;25388:229;-1:-1:-1;;;;25388:229:0:o;11527:227::-;11208:12;:10;:12::i;:::-;11609:22;;;11601:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11692:6;;;11674:35;;;;;;;11692:6;;;11674:35;;;11720:15;:26;;;;;;;;;;;;;;;11527:227::o;16511:26::-;;;;:::o;19037:189::-;19111:12;;;;18544:7;:5;:7::i;:::-;18530:21;;:10;:21;;;:43;;;-1:-1:-1;18555:10:0;:18;;;;18530:43;18522:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19136:12;:30;;;;;;;;;;;;;19182:36;;;;-1:-1:-1;;19182:36:0;19037:189;;:::o;23044:283::-;21015:6;;23162:4;;21015:6;;21014:7;21006:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23184:26;23194:4;23200:2;23204:5;23184:9;:26::i;:::-;23248:11;;:37;;;;;;:11;:37;;;;;;;23236:10;23248:37;;;;;;;;23221:76;;23230:4;;23236:10;23248:48;;23290:5;;23248:11;;;:19;;:37;;;;;;;;;;;;;;;:11;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;23248:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23248:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23248:37:0;;:48;:41;:48;:::i;:::-;23221:8;:76::i;:::-;-1:-1:-1;23315:4:0;23044:283;;;;;:::o;18682:147::-;18744:6;;;;;;;18544:7;:5;:7::i;:::-;18530:21;;:10;:21;;;:43;;;-1:-1:-1;18555:10:0;:18;;;;18530:43;18522:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18763:6;:18;;;;;;;;;;;;;;;;;;18797:24;;;;-1:-1:-1;;18797:24:0;18682:147;;:::o;18882:::-;18944:6;;;;18544:7;:5;:7::i;:::-;18530:21;;:10;:21;;;:43;;;-1:-1:-1;18555:10:0;:18;;;;18530:43;18522:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18963:6;:18;;;;;;;;;;;;;18997:24;;;;-1:-1:-1;;18997:24:0;18882:147;;:::o;17550:35::-;17583:2;17550:35;:::o;23581:258::-;21015:6;;23700:4;;21015:6;;21014:7;21006:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23752:11;;:40;;;;;;23731:10;23752:40;;;;;;:11;:40;;;;;;;;;23722:87;;23731:10;;23743:7;;23752:56;;23797:10;;23752:11;;;:19;;:40;;;;;;;;;;;;;;;:11;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;23752:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23752:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23752:40:0;;:56;:44;:56;:::i;20616:106::-;20649:6;;;;18310:10;:18;;18302:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20668:6;:14;;;;;;20707:6;;20698:16;;20707:6;;;;;20698:16;;20677:5;;20698:16;20616:106;:::o;20284:155::-;11208:12;:10;:12::i;:::-;20361:9;:24;;;20401:30;;20373:12;;20401:30;;;;;20284:155;:::o;24475:405::-;21015:6;;;;21014:7;21006:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24572:6;;;;;;;18310:10;:18;;18302:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24604:21;;;24596:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24683:11;;:22;;24699:5;24683:22;:15;:22;:::i;:::-;24669:11;:36;;;24738:9;;-1:-1:-1;24716:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24782:11;;:38;;;;;;:11;:38;;;;;;;;;;;;;;;:11;;;;;:22;;:38;;;;;:11;;:38;;;;;;;:11;;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;24782:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24836:36:0;;;;;;;;;;;;-1:-1:-1;24853:1:0;;-1:-1:-1;24836:36:0;;;;;;;;;21055:1;24475:405;;:::o;16699:27::-;;;;;;:::o;19793:178::-;11208:12;:10;:12::i;:::-;19873:14;:34;;;;;;;;;;;;;19923:40;;;;-1:-1:-1;;19923:40:0;19793:178;:::o;12271:450::-;11208:12;:10;:12::i;:::-;12357:33;:91;;;;;;;;;;;;;;;;;;;12565:19;12548:37;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;12548:37:0;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12548:37:0;;;12538:48;;;;;;12508:11;;12491:29;;;;;;;30:3:-1;22:6;14;1:33;57:3;49:6;45:16;35:26;;12491:29:0;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12491:29:0;;;12481:40;;;;;;:105;12459:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12680:1;12664:6;;12643:40;;;12664:6;;;;12643:40;;12680:1;;12643:40;-1:-1:-1;;12711:1:0;12694:19;;;;;;-1:-1:-1;12271:450:0:o;26142:339::-;21015:6;;26316:4;;21015:6;;21014:7;21006:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26282:14;;;;18310:10;:18;;18302:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26338:28;26348:6;26356:2;26360:5;26338:9;:28::i;:::-;26403:11;;:36;;;;;;:11;:36;;;;;;;;;;;;;;;;26377:74;;26386:6;;26394:7;;26403:47;;26444:5;;26403:11;;;;;:19;;:36;;;;;;;;;;;;;;;:11;:36;;;5:2:-1;;;;30:1;27;20:12;26377:74:0;-1:-1:-1;26469:4:0;;26142:339;-1:-1:-1;;;;;26142:339:0:o;10984:99::-;11060:15;;;;10984:99;:::o;17505:38::-;;;;;;;;;;;;;;;;;;;:::o;16597:18::-;;;;;;:::o;21202:120::-;21287:11;;:27;;;;;;:11;:27;;;;;;;;;21260:7;;21287:11;;;;;:19;;:27;;;;;;;;;;;;;;;:11;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;21287:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21287:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21287:27:0;;21202:120;-1:-1:-1;;21202:120:0:o;11828:207::-;11902:12;:10;:12::i;:::-;11883:15;;:31;:15;;;:31;;;11875:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11976:15;;;11968:6;;11947:45;;11976:15;;;;;11968:6;;;;11947:45;;;12012:15;;;12003:24;;;;12012:15;;;;12003:24;;;;;;11828:207::o;24987:247::-;21015:6;;;;21014:7;21006:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25088:6;;;;;;;18310:10;:18;;18302:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25112:21;25118:7;25127:5;25112;:21::i;:::-;25174:11;;:40;;;;;;:11;:40;;;;;;;25162:10;25174:40;;;;;;;;25144:82;;25153:7;;25162:10;25174:51;;25219:5;;25174:11;;;:19;;:40;;;;;;;;;;;;;;;:11;:40;;;5:2:-1;;;;30:1;27;20:12;25144:82:0;21055:1;24987:247;;:::o;20476:101::-;20507:6;;;;18310:10;:18;;18302:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20526:6;:13;;;;20535:4;20526:13;;;20562:6;;20555:14;;20562:6;;;;;20555:14;;20526:6;;20555:14;20476:101;:::o;16448:29::-;;;;;;:::o;10814:79::-;10852:7;10879:6;;;10814:79;:::o;17461:37::-;;;;;;;;;;;;;;;;;;;:::o;19435:284::-;11208:12;:10;:12::i;:::-;20839:6;;;;20831:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19541:31;;;19533:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19605:44;;;;;;;;;;;19660:11;;:51;;;;;;:11;:51;;;;;;;;;:11;;;;;:32;;:51;;;;;:11;;:51;;;;;;;:11;;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;19660:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19660:51:0;;;;19435:284;:::o;16671:21::-;;;;;;:::o;24098:318::-;21015:6;;24222:4;;21015:6;;21014:7;21006:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24314:11;;:40;;;;;;24267:10;24314:40;;;;;;:11;:40;;;;;;;;;24244:142;;24267:10;;24292:7;;24314:61;;24359:15;;24314:11;;;:19;;:40;;;;;;;;;;;;;;;:11;:40;;;5:2:-1;;;;30:1;27;20:12;21622:184:0;21015:6;;21722:4;;21015:6;;21014:7;21006:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21744:32;21754:10;21766:2;21770:5;21744:9;:32::i;20053:179::-;11208:12;:10;:12::i;:::-;20135;:38;;;;;;;;;;;;;20189:35;;;;-1:-1:-1;;20189:35:0;20053:179;:::o;16397:26::-;;;;;;:::o;28280:1009::-;11208:12;:10;:12::i;:::-;28381:11;;28373:34;28381:11;28373:34;28365:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28443:16;28470:22;28443:50;;28540:8;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28540:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28540:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28540:35:0;28504:11;:72;;;;;;;;;;;28645:22;;;;;;;;:20;;;;;;:22;;;;;28540:35;;28645:22;;;;;;;;:20;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;28645:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28645:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28645:22:0;28631:11;:36;28690:20;;;;;;;;:18;;;;;;:20;;;;;28645:22;;28690:20;;;;;;;:18;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;28690:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28690:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28690:20:0;28678:9;:32;;;28726:27;;;;;;;28795:6;:14;;;;;;28834:6;;28825:16;;28834:6;;;;;28825:16;;28804:5;;28825:16;28854:8;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28854:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;28938:36:0;;;;;;28968:4;28938:36;;;;;;:21;;;;-1:-1:-1;28938:21:0;;-1:-1:-1;28938:36:0;;;;;-1:-1:-1;;28938:36:0;;;;;;;-1:-1:-1;28938:21:0;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;28938:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28938:36:0;;;;28985:8;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28985:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29012:46:0;;;;;;29052:4;29012:46;;;;;;:31;;;;-1:-1:-1;29012:31:0;;-1:-1:-1;29012:46:0;;;;;-1:-1:-1;;29012:46:0;;;;;;;-1:-1:-1;29012:31:0;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;29012:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29110:33:0;;;;;;29140:1;29110:33;;;;;;;;:21;;;;-1:-1:-1;29110:21:0;;-1:-1:-1;29110:33:0;;;;;29140:1;29110:33;;;;;29140:1;29110:21;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;29110:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29154:33:0;;;;;;29184:1;29154:33;;;;;;;;:21;;;;-1:-1:-1;29154:21:0;;-1:-1:-1;29154:33:0;;;;;29184:1;29154:33;;;;;29184:1;29154:21;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;29154:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29154:33:0;;;;29198:8;:26;;;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29198:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29198:83:0;;;;11231:1;28280:1009;:::o;16544:24::-;;;;:::o;21407:146::-;21509:11;;:36;;;;;;:11;:36;;;;;;;;;;;;;;;;21482:7;;21509:11;;;;;:19;;:36;;;;;;;;;;;;;;;:11;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;21509:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21509:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21509:36:0;;21407:146;-1:-1:-1;;;21407:146:0:o;25747:241::-;21015:6;;25904:4;;21015:6;;21014:7;21006:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25870:14;;;;18310:10;:18;;18302:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25926:32;25935:6;25943:7;25952:5;25926:8;:32::i;18042:113::-;18135:11;;;;18042:113;:::o;27766:338::-;27860:21;;;27852:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27935:20;;;27927:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28002:11;;:46;;;;;;:11;:46;;;;;;;;;;;;;;;;;;;;;;:11;;;;;:22;;:46;;;;;:11;;:46;;;;;;;:11;;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;28002:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;28064:32:0;;;;;;;;;;;;;-1:-1:-1;28064:32:0;;;-1:-1:-1;28064:32:0;;;;;;;;;27766:338;;;:::o;26601:632::-;26689:16;;;26681:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26751:11;;:35;;;;;;:11;:35;;;;;;;;;;;;;;;:11;;;;;:22;;:35;;;;;:11;;:35;;;;;;;:11;;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;26751:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;26837:12:0;;26797:11;;-1:-1:-1;26829:35:0;26837:12;26829:35;;-1:-1:-1;26825:296:0;;26887:12;;:42;;;;;;:12;:42;;;;;;;;;;;;;;;;;;;;;;:12;;;;;:25;;:42;;;;;;;;;;;;;;:12;;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;26887:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26887:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26887:42:0;;-1:-1:-1;26952:12:0;;;;26944:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27015:11;;27038:12;;27015:41;;;;;;:11;27038:12;;;27015:41;;;;;;;;;;;;:11;;;;;:22;;:41;;;;;:11;;:41;;;;;;;:11;;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;27015:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;27091:12:0;;27076:33;;;;;;;;27091:12;;;;;-1:-1:-1;27076:33:0;;;;-1:-1:-1;27076:33:0;;;;;;;;;;26825:296;27133:11;;;;:22;27156:2;27160:14;:5;27170:3;27160:14;:9;:14;:::i;:::-;27133:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27133:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;27191:34:0;;;;;-1:-1:-1;27191:34:0;;;27210:14;:5;27220:3;27210:9;:14::i;:::-;27191:34;;;;;;;;;;;;;;;26601:632;;;;:::o;11248:109::-;11319:6;;;;11303:12;:10;:12::i;:::-;:22;;;11295:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11248:109::o;4110:136::-;4168:7;4195:43;4199:1;4202;4195:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4188:50;4110:136;-1:-1:-1;;;4110:136:0:o;3654:181::-;3712:7;3744:5;;;3768:6;;;;3760:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9363:98;9443:10;9363:98;:::o;27341:287::-;27416:21;;;27408:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27497:11;;:22;;27513:5;27497:22;:15;:22;:::i;:::-;27483:11;:36;27530:11;;:38;;;;;;:11;:38;;;;;;;;;;;;;;;:11;;;;;:22;;:38;;;;;:11;;:38;;;;;;;:11;;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;27530:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;27584:36:0;;;;;;;;27610:1;;-1:-1:-1;27584:36:0;;;;-1:-1:-1;27584:36:0;;;;;;;;;27341:287;;:::o;4696:192::-;4782:7;4818:12;4810:6;;;;4802:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4802:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4854:5:0;;;4696:192::o
Swarm Source
bzzr://ff21448e107a290591da2fb4a5c38e03f84252d226792d92dae425cf027694d9
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.