Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
10,000,000,000 IDA
Holders
30,429
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
IdaToken
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-09-19 */ pragma solidity ^0.4.24; /** * Utility library of inline functions on addresses */ library AddressUtils { /** * Returns whether the target address is a contract * @dev This function will return false if invoked during the constructor of a contract, * as the code is not actually created until after the constructor finishes. * @param addr address to check * @return whether the target address is a contract */ function isContract(address addr) internal view returns (bool) { uint256 size; // XXX Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. // See https://ethereum.stackexchange.com/a/14016/36603 // for more details about how this works. // TODO Check this again before the Serenity release, because all addresses will be // contracts then. // solium-disable-next-line security/no-inline-assembly assembly { size := extcodesize(addr) } return size > 0; } } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } /** * @title Roles * @author Francisco Giordano (@frangio) * @dev Library for managing addresses assigned to a Role. * See RBAC.sol for example usage. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev give an address access to this role */ function add(Role storage role, address addr) internal { role.bearer[addr] = true; } /** * @dev remove an address' access to this role */ function remove(Role storage role, address addr) internal { role.bearer[addr] = false; } /** * @dev check if an address has this role * // reverts */ function check(Role storage role, address addr) view internal { require(has(role, addr)); } /** * @dev check if an address has this role * @return bool */ function has(Role storage role, address addr) view internal returns (bool) { return role.bearer[addr]; } } /** * @title RBAC (Role-Based Access Control) * @author Matt Condon (@Shrugs) * @dev Stores and provides setters and getters for roles and addresses. * Supports unlimited numbers of roles and addresses. * See //contracts/mocks/RBACMock.sol for an example of usage. * This RBAC method uses strings to key roles. It may be beneficial * for you to write your own implementation of this interface using Enums or similar. */ contract RBAC { using Roles for Roles.Role; mapping (string => Roles.Role) private roles; event RoleAdded(address indexed operator, string role); event RoleRemoved(address indexed operator, string role); /** * @dev reverts if addr does not have role * @param _operator address * @param _role the name of the role * // reverts */ function checkRole(address _operator, string _role) view public { roles[_role].check(_operator); } /** * @dev determine if addr has role * @param _operator address * @param _role the name of the role * @return bool */ function hasRole(address _operator, string _role) view public returns (bool) { return roles[_role].has(_operator); } /** * @dev add a role to an address * @param _operator address * @param _role the name of the role */ function addRole(address _operator, string _role) internal { roles[_role].add(_operator); emit RoleAdded(_operator, _role); } /** * @dev remove a role from an address * @param _operator address * @param _role the name of the role */ function removeRole(address _operator, string _role) internal { roles[_role].remove(_operator); emit RoleRemoved(_operator, _role); } /** * @dev modifier to scope access to a single role (uses msg.sender as addr) * @param _role the name of the role * // reverts */ modifier onlyRole(string _role) { checkRole(msg.sender, _role); _; } /** * @dev modifier to scope access to a set of roles (uses msg.sender as addr) * @param _roles the names of the roles to scope access to * // reverts * * @TODO - when solidity supports dynamic arrays as arguments to modifiers, provide this * see: https://github.com/ethereum/solidity/issues/2467 */ // modifier onlyRoles(string[] _roles) { // bool hasAnyRole = false; // for (uint8 i = 0; i < _roles.length; i++) { // if (hasRole(msg.sender, _roles[i])) { // hasAnyRole = true; // break; // } // } // require(hasAnyRole); // _; // } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * See https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) internal balances; uint256 internal totalSupply_; /** * @dev Total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev Transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_value <= balances[msg.sender]); require(_to != address(0)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * https://github.com/ethereum/EIPs/issues/20 * Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); require(_to != address(0)); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * 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 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { require(_spender != address(0)); allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval( address _spender, uint256 _addedValue ) public returns (bool) { require(_spender != address(0)); allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval( address _spender, uint256 _subtractedValue ) public returns (bool) { require(_spender != address(0)); uint256 oldValue = allowed[msg.sender][_spender]; if (_subtractedValue >= oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract IdaToken is Ownable, RBAC, StandardToken { using AddressUtils for address; using SafeMath for uint256; string public name = "IDA"; string public symbol = "IDA"; uint8 public decimals = 18; // 初始发行量 100 亿 uint256 public constant INITIAL_SUPPLY = 10000000000; // 基石轮额度 3.96 亿 uint256 public constant FOOTSTONE_ROUND_AMOUNT = 396000000; // 私募额度 12 亿 uint256 public constant PRIVATE_SALE_AMOUNT = 1200000000; // 2019/05/01 之前的 Owner 锁仓额度 50 亿 uint256 public constant OWNER_LOCKED_IN_COMMON = 5000000000; // 通用额度 72.04 亿 (IDA 基金会、研发、生态建设、社区建设、运营) uint256 public constant COMMON_PURPOSE_AMOUNT = 7204000000; // 团队预留额度1 1.2 亿 uint256 public constant TEAM_RESERVED_AMOUNT1 = 120000000; // 团队预留额度2 3.6 亿 uint256 public constant TEAM_RESERVED_AMOUNT2 = 360000000; // 团队预留额度3 3.6 亿 uint256 public constant TEAM_RESERVED_AMOUNT3 = 360000000; // 团队预留额度4 3.6 亿 uint256 public constant TEAM_RESERVED_AMOUNT4 = 360000000; // 私募中的 Ether 兑换比率,1 Ether = 10000 IDA uint256 public constant EXCHANGE_RATE_IN_PRIVATE_SALE = 10000; // 2018/10/01 00:00:01 的时间戳常数 uint256 public constant TIMESTAMP_OF_20181001000001 = 1538352001; // 2018/10/02 00:00:01 的时间戳常数 uint256 public constant TIMESTAMP_OF_20181002000001 = 1538438401; // 2018/11/01 00:00:01 的时间戳常数 uint256 public constant TIMESTAMP_OF_20181101000001 = 1541030401; // 2019/02/01 00:00:01 的时间戳常数 uint256 public constant TIMESTAMP_OF_20190201000001 = 1548979201; // 2019/05/01 00:00:01 的时间戳常数 uint256 public constant TIMESTAMP_OF_20190501000001 = 1556668801; // 2019/08/01 00:00:01 的时间戳常数 uint256 public constant TIMESTAMP_OF_20190801000001 = 1564617601; // 2019/11/01 00:00:01 的时间戳常数 uint256 public constant TIMESTAMP_OF_20191101000001 = 1572566401; // 2020/11/01 00:00:01 的时间戳常数 uint256 public constant TIMESTAMP_OF_20201101000001 = 1604188801; // 2021/11/01 00:00:01 的时间戳常数 uint256 public constant TIMESTAMP_OF_20211101000001 = 1635724801; // Role constant of Partner Whitelist string public constant ROLE_PARTNERWHITELIST = "partnerWhitelist"; // Role constant of Privatesale Whitelist string public constant ROLE_PRIVATESALEWHITELIST = "privateSaleWhitelist"; // 由 Owner 分发的总数额 uint256 public totalOwnerReleased; // 所有 partner 的已分发额总数 uint256 public totalPartnersReleased; // 所有私募代理人的已分发数额总数 uint256 public totalPrivateSalesReleased; // 通用额度的已分发数额总数 uint256 public totalCommonReleased; // 团队保留额度的已分发数额总数1 uint256 public totalTeamReleased1; // 团队保留额度的已分发数额总数2 uint256 public totalTeamReleased2; // 团队保留额度的已分发数额总数3 uint256 public totalTeamReleased3; // 团队保留额度的已分发数额总数4 uint256 public totalTeamReleased4; // Partner 地址数组 address[] private partners; // Partner 地址在数组中索引 mapping (address => uint256) private partnersIndex; // 私募代理人地址数组 address[] private privateSaleAgents; // 私募代理人地址在数组中的索引 mapping (address => uint256) private privateSaleAgentsIndex; // Partner 限额映射 mapping (address => uint256) private partnersAmountLimit; // Partner 实际已转账额度映射 mapping (address => uint256) private partnersWithdrawed; // 私募代理人实际转出(售出)的 token 数量映射 mapping (address => uint256) private privateSalesReleased; // Owner 的钱包地址 address ownerWallet; // Log 特定的转账函数操作 event TransferLog(address from, address to, bytes32 functionName, uint256 value); /** * @dev 构造函数时需传入 Owner 指定的钱包地址 * @param _ownerWallet Owner 的钱包地址 */ constructor(address _ownerWallet) public { ownerWallet = _ownerWallet; totalSupply_ = INITIAL_SUPPLY * (10 ** uint256(decimals)); balances[msg.sender] = totalSupply_; } /** * @dev 变更 Owner 的钱包地址 * @param _ownerWallet Owner 的钱包地址 */ function changeOwnerWallet(address _ownerWallet) public onlyOwner { ownerWallet = _ownerWallet; } /** * @dev 添加 partner 地址到白名单并设置其限额 * @param _addr Partner 地址 * @param _amount Partner 的持有限额 */ function addAddressToPartnerWhiteList(address _addr, uint256 _amount) public onlyOwner { // 仅允许在 2018/11/01 00:00:01 之前调用 require(block.timestamp < TIMESTAMP_OF_20181101000001); // 如 _addr 不在白名单内,则执行添加处理 if (!hasRole(_addr, ROLE_PARTNERWHITELIST)) { addRole(_addr, ROLE_PARTNERWHITELIST); // 把给定地址加入 partner 数组 partnersIndex[_addr] = partners.length; partners.push(_addr); } // Owner 可以多次调用此函数以达到修改 partner 授权上限的效果 partnersAmountLimit[_addr] = _amount; } /** * @dev 将 partner 地址从白名单移除 * @param _addr Partner 地址 */ function removeAddressFromPartnerWhiteList(address _addr) public onlyOwner { // 仅允许在 2018/11/01 00:00:01 之前调用 require(block.timestamp < TIMESTAMP_OF_20181101000001); // 仅允许 _addr 已在白名单内时使用 require(hasRole(_addr, ROLE_PARTNERWHITELIST)); removeRole(_addr, ROLE_PARTNERWHITELIST); partnersAmountLimit[_addr] = 0; // 把给定地址从 partner 数组中删除 uint256 partnerIndex = partnersIndex[_addr]; uint256 lastPartnerIndex = partners.length.sub(1); address lastPartner = partners[lastPartnerIndex]; partners[partnerIndex] = lastPartner; delete partners[lastPartnerIndex]; partners.length--; partnersIndex[_addr] = 0; partnersIndex[lastPartner] = partnerIndex; } /** * @dev 添加私募代理人地址到白名单并设置其限额 * @param _addr 私募代理人地址 * @param _amount 私募代理人的转账限额 */ function addAddressToPrivateWhiteList(address _addr, uint256 _amount) public onlyOwner { // 仅允许在 2018/10/02 00:00:01 之前调用 require(block.timestamp < TIMESTAMP_OF_20181002000001); // 检查 _addr 是否已在白名单内以保证 approve 函数仅会被调用一次; // 后续如还需要更改授权额度, // 请直接使用安全的 increaseApproval 和 decreaseApproval 函数 require(!hasRole(_addr, ROLE_PRIVATESALEWHITELIST)); addRole(_addr, ROLE_PRIVATESALEWHITELIST); approve(_addr, _amount); // 把给定地址加入私募代理人数组 privateSaleAgentsIndex[_addr] = privateSaleAgents.length; privateSaleAgents.push(_addr); } /** * @dev 将私募代理人地址从白名单移除 * @param _addr 私募代理人地址 */ function removeAddressFromPrivateWhiteList(address _addr) public onlyOwner { // 仅允许在 2018/10/02 00:00:01 之前调用 require(block.timestamp < TIMESTAMP_OF_20181002000001); // 仅允许 _addr 已在白名单内时使用 require(hasRole(_addr, ROLE_PRIVATESALEWHITELIST)); removeRole(_addr, ROLE_PRIVATESALEWHITELIST); approve(_addr, 0); // 把给定地址从私募代理人数组中删除 uint256 agentIndex = privateSaleAgentsIndex[_addr]; uint256 lastAgentIndex = privateSaleAgents.length.sub(1); address lastAgent = privateSaleAgents[lastAgentIndex]; privateSaleAgents[agentIndex] = lastAgent; delete privateSaleAgents[lastAgentIndex]; privateSaleAgents.length--; privateSaleAgentsIndex[_addr] = 0; privateSaleAgentsIndex[lastAgent] = agentIndex; } /** * @dev 允许接受转账的 fallback 函数 */ function() external payable { privateSale(msg.sender); } /** * @dev 私募处理 * @param _beneficiary 收取 token 地址 */ function privateSale(address _beneficiary) public payable onlyRole(ROLE_PRIVATESALEWHITELIST) { // 仅允许 EOA 购买 require(msg.sender == tx.origin); require(!msg.sender.isContract()); // 仅允许在 2018/10/02 00:00:01 之前购买 require(block.timestamp < TIMESTAMP_OF_20181002000001); uint256 purchaseValue = msg.value.mul(EXCHANGE_RATE_IN_PRIVATE_SALE); transferFrom(owner, _beneficiary, purchaseValue); } /** * @dev 人工私募处理 * @param _addr 收取 token 地址 * @param _amount 转账 token 数量 */ function withdrawPrivateCoinByMan(address _addr, uint256 _amount) public onlyRole(ROLE_PRIVATESALEWHITELIST) { // 仅允许在 2018/10/02 00:00:01 之前购买 require(block.timestamp < TIMESTAMP_OF_20181002000001); // 仅允许 EOA 获得转账 require(!_addr.isContract()); transferFrom(owner, _addr, _amount); } /** * @dev 私募余额提取 * @param _amount 提取 token 数量 */ function withdrawRemainPrivateCoin(uint256 _amount) public onlyOwner { // 仅允许在 2018/10/01 00:00:01 之后提取 require(block.timestamp >= TIMESTAMP_OF_20181001000001); require(transfer(ownerWallet, _amount)); emit TransferLog(owner, ownerWallet, bytes32("withdrawRemainPrivateCoin"), _amount); } /** * @dev 私募转账处理(从 Owner 持有的余额中转出) * @param _to 转入地址 * @param _amount 转账数量 */ function _privateSaleTransferFromOwner(address _to, uint256 _amount) private returns (bool) { uint256 newTotalPrivateSaleAmount = totalPrivateSalesReleased.add(_amount); // 检查私募转账总额是否超限 require(newTotalPrivateSaleAmount <= PRIVATE_SALE_AMOUNT.mul(10 ** uint256(decimals))); bool result = super.transferFrom(owner, _to, _amount); privateSalesReleased[msg.sender] = privateSalesReleased[msg.sender].add(_amount); totalPrivateSalesReleased = newTotalPrivateSaleAmount; return result; } /** * @dev 合约余额提取 */ function withdrawFunds() public onlyOwner { ownerWallet.transfer(address(this).balance); } /** * @dev 获取所有 Partner 地址 * @return 所有 Partner 地址 */ function getPartnerAddresses() public onlyOwner view returns (address[]) { return partners; } /** * @dev 获取所有私募代理人地址 * @return 所有私募代理人地址 */ function getPrivateSaleAgentAddresses() public onlyOwner view returns (address[]) { return privateSaleAgents; } /** * @dev 获得私募代理人地址已转出(售出)的 token 数量 * @param _addr 私募代理人地址 * @return 私募代理人地址的已转出的 token 数量 */ function privateSaleReleased(address _addr) public view returns (uint256) { return privateSalesReleased[_addr]; } /** * @dev 获得 Partner 地址的提取限额 * @param _addr Partner 的地址 * @return Partner 地址的提取限额 */ function partnerAmountLimit(address _addr) public view returns (uint256) { return partnersAmountLimit[_addr]; } /** * @dev 获得 Partner 地址的已提取 token 数量 * @param _addr Partner 的地址 * @return Partner 地址的已提取 token 数量 */ function partnerWithdrawed(address _addr) public view returns (uint256) { return partnersWithdrawed[_addr]; } /** * @dev 给 Partner 地址分发 token * @param _addr Partner 的地址 * @param _amount 分发的 token 数量 */ function withdrawToPartner(address _addr, uint256 _amount) public onlyOwner { require(hasRole(_addr, ROLE_PARTNERWHITELIST)); // 仅允许在 2018/11/01 00:00:01 之前分发 require(block.timestamp < TIMESTAMP_OF_20181101000001); uint256 newTotalReleased = totalPartnersReleased.add(_amount); require(newTotalReleased <= FOOTSTONE_ROUND_AMOUNT.mul(10 ** uint256(decimals))); uint256 newPartnerAmount = balanceOf(_addr).add(_amount); require(newPartnerAmount <= partnersAmountLimit[_addr]); totalPartnersReleased = newTotalReleased; transfer(_addr, _amount); emit TransferLog(owner, _addr, bytes32("withdrawToPartner"), _amount); } /** * @dev 计算 Partner 地址的可提取 token 数量,返回其与 _value 之间较小的那个值 * @param _addr Partner 的地址 * @param _value 想要提取的 token 数量 * @return Partner 地址当前可提取的 token 数量, * 如果 _value 较小,则返回 _value 的数值 */ function _permittedPartnerTranferValue(address _addr, uint256 _value) private view returns (uint256) { uint256 limit = balanceOf(_addr); uint256 withdrawed = partnersWithdrawed[_addr]; uint256 total = withdrawed.add(limit); uint256 time = block.timestamp; require(limit > 0); if (time >= TIMESTAMP_OF_20191101000001) { // 2019/11/01 00:00:01 之后可提取 100% limit = total; } else if (time >= TIMESTAMP_OF_20190801000001) { // 2019/08/01 00:00:01 之后最多提取 75% limit = total.mul(75).div(100); } else if (time >= TIMESTAMP_OF_20190501000001) { // 2019/05/01 00:00:01 之后最多提取 50% limit = total.div(2); } else if (time >= TIMESTAMP_OF_20190201000001) { // 2019/02/01 00:00:01 之后最多提取 25% limit = total.mul(25).div(100); } else { // 2019/02/01 00:00:01 之前不可提取 limit = 0; } if (withdrawed >= limit) { limit = 0; } else { limit = limit.sub(withdrawed); } if (_value < limit) { limit = _value; } return limit; } /** * @dev 重写基础合约的 transferFrom 函数 */ function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { bool result; address sender = msg.sender; if (_from == owner) { if (hasRole(sender, ROLE_PRIVATESALEWHITELIST)) { // 仅允许在 2018/10/02 00:00:01 之前购买 require(block.timestamp < TIMESTAMP_OF_20181002000001); result = _privateSaleTransferFromOwner(_to, _value); } else { revert(); } } else { result = super.transferFrom(_from, _to, _value); } return result; } /** * @dev 通用额度提取 * @param _amount 提取 token 数量 */ function withdrawCommonCoin(uint256 _amount) public onlyOwner { // 仅允许在 2018/11/01 00:00:01 之后提取 require(block.timestamp >= TIMESTAMP_OF_20181101000001); require(transfer(ownerWallet, _amount)); emit TransferLog(owner, ownerWallet, bytes32("withdrawCommonCoin"), _amount); totalCommonReleased = totalCommonReleased.add(_amount); } /** * @dev 团队预留额度1提取 * @param _amount 提取 token 数量 */ function withdrawToTeamStep1(uint256 _amount) public onlyOwner { // 仅允许在 2019/02/01 00:00:01 之后提取 require(block.timestamp >= TIMESTAMP_OF_20190201000001); require(transfer(ownerWallet, _amount)); emit TransferLog(owner, ownerWallet, bytes32("withdrawToTeamStep1"), _amount); totalTeamReleased1 = totalTeamReleased1.add(_amount); } /** * @dev 团队预留额度2提取 * @param _amount 提取 token 数量 */ function withdrawToTeamStep2(uint256 _amount) public onlyOwner { // 仅允许在 2019/11/01 00:00:01 之后提取 require(block.timestamp >= TIMESTAMP_OF_20191101000001); require(transfer(ownerWallet, _amount)); emit TransferLog(owner, ownerWallet, bytes32("withdrawToTeamStep2"), _amount); totalTeamReleased2 = totalTeamReleased2.add(_amount); } /** * @dev 团队预留额度3提取 * @param _amount 提取 token 数量 */ function withdrawToTeamStep3(uint256 _amount) public onlyOwner { // 仅允许在 2020/11/01 00:00:01 之后提取 require(block.timestamp >= TIMESTAMP_OF_20201101000001); require(transfer(ownerWallet, _amount)); emit TransferLog(owner, ownerWallet, bytes32("withdrawToTeamStep3"), _amount); totalTeamReleased3 = totalTeamReleased3.add(_amount); } /** * @dev 团队预留额度4提取 * @param _amount 提取 token 数量 */ function withdrawToTeamStep4(uint256 _amount) public onlyOwner { // 仅允许在 2021/11/01 00:00:01 之后提取 require(block.timestamp >= TIMESTAMP_OF_20211101000001); require(transfer(ownerWallet, _amount)); emit TransferLog(owner, ownerWallet, bytes32("withdrawToTeamStep4"), _amount); totalTeamReleased4 = totalTeamReleased4.add(_amount); } /** * @dev 重写基础合约的 transfer 函数 */ function transfer(address _to, uint256 _value) public returns (bool) { bool result; uint256 limit; if (msg.sender == owner) { limit = _ownerReleaseLimit(); uint256 newTotalOwnerReleased = totalOwnerReleased.add(_value); require(newTotalOwnerReleased <= limit); result = super.transfer(_to, _value); totalOwnerReleased = newTotalOwnerReleased; } else if (hasRole(msg.sender, ROLE_PARTNERWHITELIST)) { limit = _permittedPartnerTranferValue(msg.sender, _value); if (limit > 0) { result = super.transfer(_to, limit); partnersWithdrawed[msg.sender] = partnersWithdrawed[msg.sender].add(limit); } else { revert(); } } else { result = super.transfer(_to, _value); } return result; } /** * @dev 计算 Owner 的转账额度 * @return Owner 的当前转账额度 */ function _ownerReleaseLimit() private view returns (uint256) { uint256 time = block.timestamp; uint256 limit; uint256 amount; // 基石轮额度作为默认限额 limit = FOOTSTONE_ROUND_AMOUNT.mul(10 ** uint256(decimals)); if (time >= TIMESTAMP_OF_20181001000001) { // 2018/10/1 之后,最大限额需要增加私募剩余额度 amount = PRIVATE_SALE_AMOUNT.mul(10 ** uint256(decimals)); if (totalPrivateSalesReleased < amount) { limit = limit.add(amount).sub(totalPrivateSalesReleased); } } if (time >= TIMESTAMP_OF_20181101000001) { // 2018/11/1 之后,最大限额需要增加通用提取额度中减去锁仓额度以外的额度 limit = limit.add(COMMON_PURPOSE_AMOUNT.sub(OWNER_LOCKED_IN_COMMON).mul(10 ** uint256(decimals))); } if (time >= TIMESTAMP_OF_20190201000001) { // 2019/2/1 之后,最大限额需要增加团队预留额度1 limit = limit.add(TEAM_RESERVED_AMOUNT1.mul(10 ** uint256(decimals))); } if (time >= TIMESTAMP_OF_20190501000001) { // 2019/5/1 之后,最大限额需要增加通用额度中的锁仓额度 limit = limit.add(OWNER_LOCKED_IN_COMMON.mul(10 ** uint256(decimals))); } if (time >= TIMESTAMP_OF_20191101000001) { // 2019/11/1 之后,最大限额需要增加团队预留额度2 limit = limit.add(TEAM_RESERVED_AMOUNT2.mul(10 ** uint256(decimals))); } if (time >= TIMESTAMP_OF_20201101000001) { // 2020/11/1 之后,最大限额需要增加团队预留额度3 limit = limit.add(TEAM_RESERVED_AMOUNT3.mul(10 ** uint256(decimals))); } if (time >= TIMESTAMP_OF_20211101000001) { // 2021/11/1 之后,最大限额需要增加团队预留额度4 limit = limit.add(TEAM_RESERVED_AMOUNT4.mul(10 ** uint256(decimals))); } return limit; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"removeAddressFromPrivateWhiteList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalPartnersReleased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTeamReleased3","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"privateSaleReleased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TEAM_RESERVED_AMOUNT2","outputs":[{"name":"","type":"uint256"}],"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":true,"inputs":[{"name":"_operator","type":"address"},{"name":"_role","type":"string"}],"name":"checkRole","outputs":[],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withdrawToTeamStep4","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"EXCHANGE_RATE_IN_PRIVATE_SALE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TEAM_RESERVED_AMOUNT1","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"removeAddressFromPartnerWhiteList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_amount","type":"uint256"}],"name":"addAddressToPartnerWhiteList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_ownerWallet","type":"address"}],"name":"changeOwnerWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TIMESTAMP_OF_20211101000001","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_operator","type":"address"},{"name":"_role","type":"string"}],"name":"hasRole","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","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":"withdrawFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"OWNER_LOCKED_IN_COMMON","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TEAM_RESERVED_AMOUNT3","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withdrawToTeamStep3","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalCommonReleased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_SUPPLY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withdrawToTeamStep1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withdrawRemainPrivateCoin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withdrawCommonCoin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_amount","type":"uint256"}],"name":"addAddressToPrivateWhiteList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"partnerAmountLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TIMESTAMP_OF_20190501000001","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TIMESTAMP_OF_20181001000001","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"PRIVATE_SALE_AMOUNT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawToPartner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TIMESTAMP_OF_20190201000001","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_PARTNERWHITELIST","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTeamReleased4","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTeamReleased1","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawPrivateCoinByMan","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPrivateSaleAgentAddresses","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPartnerAddresses","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withdrawToTeamStep2","outputs":[],"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":true,"inputs":[],"name":"TIMESTAMP_OF_20190801000001","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTeamReleased2","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TIMESTAMP_OF_20191101000001","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalPrivateSalesReleased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"COMMON_PURPOSE_AMOUNT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FOOTSTONE_ROUND_AMOUNT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_PRIVATESALEWHITELIST","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"partnerWithdrawed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TIMESTAMP_OF_20181101000001","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"privateSale","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"totalOwnerReleased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TIMESTAMP_OF_20201101000001","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TEAM_RESERVED_AMOUNT4","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TIMESTAMP_OF_20181002000001","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_ownerWallet","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"functionName","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"}],"name":"TransferLog","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"},{"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":"operator","type":"address"},{"indexed":false,"name":"role","type":"string"}],"name":"RoleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"role","type":"string"}],"name":"RoleRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
60c0604052600360808190527f494441000000000000000000000000000000000000000000000000000000000060a09081526200004091600591906200010d565b506040805180820190915260038082527f4944410000000000000000000000000000000000000000000000000000000000602090920191825262000087916006916200010d565b506007805460ff19166012179055348015620000a257600080fd5b5060405160208062002c0283398101604090815290516000805433600160a060020a03199182168117835560178054909216600160a060020a0390941693909317905560075460ff16600a0a6402540be40002600381905591815260026020529190912055620001b2565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200015057805160ff191683800117855562000180565b8280016001018555821562000180579182015b828111156200018057825182559160200191906001019062000163565b506200018e92915062000192565b5090565b620001af91905b808211156200018e576000815560010162000199565b90565b612a4080620001c26000396000f3006080604052600436106103005763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301284ad4811461030b57806301a2125d1461032c57806305bd4dad1461035357806306fdde031461036857806308534888146103f25780630939728714610413578063095ea7b3146104285780630988ca8c146104605780630ae25ca3146104c75780630b56db31146104df57806310b089ed146104f4578063150b52db14610509578063156014e81461052a57806318117abb1461054e57806318160ddd1461056f5780631833e00114610584578063217fe6c61461059957806323b872dd1461060057806324600fc31461062a5780632adeb6861461063f5780632bbb5b45146104135780632c868287146106545780632eeb42421461066c5780632ff2e9dc14610681578063313ce5671461069657806339635d13146106c15780633b4d75d8146106d95780633ef84fcb146106f15780634a4ef738146107095780634fd0fcb61461072d57806352e11ff71461074e578063587115b214610763578063661884631461077857806368942cd31461079c5780636c055ce2146107b15780636c3c4f4f146107d557806370a08231146107ea578063715018a61461080b57806376c0a6be14610820578063808741451461083557806383d962961461084a5780638da5cb5b1461085f578063951717e21461089057806395d89b41146108b45780639b9cc2ca146108c9578063a20ddfb61461092e578063a7157c7214610943578063a9059cbb1461095b578063ae07b5081461097f578063aeda4efc14610994578063b1f63f5e146109a9578063b86d1de0146109be578063b987cd76146109d3578063c22f690e146109e8578063c3bc7fe3146109fd578063cab3758614610a12578063d54b9b2e14610a33578063d73dd62314610a48578063dd62ed3e14610a6c578063e7d53fcb14610a93578063eb0ce79114610aa7578063f2fde38b14610abc578063f4522bbc14610add578063f66938d214610413578063fe9ad90814610af2575b61030933610b07565b005b34801561031757600080fd5b50610309600160a060020a0360043516610b98565b34801561033857600080fd5b50610341610d2d565b60408051918252519081900360200190f35b34801561035f57600080fd5b50610341610d33565b34801561037457600080fd5b5061037d610d39565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103b757818101518382015260200161039f565b50505050905090810190601f1680156103e45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103fe57600080fd5b50610341600160a060020a0360043516610dc7565b34801561041f57600080fd5b50610341610de2565b34801561043457600080fd5b5061044c600160a060020a0360043516602435610dea565b604080519115158252519081900360200190f35b34801561046c57600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610309958335600160a060020a0316953695604494919390910191908190840183828082843750949750610e699650505050505050565b3480156104d357600080fd5b50610309600435610ed7565b3480156104eb57600080fd5b50610341610f9f565b34801561050057600080fd5b50610341610fa5565b34801561051557600080fd5b50610309600160a060020a0360043516610fad565b34801561053657600080fd5b50610309600160a060020a0360043516602435611143565b34801561055a57600080fd5b50610309600160a060020a0360043516611243565b34801561057b57600080fd5b5061034161127c565b34801561059057600080fd5b50610341611283565b3480156105a557600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261044c958335600160a060020a031695369560449491939091019190819084018382808284375094975061128b9650505050505050565b34801561060c57600080fd5b5061044c600160a060020a03600435811690602435166044356112fe565b34801561063657600080fd5b5061030961138d565b34801561064b57600080fd5b506103416113e1565b34801561066057600080fd5b506103096004356113ea565b34801561067857600080fd5b506103416114b2565b34801561068d57600080fd5b506103416114b8565b3480156106a257600080fd5b506106ab6114c1565b6040805160ff9092168252519081900360200190f35b3480156106cd57600080fd5b506103096004356114ca565b3480156106e557600080fd5b50610309600435611592565b3480156106fd57600080fd5b50610309600435611644565b34801561071557600080fd5b50610309600160a060020a036004351660243561170c565b34801561073957600080fd5b50610341600160a060020a0360043516611804565b34801561075a57600080fd5b5061034161181f565b34801561076f57600080fd5b50610341611827565b34801561078457600080fd5b5061044c600160a060020a036004351660243561182f565b3480156107a857600080fd5b50610341611937565b3480156107bd57600080fd5b50610309600160a060020a036004351660243561193f565b3480156107e157600080fd5b50610341611a99565b3480156107f657600080fd5b50610341600160a060020a0360043516611aa1565b34801561081757600080fd5b50610309611abc565b34801561082c57600080fd5b5061037d611b1b565b34801561084157600080fd5b50610341611b40565b34801561085657600080fd5b50610341611b46565b34801561086b57600080fd5b50610874611b4c565b60408051600160a060020a039092168252519081900360200190f35b34801561089c57600080fd5b50610309600160a060020a0360043516602435611b5b565b3480156108c057600080fd5b5061037d611bca565b3480156108d557600080fd5b506108de611c25565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561091a578181015183820152602001610902565b505050509050019250505060405180910390f35b34801561093a57600080fd5b506108de611c9f565b34801561094f57600080fd5b50610309600435611d17565b34801561096757600080fd5b5061044c600160a060020a0360043516602435611ddf565b34801561098b57600080fd5b50610341611edc565b3480156109a057600080fd5b50610341611ee4565b3480156109b557600080fd5b50610341611eea565b3480156109ca57600080fd5b50610341611ef2565b3480156109df57600080fd5b50610341611ef8565b3480156109f457600080fd5b50610341611f01565b348015610a0957600080fd5b5061037d611f09565b348015610a1e57600080fd5b50610341600160a060020a0360043516611f2e565b348015610a3f57600080fd5b50610341611f49565b348015610a5457600080fd5b5061044c600160a060020a0360043516602435611f51565b348015610a7857600080fd5b50610341600160a060020a0360043581169060243516612001565b610309600160a060020a0360043516610b07565b348015610ab357600080fd5b5061034161202c565b348015610ac857600080fd5b50610309600160a060020a0360043516612032565b348015610ae957600080fd5b50610341612052565b348015610afe57600080fd5b5061034161205a565b60006040805190810160405280601481526020016000805160206129f5833981519152815250610b373382610e69565b333214610b4357600080fd5b610b4c33612062565b15610b5657600080fd5b635bb2b5014210610b6657600080fd5b610b783461271063ffffffff61206a16565b600054909250610b9290600160a060020a031684846112fe565b50505050565b6000805481908190600160a060020a03163314610bb457600080fd5b635bb2b5014210610bc457600080fd5b610bf1846040805190810160405280601481526020016000805160206129f583398151915281525061128b565b1515610bfc57600080fd5b610c29846040805190810160405280601481526020016000805160206129f5833981519152815250612093565b610c34846000610dea565b50600160a060020a038416600090815260136020526040902054601254909350610c6590600163ffffffff6121a416565b9150601282815481101515610c7657fe5b60009182526020909120015460128054600160a060020a039092169250829185908110610c9f57fe5b60009182526020909120018054600160a060020a031916600160a060020a03929092169190911790556012805483908110610cd657fe5b60009182526020909120018054600160a060020a03191690556012805490610d0290600019830161296d565b50600160a060020a039384166000908152601360205260408082208290559190941684529092205550565b60095481565b600e5481565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610dbf5780601f10610d9457610100808354040283529160200191610dbf565b820191906000526020600020905b815481529060010190602001808311610da257829003601f168201915b505050505081565b600160a060020a031660009081526016602052604090205490565b6315752a0081565b6000600160a060020a0383161515610e0157600080fd5b336000818152600460209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b610ed3826001836040518082805190602001908083835b60208310610e9f5780518252601f199092019160209182019101610e80565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220929150506121b6565b5050565b600054600160a060020a03163314610eee57600080fd5b63617f2e01421015610eff57600080fd5b601754610f1590600160a060020a031682611ddf565b1515610f2057600080fd5b60005460175460408051600160a060020a0393841681529190921660208201527f7769746864726177546f5465616d537465703400000000000000000000000000818301526060810183905290516000805160206129b58339815191529181900360800190a1600f54610f99908263ffffffff6121cb16565b600f5550565b61271081565b6307270e0081565b6000805481908190600160a060020a03163314610fc957600080fd5b635bda42014210610fd957600080fd5b611006846040805190810160405280601081526020016000805160206129d583398151915281525061128b565b151561101157600080fd5b61103e846040805190810160405280601081526020016000805160206129d5833981519152815250612093565b600160a060020a0384166000908152601460209081526040808320839055601190915290205460105490935061107b90600163ffffffff6121a416565b915060108281548110151561108c57fe5b60009182526020909120015460108054600160a060020a0390921692508291859081106110b557fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560108054839081106110ec57fe5b60009182526020909120018054600160a060020a0319169055601080549061111890600019830161296d565b50600160a060020a039384166000908152601160205260408082208290559190941684529092205550565b600054600160a060020a0316331461115a57600080fd5b635bda4201421061116a57600080fd5b611197826040805190810160405280601081526020016000805160206129d583398151915281525061128b565b1515611227576111ca826040805190810160405280601081526020016000805160206129d58339815191528152506121d8565b60108054600160a060020a0384166000818152601160205260408120839055600183018455929092527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672018054600160a060020a03191690911790555b600160a060020a03909116600090815260146020526040902055565b600054600160a060020a0316331461125a57600080fd5b60178054600160a060020a031916600160a060020a0392909216919091179055565b6003545b90565b63617f2e0181565b60006112f7836001846040518082805190602001908083835b602083106112c35780518252601f1990920191602091820191016112a4565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220929150506122aa565b9392505050565b6000805481903390600160a060020a038781169116141561137657611346816040805190810160405280601481526020016000805160206129f583398151915281525061128b565b1561136c57635bb2b501421061135b57600080fd5b61136585856122c9565b9150611371565b600080fd5b611384565b611381868686612367565b91505b50949350505050565b600054600160a060020a031633146113a457600080fd5b601754604051600160a060020a0390911690303180156108fc02916000818181858888f193505050501580156113de573d6000803e3d6000fd5b50565b64012a05f20081565b600054600160a060020a0316331461140157600080fd5b635f9dfa8142101561141257600080fd5b60175461142890600160a060020a031682611ddf565b151561143357600080fd5b60005460175460408051600160a060020a0393841681529190921660208201527f7769746864726177546f5465616d537465703300000000000000000000000000818301526060810183905290516000805160206129b58339815191529181900360800190a1600e546114ac908263ffffffff6121cb16565b600e5550565b600b5481565b6402540be40081565b60075460ff1681565b600054600160a060020a031633146114e157600080fd5b635c538c014210156114f257600080fd5b60175461150890600160a060020a031682611ddf565b151561151357600080fd5b60005460175460408051600160a060020a0393841681529190921660208201527f7769746864726177546f5465616d537465703100000000000000000000000000818301526060810183905290516000805160206129b58339815191529181900360800190a1600c5461158c908263ffffffff6121cb16565b600c5550565b600054600160a060020a031633146115a957600080fd5b635bb163814210156115ba57600080fd5b6017546115d090600160a060020a031682611ddf565b15156115db57600080fd5b60005460175460408051600160a060020a0393841681529190921660208201527f776974686472617752656d61696e50726976617465436f696e00000000000000818301526060810183905290516000805160206129b58339815191529181900360800190a150565b600054600160a060020a0316331461165b57600080fd5b635bda420142101561166c57600080fd5b60175461168290600160a060020a031682611ddf565b151561168d57600080fd5b60005460175460408051600160a060020a0393841681529190921660208201527f7769746864726177436f6d6d6f6e436f696e0000000000000000000000000000818301526060810183905290516000805160206129b58339815191529181900360800190a1600b54611706908263ffffffff6121cb16565b600b5550565b600054600160a060020a0316331461172357600080fd5b635bb2b501421061173357600080fd5b611760826040805190810160405280601481526020016000805160206129f583398151915281525061128b565b1561176a57600080fd5b611797826040805190810160405280601481526020016000805160206129f58339815191528152506121d8565b6117a18282610dea565b505060128054600160a060020a039092166000818152601360205260408120849055600184018355919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34449091018054600160a060020a0319169091179055565b600160a060020a031660009081526014602052604090205490565b635cc8e18181565b635bb1638181565b600080600160a060020a038416151561184757600080fd5b50336000908152600460209081526040808320600160a060020a038716845290915290205480831061189c57336000908152600460209081526040808320600160a060020a03881684529091528120556118d1565b6118ac818463ffffffff6121a416565b336000908152600460209081526040808320600160a060020a03891684529091529020555b336000818152600460209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6347868c0081565b600080548190600160a060020a0316331461195957600080fd5b611986846040805190810160405280601081526020016000805160206129d583398151915281525061128b565b151561199157600080fd5b635bda420142106119a157600080fd5b6009546119b4908463ffffffff6121cb16565b6007549092506119d59063179a7b009060ff16600a0a63ffffffff61206a16565b8211156119e157600080fd5b6119fa836119ee86611aa1565b9063ffffffff6121cb16565b600160a060020a038516600090815260146020526040902054909150811115611a2257600080fd5b6009829055611a318484611ddf565b5060005460408051600160a060020a03928316815291861660208301527f7769746864726177546f506172746e65720000000000000000000000000000008282015260608201859052516000805160206129b58339815191529181900360800190a150505050565b635c538c0181565b600160a060020a031660009081526002602052604090205490565b600054600160a060020a03163314611ad357600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a260008054600160a060020a0319169055565b60408051808201909152601081526000805160206129d5833981519152602082015281565b600f5481565b600c5481565b600054600160a060020a031681565b60408051808201909152601481526000805160206129f58339815191526020820152611b873382610e69565b635bb2b5014210611b9757600080fd5b611ba983600160a060020a0316612062565b15611bb357600080fd5b600054610b9290600160a060020a031684846112fe565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610dbf5780601f10610d9457610100808354040283529160200191610dbf565b600054606090600160a060020a03163314611c3f57600080fd5b6012805480602002602001604051908101604052809291908181526020018280548015611c9557602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611c77575b5050505050905090565b600054606090600160a060020a03163314611cb957600080fd5b6010805480602002602001604051908101604052809291908181526020018280548015611c9557602002820191906000526020600020908154600160a060020a03168152600190910190602001808311611c77575050505050905090565b600054600160a060020a03163314611d2e57600080fd5b635dbb7581421015611d3f57600080fd5b601754611d5590600160a060020a031682611ddf565b1515611d6057600080fd5b60005460175460408051600160a060020a0393841681529190921660208201527f7769746864726177546f5465616d537465703200000000000000000000000000818301526060810183905290516000805160206129b58339815191529181900360800190a1600d54611dd9908263ffffffff6121cb16565b600d5550565b60008054819081908190600160a060020a0316331415611e3c57611e016124de565b600854909250611e17908663ffffffff6121cb16565b905081811115611e2657600080fd5b611e3086866126ac565b60088290559250611ed2565b611e69336040805190810160405280601081526020016000805160206129d583398151915281525061128b565b15611ec557611e78338661278d565b9150600082111561136c57611e8d86836126ac565b33600090815260156020526040902054909350611eb0908363ffffffff6121cb16565b33600090815260156020526040902055611ed2565b611ecf86866126ac565b92505b5090949350505050565b635d422b8181565b600d5481565b635dbb758181565b600a5481565b6401ad64510081565b63179a7b0081565b60408051808201909152601481526000805160206129f5833981519152602082015281565b600160a060020a031660009081526015602052604090205490565b635bda420181565b6000600160a060020a0383161515611f6857600080fd5b336000908152600460209081526040808320600160a060020a0387168452909152902054611f9c908363ffffffff6121cb16565b336000818152600460209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600160a060020a03918216600090815260046020908152604080832093909416825291909152205490565b60085481565b600054600160a060020a0316331461204957600080fd5b6113de816128a1565b635f9dfa8181565b635bb2b50181565b6000903b1190565b600082151561207b57506000610e63565b5081810281838281151561208b57fe5b0414610e6357fe5b6120fd826001836040518082805190602001908083835b602083106120c95780518252601f1990920191602091820191016120aa565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050612911565b81600160a060020a03167fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a826040518080602001828103825283818151815260200191508051906020019080838360005b8381101561216657818101518382015260200161214e565b50505050905090810190601f1680156121935780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b6000828211156121b057fe5b50900390565b6121c082826122aa565b1515610ed357600080fd5b81810182811015610e6357fe5b612242826001836040518082805190602001908083835b6020831061220e5780518252601f1990920191602091820191016121ef565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050612933565b81600160a060020a03167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489826040518080602001828103825283818151815260200191508051906020019080838360008381101561216657818101518382015260200161214e565b600160a060020a03166000908152602091909152604090205460ff1690565b60008060006122e384600a546121cb90919063ffffffff16565b600754909250612304906347868c009060ff16600a0a63ffffffff61206a16565b82111561231057600080fd5b60005461232790600160a060020a03168686612367565b3360009081526016602052604090205490915061234a908563ffffffff6121cb16565b33600090815260166020526040902055600a919091559392505050565b600160a060020a03831660009081526002602052604081205482111561238c57600080fd5b600160a060020a03841660009081526004602090815260408083203384529091529020548211156123bc57600080fd5b600160a060020a03831615156123d157600080fd5b600160a060020a0384166000908152600260205260409020546123fa908363ffffffff6121a416565b600160a060020a03808616600090815260026020526040808220939093559085168152205461242f908363ffffffff6121cb16565b600160a060020a038085166000908152600260209081526040808320949094559187168152600482528281203382529091522054612473908363ffffffff6121a416565b600160a060020a03808616600081815260046020908152604080832033845282529182902094909455805186815290519287169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35060019392505050565b6007546000904290829081906125059063179a7b009060ff16600a0a63ffffffff61206a16565b9150635bb16381831061256257600754612530906347868c009060ff16600a0a63ffffffff61206a16565b905080600a54101561256257600a5461255f90612553848463ffffffff6121cb16565b9063ffffffff6121a416565b91505b635bda420183106125b4576007546125b1906125a49060ff16600a0a6125986401ad64510064012a05f20063ffffffff6121a416565b9063ffffffff61206a16565b839063ffffffff6121cb16565b91505b635c538c0183106125e4576007546125e1906125a4906307270e009060ff16600a0a63ffffffff61206a16565b91505b635cc8e181831061261557600754612612906125a49064012a05f2009060ff16600a0a63ffffffff61206a16565b91505b635dbb7581831061264557600754612642906125a4906315752a009060ff16600a0a63ffffffff61206a16565b91505b635f9dfa81831061267557600754612672906125a4906315752a009060ff16600a0a63ffffffff61206a16565b91505b63617f2e0183106126a5576007546126a2906125a4906315752a009060ff16600a0a63ffffffff61206a16565b91505b5092915050565b336000908152600260205260408120548211156126c857600080fd5b600160a060020a03831615156126dd57600080fd5b336000908152600260205260409020546126fd908363ffffffff6121a416565b3360009081526002602052604080822092909255600160a060020a0385168152205461272f908363ffffffff6121cb16565b600160a060020a0384166000818152600260209081526040918290209390935580518581529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600192915050565b600080600080600061279e87611aa1565b600160a060020a03881660009081526015602052604090205490945092506127cc838563ffffffff6121cb16565b9150429050600084116127de57600080fd5b635dbb758181106127f157819350612867565b635d422b8181106128255761281e606461281284604b63ffffffff61206a16565b9063ffffffff61295816565b9350612867565b635cc8e18181106128415761281e82600263ffffffff61295816565b635c538c0181106128625761281e606461281284601963ffffffff61206a16565b600093505b838310612877576000935061288a565b612887848463ffffffff6121a416565b93505b83861015612896578593505b509195945050505050565b600160a060020a03811615156128b657600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b600160a060020a0316600090815260209190915260409020805460ff19169055565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000818381151561296557fe5b049392505050565b81548183558181111561299157600083815260209020612991918101908301612996565b505050565b61128091905b808211156129b0576000815560010161299c565b509056007d794f058f68b76e7ec56cf405982d6cddbac0baba1afbdf64368efa3e8b37ab706172746e657257686974656c697374000000000000000000000000000000007072697661746553616c6557686974656c697374000000000000000000000000a165627a7a7230582085fe8cacb4b93d4e9aba7506be3e0c438244201f910733d02d5be2fc499b731b0029
Deployed Bytecode
0x6080604052600436106103005763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301284ad4811461030b57806301a2125d1461032c57806305bd4dad1461035357806306fdde031461036857806308534888146103f25780630939728714610413578063095ea7b3146104285780630988ca8c146104605780630ae25ca3146104c75780630b56db31146104df57806310b089ed146104f4578063150b52db14610509578063156014e81461052a57806318117abb1461054e57806318160ddd1461056f5780631833e00114610584578063217fe6c61461059957806323b872dd1461060057806324600fc31461062a5780632adeb6861461063f5780632bbb5b45146104135780632c868287146106545780632eeb42421461066c5780632ff2e9dc14610681578063313ce5671461069657806339635d13146106c15780633b4d75d8146106d95780633ef84fcb146106f15780634a4ef738146107095780634fd0fcb61461072d57806352e11ff71461074e578063587115b214610763578063661884631461077857806368942cd31461079c5780636c055ce2146107b15780636c3c4f4f146107d557806370a08231146107ea578063715018a61461080b57806376c0a6be14610820578063808741451461083557806383d962961461084a5780638da5cb5b1461085f578063951717e21461089057806395d89b41146108b45780639b9cc2ca146108c9578063a20ddfb61461092e578063a7157c7214610943578063a9059cbb1461095b578063ae07b5081461097f578063aeda4efc14610994578063b1f63f5e146109a9578063b86d1de0146109be578063b987cd76146109d3578063c22f690e146109e8578063c3bc7fe3146109fd578063cab3758614610a12578063d54b9b2e14610a33578063d73dd62314610a48578063dd62ed3e14610a6c578063e7d53fcb14610a93578063eb0ce79114610aa7578063f2fde38b14610abc578063f4522bbc14610add578063f66938d214610413578063fe9ad90814610af2575b61030933610b07565b005b34801561031757600080fd5b50610309600160a060020a0360043516610b98565b34801561033857600080fd5b50610341610d2d565b60408051918252519081900360200190f35b34801561035f57600080fd5b50610341610d33565b34801561037457600080fd5b5061037d610d39565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103b757818101518382015260200161039f565b50505050905090810190601f1680156103e45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103fe57600080fd5b50610341600160a060020a0360043516610dc7565b34801561041f57600080fd5b50610341610de2565b34801561043457600080fd5b5061044c600160a060020a0360043516602435610dea565b604080519115158252519081900360200190f35b34801561046c57600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610309958335600160a060020a0316953695604494919390910191908190840183828082843750949750610e699650505050505050565b3480156104d357600080fd5b50610309600435610ed7565b3480156104eb57600080fd5b50610341610f9f565b34801561050057600080fd5b50610341610fa5565b34801561051557600080fd5b50610309600160a060020a0360043516610fad565b34801561053657600080fd5b50610309600160a060020a0360043516602435611143565b34801561055a57600080fd5b50610309600160a060020a0360043516611243565b34801561057b57600080fd5b5061034161127c565b34801561059057600080fd5b50610341611283565b3480156105a557600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261044c958335600160a060020a031695369560449491939091019190819084018382808284375094975061128b9650505050505050565b34801561060c57600080fd5b5061044c600160a060020a03600435811690602435166044356112fe565b34801561063657600080fd5b5061030961138d565b34801561064b57600080fd5b506103416113e1565b34801561066057600080fd5b506103096004356113ea565b34801561067857600080fd5b506103416114b2565b34801561068d57600080fd5b506103416114b8565b3480156106a257600080fd5b506106ab6114c1565b6040805160ff9092168252519081900360200190f35b3480156106cd57600080fd5b506103096004356114ca565b3480156106e557600080fd5b50610309600435611592565b3480156106fd57600080fd5b50610309600435611644565b34801561071557600080fd5b50610309600160a060020a036004351660243561170c565b34801561073957600080fd5b50610341600160a060020a0360043516611804565b34801561075a57600080fd5b5061034161181f565b34801561076f57600080fd5b50610341611827565b34801561078457600080fd5b5061044c600160a060020a036004351660243561182f565b3480156107a857600080fd5b50610341611937565b3480156107bd57600080fd5b50610309600160a060020a036004351660243561193f565b3480156107e157600080fd5b50610341611a99565b3480156107f657600080fd5b50610341600160a060020a0360043516611aa1565b34801561081757600080fd5b50610309611abc565b34801561082c57600080fd5b5061037d611b1b565b34801561084157600080fd5b50610341611b40565b34801561085657600080fd5b50610341611b46565b34801561086b57600080fd5b50610874611b4c565b60408051600160a060020a039092168252519081900360200190f35b34801561089c57600080fd5b50610309600160a060020a0360043516602435611b5b565b3480156108c057600080fd5b5061037d611bca565b3480156108d557600080fd5b506108de611c25565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561091a578181015183820152602001610902565b505050509050019250505060405180910390f35b34801561093a57600080fd5b506108de611c9f565b34801561094f57600080fd5b50610309600435611d17565b34801561096757600080fd5b5061044c600160a060020a0360043516602435611ddf565b34801561098b57600080fd5b50610341611edc565b3480156109a057600080fd5b50610341611ee4565b3480156109b557600080fd5b50610341611eea565b3480156109ca57600080fd5b50610341611ef2565b3480156109df57600080fd5b50610341611ef8565b3480156109f457600080fd5b50610341611f01565b348015610a0957600080fd5b5061037d611f09565b348015610a1e57600080fd5b50610341600160a060020a0360043516611f2e565b348015610a3f57600080fd5b50610341611f49565b348015610a5457600080fd5b5061044c600160a060020a0360043516602435611f51565b348015610a7857600080fd5b50610341600160a060020a0360043581169060243516612001565b610309600160a060020a0360043516610b07565b348015610ab357600080fd5b5061034161202c565b348015610ac857600080fd5b50610309600160a060020a0360043516612032565b348015610ae957600080fd5b50610341612052565b348015610afe57600080fd5b5061034161205a565b60006040805190810160405280601481526020016000805160206129f5833981519152815250610b373382610e69565b333214610b4357600080fd5b610b4c33612062565b15610b5657600080fd5b635bb2b5014210610b6657600080fd5b610b783461271063ffffffff61206a16565b600054909250610b9290600160a060020a031684846112fe565b50505050565b6000805481908190600160a060020a03163314610bb457600080fd5b635bb2b5014210610bc457600080fd5b610bf1846040805190810160405280601481526020016000805160206129f583398151915281525061128b565b1515610bfc57600080fd5b610c29846040805190810160405280601481526020016000805160206129f5833981519152815250612093565b610c34846000610dea565b50600160a060020a038416600090815260136020526040902054601254909350610c6590600163ffffffff6121a416565b9150601282815481101515610c7657fe5b60009182526020909120015460128054600160a060020a039092169250829185908110610c9f57fe5b60009182526020909120018054600160a060020a031916600160a060020a03929092169190911790556012805483908110610cd657fe5b60009182526020909120018054600160a060020a03191690556012805490610d0290600019830161296d565b50600160a060020a039384166000908152601360205260408082208290559190941684529092205550565b60095481565b600e5481565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610dbf5780601f10610d9457610100808354040283529160200191610dbf565b820191906000526020600020905b815481529060010190602001808311610da257829003601f168201915b505050505081565b600160a060020a031660009081526016602052604090205490565b6315752a0081565b6000600160a060020a0383161515610e0157600080fd5b336000818152600460209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b610ed3826001836040518082805190602001908083835b60208310610e9f5780518252601f199092019160209182019101610e80565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220929150506121b6565b5050565b600054600160a060020a03163314610eee57600080fd5b63617f2e01421015610eff57600080fd5b601754610f1590600160a060020a031682611ddf565b1515610f2057600080fd5b60005460175460408051600160a060020a0393841681529190921660208201527f7769746864726177546f5465616d537465703400000000000000000000000000818301526060810183905290516000805160206129b58339815191529181900360800190a1600f54610f99908263ffffffff6121cb16565b600f5550565b61271081565b6307270e0081565b6000805481908190600160a060020a03163314610fc957600080fd5b635bda42014210610fd957600080fd5b611006846040805190810160405280601081526020016000805160206129d583398151915281525061128b565b151561101157600080fd5b61103e846040805190810160405280601081526020016000805160206129d5833981519152815250612093565b600160a060020a0384166000908152601460209081526040808320839055601190915290205460105490935061107b90600163ffffffff6121a416565b915060108281548110151561108c57fe5b60009182526020909120015460108054600160a060020a0390921692508291859081106110b557fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560108054839081106110ec57fe5b60009182526020909120018054600160a060020a0319169055601080549061111890600019830161296d565b50600160a060020a039384166000908152601160205260408082208290559190941684529092205550565b600054600160a060020a0316331461115a57600080fd5b635bda4201421061116a57600080fd5b611197826040805190810160405280601081526020016000805160206129d583398151915281525061128b565b1515611227576111ca826040805190810160405280601081526020016000805160206129d58339815191528152506121d8565b60108054600160a060020a0384166000818152601160205260408120839055600183018455929092527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672018054600160a060020a03191690911790555b600160a060020a03909116600090815260146020526040902055565b600054600160a060020a0316331461125a57600080fd5b60178054600160a060020a031916600160a060020a0392909216919091179055565b6003545b90565b63617f2e0181565b60006112f7836001846040518082805190602001908083835b602083106112c35780518252601f1990920191602091820191016112a4565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220929150506122aa565b9392505050565b6000805481903390600160a060020a038781169116141561137657611346816040805190810160405280601481526020016000805160206129f583398151915281525061128b565b1561136c57635bb2b501421061135b57600080fd5b61136585856122c9565b9150611371565b600080fd5b611384565b611381868686612367565b91505b50949350505050565b600054600160a060020a031633146113a457600080fd5b601754604051600160a060020a0390911690303180156108fc02916000818181858888f193505050501580156113de573d6000803e3d6000fd5b50565b64012a05f20081565b600054600160a060020a0316331461140157600080fd5b635f9dfa8142101561141257600080fd5b60175461142890600160a060020a031682611ddf565b151561143357600080fd5b60005460175460408051600160a060020a0393841681529190921660208201527f7769746864726177546f5465616d537465703300000000000000000000000000818301526060810183905290516000805160206129b58339815191529181900360800190a1600e546114ac908263ffffffff6121cb16565b600e5550565b600b5481565b6402540be40081565b60075460ff1681565b600054600160a060020a031633146114e157600080fd5b635c538c014210156114f257600080fd5b60175461150890600160a060020a031682611ddf565b151561151357600080fd5b60005460175460408051600160a060020a0393841681529190921660208201527f7769746864726177546f5465616d537465703100000000000000000000000000818301526060810183905290516000805160206129b58339815191529181900360800190a1600c5461158c908263ffffffff6121cb16565b600c5550565b600054600160a060020a031633146115a957600080fd5b635bb163814210156115ba57600080fd5b6017546115d090600160a060020a031682611ddf565b15156115db57600080fd5b60005460175460408051600160a060020a0393841681529190921660208201527f776974686472617752656d61696e50726976617465436f696e00000000000000818301526060810183905290516000805160206129b58339815191529181900360800190a150565b600054600160a060020a0316331461165b57600080fd5b635bda420142101561166c57600080fd5b60175461168290600160a060020a031682611ddf565b151561168d57600080fd5b60005460175460408051600160a060020a0393841681529190921660208201527f7769746864726177436f6d6d6f6e436f696e0000000000000000000000000000818301526060810183905290516000805160206129b58339815191529181900360800190a1600b54611706908263ffffffff6121cb16565b600b5550565b600054600160a060020a0316331461172357600080fd5b635bb2b501421061173357600080fd5b611760826040805190810160405280601481526020016000805160206129f583398151915281525061128b565b1561176a57600080fd5b611797826040805190810160405280601481526020016000805160206129f58339815191528152506121d8565b6117a18282610dea565b505060128054600160a060020a039092166000818152601360205260408120849055600184018355919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34449091018054600160a060020a0319169091179055565b600160a060020a031660009081526014602052604090205490565b635cc8e18181565b635bb1638181565b600080600160a060020a038416151561184757600080fd5b50336000908152600460209081526040808320600160a060020a038716845290915290205480831061189c57336000908152600460209081526040808320600160a060020a03881684529091528120556118d1565b6118ac818463ffffffff6121a416565b336000908152600460209081526040808320600160a060020a03891684529091529020555b336000818152600460209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6347868c0081565b600080548190600160a060020a0316331461195957600080fd5b611986846040805190810160405280601081526020016000805160206129d583398151915281525061128b565b151561199157600080fd5b635bda420142106119a157600080fd5b6009546119b4908463ffffffff6121cb16565b6007549092506119d59063179a7b009060ff16600a0a63ffffffff61206a16565b8211156119e157600080fd5b6119fa836119ee86611aa1565b9063ffffffff6121cb16565b600160a060020a038516600090815260146020526040902054909150811115611a2257600080fd5b6009829055611a318484611ddf565b5060005460408051600160a060020a03928316815291861660208301527f7769746864726177546f506172746e65720000000000000000000000000000008282015260608201859052516000805160206129b58339815191529181900360800190a150505050565b635c538c0181565b600160a060020a031660009081526002602052604090205490565b600054600160a060020a03163314611ad357600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a260008054600160a060020a0319169055565b60408051808201909152601081526000805160206129d5833981519152602082015281565b600f5481565b600c5481565b600054600160a060020a031681565b60408051808201909152601481526000805160206129f58339815191526020820152611b873382610e69565b635bb2b5014210611b9757600080fd5b611ba983600160a060020a0316612062565b15611bb357600080fd5b600054610b9290600160a060020a031684846112fe565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610dbf5780601f10610d9457610100808354040283529160200191610dbf565b600054606090600160a060020a03163314611c3f57600080fd5b6012805480602002602001604051908101604052809291908181526020018280548015611c9557602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611c77575b5050505050905090565b600054606090600160a060020a03163314611cb957600080fd5b6010805480602002602001604051908101604052809291908181526020018280548015611c9557602002820191906000526020600020908154600160a060020a03168152600190910190602001808311611c77575050505050905090565b600054600160a060020a03163314611d2e57600080fd5b635dbb7581421015611d3f57600080fd5b601754611d5590600160a060020a031682611ddf565b1515611d6057600080fd5b60005460175460408051600160a060020a0393841681529190921660208201527f7769746864726177546f5465616d537465703200000000000000000000000000818301526060810183905290516000805160206129b58339815191529181900360800190a1600d54611dd9908263ffffffff6121cb16565b600d5550565b60008054819081908190600160a060020a0316331415611e3c57611e016124de565b600854909250611e17908663ffffffff6121cb16565b905081811115611e2657600080fd5b611e3086866126ac565b60088290559250611ed2565b611e69336040805190810160405280601081526020016000805160206129d583398151915281525061128b565b15611ec557611e78338661278d565b9150600082111561136c57611e8d86836126ac565b33600090815260156020526040902054909350611eb0908363ffffffff6121cb16565b33600090815260156020526040902055611ed2565b611ecf86866126ac565b92505b5090949350505050565b635d422b8181565b600d5481565b635dbb758181565b600a5481565b6401ad64510081565b63179a7b0081565b60408051808201909152601481526000805160206129f5833981519152602082015281565b600160a060020a031660009081526015602052604090205490565b635bda420181565b6000600160a060020a0383161515611f6857600080fd5b336000908152600460209081526040808320600160a060020a0387168452909152902054611f9c908363ffffffff6121cb16565b336000818152600460209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600160a060020a03918216600090815260046020908152604080832093909416825291909152205490565b60085481565b600054600160a060020a0316331461204957600080fd5b6113de816128a1565b635f9dfa8181565b635bb2b50181565b6000903b1190565b600082151561207b57506000610e63565b5081810281838281151561208b57fe5b0414610e6357fe5b6120fd826001836040518082805190602001908083835b602083106120c95780518252601f1990920191602091820191016120aa565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050612911565b81600160a060020a03167fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a826040518080602001828103825283818151815260200191508051906020019080838360005b8381101561216657818101518382015260200161214e565b50505050905090810190601f1680156121935780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b6000828211156121b057fe5b50900390565b6121c082826122aa565b1515610ed357600080fd5b81810182811015610e6357fe5b612242826001836040518082805190602001908083835b6020831061220e5780518252601f1990920191602091820191016121ef565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050612933565b81600160a060020a03167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489826040518080602001828103825283818151815260200191508051906020019080838360008381101561216657818101518382015260200161214e565b600160a060020a03166000908152602091909152604090205460ff1690565b60008060006122e384600a546121cb90919063ffffffff16565b600754909250612304906347868c009060ff16600a0a63ffffffff61206a16565b82111561231057600080fd5b60005461232790600160a060020a03168686612367565b3360009081526016602052604090205490915061234a908563ffffffff6121cb16565b33600090815260166020526040902055600a919091559392505050565b600160a060020a03831660009081526002602052604081205482111561238c57600080fd5b600160a060020a03841660009081526004602090815260408083203384529091529020548211156123bc57600080fd5b600160a060020a03831615156123d157600080fd5b600160a060020a0384166000908152600260205260409020546123fa908363ffffffff6121a416565b600160a060020a03808616600090815260026020526040808220939093559085168152205461242f908363ffffffff6121cb16565b600160a060020a038085166000908152600260209081526040808320949094559187168152600482528281203382529091522054612473908363ffffffff6121a416565b600160a060020a03808616600081815260046020908152604080832033845282529182902094909455805186815290519287169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35060019392505050565b6007546000904290829081906125059063179a7b009060ff16600a0a63ffffffff61206a16565b9150635bb16381831061256257600754612530906347868c009060ff16600a0a63ffffffff61206a16565b905080600a54101561256257600a5461255f90612553848463ffffffff6121cb16565b9063ffffffff6121a416565b91505b635bda420183106125b4576007546125b1906125a49060ff16600a0a6125986401ad64510064012a05f20063ffffffff6121a416565b9063ffffffff61206a16565b839063ffffffff6121cb16565b91505b635c538c0183106125e4576007546125e1906125a4906307270e009060ff16600a0a63ffffffff61206a16565b91505b635cc8e181831061261557600754612612906125a49064012a05f2009060ff16600a0a63ffffffff61206a16565b91505b635dbb7581831061264557600754612642906125a4906315752a009060ff16600a0a63ffffffff61206a16565b91505b635f9dfa81831061267557600754612672906125a4906315752a009060ff16600a0a63ffffffff61206a16565b91505b63617f2e0183106126a5576007546126a2906125a4906315752a009060ff16600a0a63ffffffff61206a16565b91505b5092915050565b336000908152600260205260408120548211156126c857600080fd5b600160a060020a03831615156126dd57600080fd5b336000908152600260205260409020546126fd908363ffffffff6121a416565b3360009081526002602052604080822092909255600160a060020a0385168152205461272f908363ffffffff6121cb16565b600160a060020a0384166000818152600260209081526040918290209390935580518581529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600192915050565b600080600080600061279e87611aa1565b600160a060020a03881660009081526015602052604090205490945092506127cc838563ffffffff6121cb16565b9150429050600084116127de57600080fd5b635dbb758181106127f157819350612867565b635d422b8181106128255761281e606461281284604b63ffffffff61206a16565b9063ffffffff61295816565b9350612867565b635cc8e18181106128415761281e82600263ffffffff61295816565b635c538c0181106128625761281e606461281284601963ffffffff61206a16565b600093505b838310612877576000935061288a565b612887848463ffffffff6121a416565b93505b83861015612896578593505b509195945050505050565b600160a060020a03811615156128b657600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b600160a060020a0316600090815260209190915260409020805460ff19169055565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000818381151561296557fe5b049392505050565b81548183558181111561299157600083815260209020612991918101908301612996565b505050565b61128091905b808211156129b0576000815560010161299c565b509056007d794f058f68b76e7ec56cf405982d6cddbac0baba1afbdf64368efa3e8b37ab706172746e657257686974656c697374000000000000000000000000000000007072697661746553616c6557686974656c697374000000000000000000000000a165627a7a7230582085fe8cacb4b93d4e9aba7506be3e0c438244201f910733d02d5be2fc499b731b0029
Swarm Source
bzzr://85fe8cacb4b93d4e9aba7506be3e0c438244201f910733d02d5be2fc499b731b
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.