More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 472 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 9069687 | 1900 days ago | IN | 2.9 ETH | 0.01011768 | ||||
Transfer | 9038777 | 1905 days ago | IN | 1.0538 ETH | 0.01296839 | ||||
Transfer | 9038774 | 1905 days ago | IN | 1.0538 ETH | 0.01548922 | ||||
Transfer | 9038766 | 1905 days ago | IN | 1.0482 ETH | 0.01414734 | ||||
Transfer | 9038761 | 1905 days ago | IN | 1.0478 ETH | 0.0201457 | ||||
Transfer | 9038500 | 1905 days ago | IN | 1.099 ETH | 0.0024908 | ||||
Transfer | 9038494 | 1905 days ago | IN | 1.099 ETH | 0.00182011 | ||||
Transfer | 9038386 | 1905 days ago | IN | 1.12 ETH | 0.01763756 | ||||
Transfer | 9038378 | 1905 days ago | IN | 1.096 ETH | 0.01479937 | ||||
Transfer | 9038337 | 1905 days ago | IN | 1.12 ETH | 0.01169756 | ||||
Transfer | 8931620 | 1923 days ago | IN | 1.38 ETH | 0.01302393 | ||||
Set Ether Price | 8750496 | 1953 days ago | IN | 0 ETH | 0.00117403 | ||||
Transfer | 8739736 | 1954 days ago | IN | 1.084 ETH | 0.01550776 | ||||
Rescue Tokens | 8738379 | 1955 days ago | IN | 0 ETH | 0.00176697 | ||||
Transfer | 8736518 | 1955 days ago | IN | 1.1099 ETH | 0.01233281 | ||||
Set Ether Price | 8725775 | 1956 days ago | IN | 0 ETH | 0.00117665 | ||||
Transfer | 8724519 | 1957 days ago | IN | 1.1333 ETH | 0.01233281 | ||||
Transfer | 8724517 | 1957 days ago | IN | 1.1024 ETH | 0.01469797 | ||||
Transfer | 8724512 | 1957 days ago | IN | 1.1003 ETH | 0.01228232 | ||||
Set Ether Price | 8718602 | 1958 days ago | IN | 0 ETH | 0.00117403 | ||||
Transfer | 8668240 | 1966 days ago | IN | 1.4 ETH | 0.01971355 | ||||
Transfer | 8668080 | 1966 days ago | IN | 1 ETH | 0.01650523 | ||||
Transfer | 8667946 | 1966 days ago | IN | 1 ETH | 0.02389564 | ||||
Transfer | 8667943 | 1966 days ago | IN | 1 ETH | 0.01980627 | ||||
Transfer | 8667940 | 1966 days ago | IN | 1 ETH | 0.02148528 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
9069687 | 1900 days ago | 1.44 ETH | ||||
9069687 | 1900 days ago | 0.029 ETH | ||||
9069687 | 1900 days ago | 0.029 ETH | ||||
9069687 | 1900 days ago | 0.029 ETH | ||||
9069687 | 1900 days ago | 0.029 ETH | ||||
9069687 | 1900 days ago | 0.029 ETH | ||||
9069687 | 1900 days ago | 0.029 ETH | ||||
9069687 | 1900 days ago | 0.029 ETH | ||||
9069687 | 1900 days ago | 0.029 ETH | ||||
9069687 | 1900 days ago | 0.058 ETH | ||||
9069687 | 1900 days ago | 0.087 ETH | ||||
9069687 | 1900 days ago | 0.116 ETH | ||||
9069687 | 1900 days ago | 0.145 ETH | ||||
9069687 | 1900 days ago | 0.174 ETH | ||||
9069687 | 1900 days ago | 0.174 ETH | ||||
9038777 | 1905 days ago | 0.53 ETH | ||||
9038777 | 1905 days ago | 0.010538 ETH | ||||
9038777 | 1905 days ago | 0.010538 ETH | ||||
9038777 | 1905 days ago | 0.010538 ETH | ||||
9038777 | 1905 days ago | 0.010538 ETH | ||||
9038777 | 1905 days ago | 0.010538 ETH | ||||
9038777 | 1905 days ago | 0.010538 ETH | ||||
9038777 | 1905 days ago | 0.010538 ETH | ||||
9038777 | 1905 days ago | 0.010538 ETH | ||||
9038777 | 1905 days ago | 0.021076 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
TGPublicSale
Compiler Version
v0.5.7+commit.6da8b019
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-07-26 */ pragma solidity ^0.5.7; // TG Public Sale /** * @title SafeMath for uint256 * @dev Unsigned math operations with safety checks that revert on error. */ library SafeMath256 { /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } /** * @dev Subtracts two unsigned integers, reverts 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 Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, * reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { assert(b > 0); uint256 c = a / b; assert(a == b * c + a % b); return a / b; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } /** * @title SafeMath for uint16 * @dev Unsigned math operations with safety checks that revert on error. */ library SafeMath16 { /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint16 a, uint16 b) internal pure returns (uint16 c) { c = a + b; assert(c >= a); return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint16 a, uint16 b) internal pure returns (uint16) { assert(b <= a); return a - b; } /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint16 a, uint16 b) internal pure returns (uint16 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, * reverts on division by zero. */ function div(uint16 a, uint16 b) internal pure returns (uint16) { assert(b > 0); uint256 c = a / b; assert(a == b * c + a % b); return a / b; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint16 a, uint16 b) internal pure returns (uint16) { require(b != 0); return a % b; } } /** * @title Ownable */ contract Ownable { address private _owner; address payable internal _receiver; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event ReceiverChanged(address indexed previousReceiver, address indexed newReceiver); /** * @dev The Ownable constructor sets the original `owner` of the contract * to the sender account. */ constructor () internal { _owner = msg.sender; _receiver = msg.sender; } /** * @return The address of the owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == _owner); _; } /** * @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) external onlyOwner { require(newOwner != address(0)); address __previousOwner = _owner; _owner = newOwner; emit OwnershipTransferred(__previousOwner, newOwner); } /** * @dev Change receiver. */ function changeReceiver(address payable newReceiver) external onlyOwner { require(newReceiver != address(0)); address __previousReceiver = _receiver; _receiver = newReceiver; emit ReceiverChanged(__previousReceiver, newReceiver); } /** * @dev Rescue compatible ERC20 Token * * @param tokenAddr ERC20 The address of the ERC20 token contract * @param receiver The address of the receiver * @param amount uint256 */ function rescueTokens(address tokenAddr, address receiver, uint256 amount) external onlyOwner { IERC20 _token = IERC20(tokenAddr); require(receiver != address(0)); uint256 balance = _token.balanceOf(address(this)); require(balance >= amount); assert(_token.transfer(receiver, amount)); } /** * @dev Withdraw ether */ function withdrawEther(address payable to, uint256 amount) external onlyOwner { require(to != address(0)); uint256 balance = address(this).balance; require(balance >= amount); to.transfer(amount); } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { bool private _paused; event Paused(address account); event Unpaused(address account); constructor () internal { _paused = false; } /** * @return Returns true if the contract is paused, false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!_paused, "Paused."); _; } /** * @dev Called by a pauser to pause, triggers stopped state. */ function setPaused(bool state) external onlyOwner { if (_paused && !state) { _paused = false; emit Unpaused(msg.sender); } else if (!_paused && state) { _paused = true; emit Paused(msg.sender); } } } /** * @title ERC20 interface * @dev see https://eips.ethereum.org/EIPS/eip-20 */ interface IERC20 { function balanceOf(address owner) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); } /** * @title TG interface */ interface ITG { function balanceOf(address owner) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function inWhitelist(address account) external view returns (bool); function referrer(address account) external view returns (address); function refCount(address account) external view returns (uint256); } /** * @title TG Public Sale */ contract TGPublicSale is Ownable, Pausable{ using SafeMath16 for uint16; using SafeMath256 for uint256; // TG address TG_Addr = address(0); ITG public TG = ITG(TG_Addr); // Start timestamp uint32 _startTimestamp; // Audit ether price uint256 private _etherPrice; // 1 Ether = xx.xxxxxx USD, with 6 decimals // Referral rewards, 35% for 15 levels uint16 private WHITELIST_REF_REWARDS_PCT_SUM = 35; uint16[15] private WHITELIST_REF_REWARDS_PCT = [ 6, // 6% for Level.1 6, // 6% for Level.2 5, // 5% for Level.3 4, // 4% for Level.4 3, // 3% for Level.5 2, // 2% for Level.6 1, // 1% for Level.7 1, // 1% for Level.8 1, // 1% for Level.9 1, // 1% for Level.10 1, // 1% for Level.11 1, // 1% for Level.12 1, // 1% for Level.13 1, // 1% for Level.14 1 // 1% for Level.15 ]; // Wei & Gas uint72 private WEI_MIN = 0.1 ether; // 0.1 Ether Minimum uint72 private WEI_MAX = 100 ether; // 100 Ether Maximum uint72 private WEI_BONUS = 10 ether; // >10 Ether for Bonus uint24 private GAS_MIN = 3000000; // 3.0 Mwei gas Mininum uint24 private GAS_EX = 1500000; // 1.5 Mwei gas for ex // Price uint256 private TG_USD_PRICE_START = 1000; // $ 0.00100 USD uint256 private TG_USD_PRICE_STEP = 10; // $ + 0.00001 USD uint256 private STAGE_USD_CAP_START = 100000000; // $ 100 USD uint256 private STAGE_USD_CAP_STEP = 1000000; // $ +1 USD uint256 private STAGE_USD_CAP_MAX = 15100000000; // $ 15,100 USD uint256 private _TGUsdPrice = TG_USD_PRICE_START; // Progress uint16 private STAGE_MAX = 60000; // 60,000 stages total uint16 private SEASON_MAX = 100; // 100 seasons total uint16 private SEASON_STAGES = 600; // each 600 stages is a season uint16 private _stage; uint16 private _season; // Sum uint256 private _txs; uint256 private _TGTxs; uint256 private _TGBonusTxs; uint256 private _TGWhitelistTxs; uint256 private _TGIssued; uint256 private _TGBonus; uint256 private _TGWhitelist; uint256 private _weiSold; uint256 private _weiRefRewarded; uint256 private _weiTopSales; uint256 private _weiTeam; uint256 private _weiPending; uint256 private _weiPendingTransfered; // Top-Sales uint256 private TOP_SALES_RATIO_START = 15000000; // 15%, with 8 decimals uint256 private TOP_SALES_RATIO_DISTANCE = 50000000; // 50%, with 8 decimals uint256 private _topSalesRatio = TOP_SALES_RATIO_START; // 15% + 50% x(_stage/_stageMax) // During tx bool private _inWhitelist_; uint256 private _pending_ = WHITELIST_REF_REWARDS_PCT_SUM; uint16[] private _rewards_; address[] private _referrers_; // Audit ether price auditor mapping (address => bool) private _etherPriceAuditors; // Stage mapping (uint16 => uint256) private _stageUsdSold; mapping (uint16 => uint256) private _stageTGIssued; // Season mapping (uint16 => uint256) private _seasonWeiSold; mapping (uint16 => uint256) private _seasonWeiTopSales; mapping (uint16 => uint256) private _seasonWeiTopSalesTransfered; // Account mapping (address => uint256) private _accountTGIssued; mapping (address => uint256) private _accountTGBonus; mapping (address => uint256) private _accountTGWhitelisted; mapping (address => uint256) private _accountWeiPurchased; mapping (address => uint256) private _accountWeiRefRewarded; // Ref mapping (uint16 => address[]) private _seasonRefAccounts; mapping (uint16 => mapping (address => bool)) private _seasonHasRefAccount; mapping (uint16 => mapping (address => uint256)) private _usdSeasonAccountPurchased; mapping (uint16 => mapping (address => uint256)) private _usdSeasonAccountRef; // Events event AuditEtherPriceChanged(uint256 value, address indexed account); event AuditEtherPriceAuditorChanged(address indexed account, bool state); event TGBonusTransfered(address indexed to, uint256 amount); event TGWhitelistTransfered(address indexed to, uint256 amount); event TGIssuedTransfered(uint16 stageIndex, address indexed to, uint256 TGAmount, uint256 auditEtherPrice, uint256 weiUsed); event StageClosed(uint256 _stageNumber, address indexed account); event SeasonClosed(uint16 _seasonNumber, address indexed account); event SeasonTopSalesWeiTransfered(uint16 seasonNumber, address indexed to, uint256 amount); event TeamWeiTransfered(address indexed to, uint256 amount); event PendingWeiTransfered(address indexed to, uint256 amount); /** * @dev Start timestamp. */ function startTimestamp() public view returns (uint32) { return _startTimestamp; } /** * @dev Set start timestamp. */ function setStartTimestamp(uint32 timestamp) external onlyOwner { _startTimestamp = timestamp; } /** * @dev Throws if not ether price auditor. */ modifier onlyEtherPriceAuditor() { require(_etherPriceAuditors[msg.sender]); _; } /** * @dev Set audit ether price. */ function setEtherPrice(uint256 value) external onlyEtherPriceAuditor { _etherPrice = value; emit AuditEtherPriceChanged(value, msg.sender); } /** * @dev Get ether price auditor state. */ function etherPriceAuditor(address account) public view returns (bool) { return _etherPriceAuditors[account]; } /** * @dev Get ether price auditor state. */ function setEtherPriceAuditor(address account, bool state) external onlyOwner { _etherPriceAuditors[account] = state; emit AuditEtherPriceAuditorChanged(account, state); } /** * @dev Stage TG price in USD, by stage index. */ function stageTGUsdPrice(uint16 stageIndex) private view returns (uint256) { return TG_USD_PRICE_START.add(TG_USD_PRICE_STEP.mul(stageIndex)); } /** * @dev wei => USD */ function wei2usd(uint256 amount) private view returns (uint256) { return amount.mul(_etherPrice).div(1 ether); } /** * @dev USD => wei */ function usd2wei(uint256 amount) private view returns (uint256) { return amount.mul(1 ether).div(_etherPrice); } /** * @dev USD => TG */ function usd2TG(uint256 usdAmount) private view returns (uint256) { return usdAmount.mul(1000000).div(_TGUsdPrice); } /** * @dev USD => TG */ function usd2TGByStage(uint256 usdAmount, uint16 stageIndex) public view returns (uint256) { return usdAmount.mul(1000000).div(stageTGUsdPrice(stageIndex)); } /** * @dev Calculate season number, by stage index. */ function calcSeason(uint16 stageIndex) private view returns (uint16) { if (stageIndex > 0) { uint16 __seasonNumber = stageIndex.div(SEASON_STAGES); if (stageIndex.mod(SEASON_STAGES) > 0) { return __seasonNumber.add(1); } return __seasonNumber; } return 1; } /** * @dev Transfer Top-Sales wei, by season number. */ function transferTopSales(uint16 seasonNumber, address payable to) external onlyOwner { uint256 __weiRemain = seasonTopSalesRemain(seasonNumber); require(to != address(0)); _seasonWeiTopSalesTransfered[seasonNumber] = _seasonWeiTopSalesTransfered[seasonNumber].add(__weiRemain); emit SeasonTopSalesWeiTransfered(seasonNumber, to, __weiRemain); to.transfer(__weiRemain); } /** * @dev Pending remain, in wei. */ function pendingRemain() private view returns (uint256) { return _weiPending.sub(_weiPendingTransfered); } /** * @dev Transfer pending wei. */ function transferPending(address payable to) external onlyOwner { uint256 __weiRemain = pendingRemain(); require(to != address(0)); _weiPendingTransfered = _weiPendingTransfered.add(__weiRemain); emit PendingWeiTransfered(to, __weiRemain); to.transfer(__weiRemain); } /** * @dev Transfer team wei. */ function transferTeam(address payable to) external onlyOwner { uint256 __weiRemain = _weiSold.sub(_weiRefRewarded).sub(_weiTopSales).sub(_weiPending).sub(_weiTeam); require(to != address(0)); _weiTeam = _weiTeam.add(__weiRemain); emit TeamWeiTransfered(to, __weiRemain); to.transfer(__weiRemain); } /** * @dev Status. */ function status() public view returns (uint256 auditEtherPrice, uint16 stage, uint16 season, uint256 TGUsdPrice, uint256 currentTopSalesRatio, uint256 txs, uint256 TGTxs, uint256 TGBonusTxs, uint256 TGWhitelistTxs, uint256 TGIssued, uint256 TGBonus, uint256 TGWhitelist) { auditEtherPrice = _etherPrice; if (_stage > STAGE_MAX) { stage = STAGE_MAX; season = SEASON_MAX; } else { stage = _stage; season = _season; } TGUsdPrice = _TGUsdPrice; currentTopSalesRatio = _topSalesRatio; txs = _txs; TGTxs = _TGTxs; TGBonusTxs = _TGBonusTxs; TGWhitelistTxs = _TGWhitelistTxs; TGIssued = _TGIssued; TGBonus = _TGBonus; TGWhitelist = _TGWhitelist; } /** * @dev Sum. */ function sum() public view returns(uint256 weiSold, uint256 weiReferralRewarded, uint256 weiTopSales, uint256 weiTeam, uint256 weiPending, uint256 weiPendingTransfered, uint256 weiPendingRemain) { weiSold = _weiSold; weiReferralRewarded = _weiRefRewarded; weiTopSales = _weiTopSales; weiTeam = _weiTeam; weiPending = _weiPending; weiPendingTransfered = _weiPendingTransfered; weiPendingRemain = pendingRemain(); } /** * @dev Throws if gas is not enough. */ modifier enoughGas() { require(gasleft() > GAS_MIN); _; } /** * @dev Throws if not started. */ modifier onlyOnSale() { require(_startTimestamp > 0 && now > _startTimestamp, "TG Public-Sale has not started yet."); require(_etherPrice > 0, "Audit ETH price must be greater than zero."); require(!paused(), "TG Public-Sale is paused."); require(_stage <= STAGE_MAX, "TG Public-Sale Closed."); _; } /** * @dev Top-Sales ratio. */ function topSalesRatio(uint16 stageIndex) private view returns (uint256) { return TOP_SALES_RATIO_START.add(TOP_SALES_RATIO_DISTANCE.mul(stageIndex).div(STAGE_MAX)); } /** * @dev USD => wei, for Top-Sales */ function usd2weiTopSales(uint256 usdAmount) private view returns (uint256) { return usd2wei(usdAmount.mul(_topSalesRatio).div(100000000)); } /** * @dev Calculate stage dollor cap, by stage index. */ function stageUsdCap(uint16 stageIndex) private view returns (uint256) { uint256 __usdCap = STAGE_USD_CAP_START.add(STAGE_USD_CAP_STEP.mul(stageIndex)); if (__usdCap > STAGE_USD_CAP_MAX) { return STAGE_USD_CAP_MAX; } return __usdCap; } /** * @dev Stage Vokdn cap, by stage index. */ function stageTGCap(uint16 stageIndex) private view returns (uint256) { return usd2TGByStage(stageUsdCap(stageIndex), stageIndex); } /** * @dev Stage status, by stage index. */ function stageStatus(uint16 stageIndex) public view returns (uint256 TGUsdPrice, uint256 TGCap, uint256 TGOnSale, uint256 TGSold, uint256 usdCap, uint256 usdOnSale, uint256 usdSold, uint256 weiTopSalesRatio) { if (stageIndex > STAGE_MAX) { return (0, 0, 0, 0, 0, 0, 0, 0); } TGUsdPrice = stageTGUsdPrice(stageIndex); TGSold = _stageTGIssued[stageIndex]; TGCap = stageTGCap(stageIndex); TGOnSale = TGCap.sub(TGSold); usdSold = _stageUsdSold[stageIndex]; usdCap = stageUsdCap(stageIndex); usdOnSale = usdCap.sub(usdSold); weiTopSalesRatio = topSalesRatio(stageIndex); } /** * @dev Season Top-Sales remain, in wei. */ function seasonTopSalesRemain(uint16 seasonNumber) private view returns (uint256) { return _seasonWeiTopSales[seasonNumber].sub(_seasonWeiTopSalesTransfered[seasonNumber]); } /** * @dev Season Top-Sales rewards, by season number, in wei. */ function seasonTopSalesRewards(uint16 seasonNumber) public view returns (uint256 weiSold, uint256 weiTopSales, uint256 weiTopSalesTransfered, uint256 weiTopSalesRemain) { weiSold = _seasonWeiSold[seasonNumber]; weiTopSales = _seasonWeiTopSales[seasonNumber]; weiTopSalesTransfered = _seasonWeiTopSalesTransfered[seasonNumber]; weiTopSalesRemain = seasonTopSalesRemain(seasonNumber); } /** * @dev Query account. */ function accountQuery(address account) public view returns (uint256 TGIssued, uint256 TGBonus, uint256 TGWhitelisted, uint256 weiPurchased, uint256 weiReferralRewarded) { TGIssued = _accountTGIssued[account]; TGBonus = _accountTGBonus[account]; TGWhitelisted = _accountTGWhitelisted[account]; weiPurchased = _accountWeiPurchased[account]; weiReferralRewarded = _accountWeiRefRewarded[account]; } /** * @dev Accounts in a specific season. */ function seasonRefAccounts(uint16 seasonNumber) public view returns (address[] memory accounts) { accounts = _seasonRefAccounts[seasonNumber]; } /** * @dev Season number => account => USD purchased. */ function usdSeasonAccountPurchased(uint16 seasonNumber, address account) public view returns (uint256) { return _usdSeasonAccountPurchased[seasonNumber][account]; } /** * @dev Season number => account => referral dollors. */ function usdSeasonAccountRef(uint16 seasonNumber, address account) public view returns (uint256) { return _usdSeasonAccountRef[seasonNumber][account]; } /** * @dev constructor */ constructor () public { _etherPriceAuditors[msg.sender] = true; _stage = 0; _season = 1; } /** * @dev Receive ETH, and send TGs. */ function () external payable enoughGas onlyOnSale { require(msg.value >= WEI_MIN); require(msg.value <= WEI_MAX); // Set temporary variables. setTemporaryVariables(); uint256 __usdAmount = wei2usd(msg.value); uint256 __usdRemain = __usdAmount; uint256 __TGIssued; uint256 __TGBonus; uint256 __usdUsed; uint256 __weiUsed; // USD => TG while (gasleft() > GAS_EX && __usdRemain > 0 && _stage <= STAGE_MAX) { uint256 __txTGIssued; (__txTGIssued, __usdRemain) = ex(__usdRemain); __TGIssued = __TGIssued.add(__txTGIssued); } // Used __usdUsed = __usdAmount.sub(__usdRemain); __weiUsed = usd2wei(__usdUsed); // Bonus 10% if (msg.value >= WEI_BONUS) { __TGBonus = __TGIssued.div(10); assert(transferTGBonus(__TGBonus)); } // Whitelisted // BUY-ONE-AND-GET-ONE-MORE-FREE if (_inWhitelist_ && __TGIssued > 0) { // both issued and bonus assert(transferTGWhitelisted(__TGIssued.add(__TGBonus))); // 35% for 15 levels sendWhitelistReferralRewards(__weiUsed); } // If wei remains, refund. if (__usdRemain > 0) { uint256 __weiRemain = usd2wei(__usdRemain); __weiUsed = msg.value.sub(__weiRemain); // Refund wei back msg.sender.transfer(__weiRemain); } // Counter if (__weiUsed > 0) { _txs = _txs.add(1); _weiSold = _weiSold.add(__weiUsed); _accountWeiPurchased[msg.sender] = _accountWeiPurchased[msg.sender].add(__weiUsed); } // Wei team uint256 __weiTeam; if (_season > SEASON_MAX) __weiTeam = _weiSold.sub(_weiRefRewarded).sub(_weiTopSales).sub(_weiPending).sub(_weiTeam); else __weiTeam = _weiSold.sub(_weiRefRewarded).sub(_weiTopSales).sub(_weiPending).sub(_weiTeam).div(0.01 ether).mul(0.01 ether); _weiTeam = _weiTeam.add(__weiTeam); _receiver.transfer(__weiTeam); // Assert finished assert(true); } /** * @dev Set temporary variables. */ function setTemporaryVariables() private { delete _referrers_; delete _rewards_; _inWhitelist_ = TG.inWhitelist(msg.sender); _pending_ = WHITELIST_REF_REWARDS_PCT_SUM; address __cursor = msg.sender; for(uint16 i = 0; i < WHITELIST_REF_REWARDS_PCT.length; i++) { address __refAccount = TG.referrer(__cursor); if (__cursor == __refAccount) break; if (TG.refCount(__refAccount) > i) { if (!_seasonHasRefAccount[_season][__refAccount]) { _seasonRefAccounts[_season].push(__refAccount); _seasonHasRefAccount[_season][__refAccount] = true; } _pending_ = _pending_.sub(WHITELIST_REF_REWARDS_PCT[i]); _rewards_.push(WHITELIST_REF_REWARDS_PCT[i]); _referrers_.push(__refAccount); } __cursor = __refAccount; } } /** * @dev USD => TG */ function ex(uint256 usdAmount) private returns (uint256, uint256) { uint256 __stageUsdCap = stageUsdCap(_stage); uint256 __TGIssued; if (_stageUsdSold[_stage].add(usdAmount) > __stageUsdCap) { // calc used usd uint256 __usdUsed = __stageUsdCap.sub(_stageUsdSold[_stage]); // calc usd remain uint256 __usdRemain = usdAmount.sub(__usdUsed); // count status exCount(__usdUsed); // calc token issued __TGIssued = usd2TG(__usdUsed); // commit assert(transferTGIssued(__TGIssued, __usdUsed)); assert(closeStage()); return (__TGIssued, __usdRemain); } else { // count status exCount(usdAmount); // calc token issued __TGIssued = usd2TG(usdAmount); // commit assert(transferTGIssued(__TGIssued, usdAmount)); // close stage, if stage dollor cap reached if (__stageUsdCap == _stageUsdSold[_stage]) { assert(closeStage()); } return (__TGIssued, 0); } } /** * @dev Ex counter. */ function exCount(uint256 usdAmount) private { uint256 __weiSold = usd2wei(usdAmount); uint256 __weiTopSales = usd2weiTopSales(usdAmount); _usdSeasonAccountPurchased[_season][msg.sender] = _usdSeasonAccountPurchased[_season][msg.sender].add(usdAmount); // season => address => purchased, in USD _stageUsdSold[_stage] = _stageUsdSold[_stage].add(usdAmount); // stage sold, in USD _seasonWeiSold[_season] = _seasonWeiSold[_season].add(__weiSold); // season sold, in wei _seasonWeiTopSales[_season] = _seasonWeiTopSales[_season].add(__weiTopSales); // season Top-Sales, in wei _weiTopSales = _weiTopSales.add(__weiTopSales); // sum Top-Sales, in wei // season referral account if (_inWhitelist_) { for (uint16 i = 0; i < _rewards_.length; i++) { _usdSeasonAccountRef[_season][_referrers_[i]] = _usdSeasonAccountRef[_season][_referrers_[i]].add(usdAmount); } } } /** * @dev Transfer TG issued. */ function transferTGIssued(uint256 amount, uint256 usdAmount) private returns (bool) { _TGTxs = _TGTxs.add(1); _TGIssued = _TGIssued.add(amount); _stageTGIssued[_stage] = _stageTGIssued[_stage].add(amount); _accountTGIssued[msg.sender] = _accountTGIssued[msg.sender].add(amount); assert(TG.transfer(msg.sender, amount)); emit TGIssuedTransfered(_stage, msg.sender, amount, _etherPrice, usdAmount); return true; } /** * @dev Transfer TG bonus. */ function transferTGBonus(uint256 amount) private returns (bool) { _TGBonusTxs = _TGBonusTxs.add(1); _TGBonus = _TGBonus.add(amount); _accountTGBonus[msg.sender] = _accountTGBonus[msg.sender].add(amount); assert(TG.transfer(msg.sender, amount)); emit TGBonusTransfered(msg.sender, amount); return true; } /** * @dev Transfer TG whitelisted. */ function transferTGWhitelisted(uint256 amount) private returns (bool) { _TGWhitelistTxs = _TGWhitelistTxs.add(1); _TGWhitelist = _TGWhitelist.add(amount); _accountTGWhitelisted[msg.sender] = _accountTGWhitelisted[msg.sender].add(amount); assert(TG.transfer(msg.sender, amount)); emit TGWhitelistTransfered(msg.sender, amount); return true; } /** * Close current stage. */ function closeStage() private returns (bool) { emit StageClosed(_stage, msg.sender); _stage = _stage.add(1); _TGUsdPrice = stageTGUsdPrice(_stage); _topSalesRatio = topSalesRatio(_stage); // Close current season uint16 __seasonNumber = calcSeason(_stage); if (_season < __seasonNumber) { emit SeasonClosed(_season, msg.sender); _season = __seasonNumber; } return true; } /** * @dev Send whitelist referral rewards. */ function sendWhitelistReferralRewards(uint256 weiAmount) private { uint256 __weiRemain = weiAmount; for (uint16 i = 0; i < _rewards_.length; i++) { uint256 __weiReward = weiAmount.mul(_rewards_[i]).div(100); address payable __receiver = address(uint160(_referrers_[i])); _weiRefRewarded = _weiRefRewarded.add(__weiReward); _accountWeiRefRewarded[__receiver] = _accountWeiRefRewarded[__receiver].add(__weiReward); __weiRemain = __weiRemain.sub(__weiReward); __receiver.transfer(__weiReward); } if (_pending_ > 0) _weiPending = _weiPending.add(weiAmount.mul(_pending_).div(100)); } /** * @dev set TG Address */ function setTGAddress(address _TgAddr) public onlyOwner { TG_Addr = _TgAddr; TG = ITG(_TgAddr); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"state","type":"bool"}],"name":"setPaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"status","outputs":[{"name":"auditEtherPrice","type":"uint256"},{"name":"stage","type":"uint16"},{"name":"season","type":"uint16"},{"name":"TGUsdPrice","type":"uint256"},{"name":"currentTopSalesRatio","type":"uint256"},{"name":"txs","type":"uint256"},{"name":"TGTxs","type":"uint256"},{"name":"TGBonusTxs","type":"uint256"},{"name":"TGWhitelistTxs","type":"uint256"},{"name":"TGIssued","type":"uint256"},{"name":"TGBonus","type":"uint256"},{"name":"TGWhitelist","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"etherPriceAuditor","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"state","type":"bool"}],"name":"setEtherPriceAuditor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"setEtherPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"transferPending","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"stageIndex","type":"uint16"}],"name":"stageStatus","outputs":[{"name":"TGUsdPrice","type":"uint256"},{"name":"TGCap","type":"uint256"},{"name":"TGOnSale","type":"uint256"},{"name":"TGSold","type":"uint256"},{"name":"usdCap","type":"uint256"},{"name":"usdOnSale","type":"uint256"},{"name":"usdSold","type":"uint256"},{"name":"weiTopSalesRatio","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newReceiver","type":"address"}],"name":"changeReceiver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"transferTeam","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sum","outputs":[{"name":"weiSold","type":"uint256"},{"name":"weiReferralRewarded","type":"uint256"},{"name":"weiTopSales","type":"uint256"},{"name":"weiTeam","type":"uint256"},{"name":"weiPending","type":"uint256"},{"name":"weiPendingTransfered","type":"uint256"},{"name":"weiPendingRemain","type":"uint256"}],"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":"seasonNumber","type":"uint16"},{"name":"account","type":"address"}],"name":"usdSeasonAccountRef","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"seasonNumber","type":"uint16"},{"name":"account","type":"address"}],"name":"usdSeasonAccountPurchased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_TgAddr","type":"address"}],"name":"setTGAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TG","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"seasonNumber","type":"uint16"},{"name":"to","type":"address"}],"name":"transferTopSales","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddr","type":"address"},{"name":"receiver","type":"address"},{"name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"seasonNumber","type":"uint16"}],"name":"seasonTopSalesRewards","outputs":[{"name":"weiSold","type":"uint256"},{"name":"weiTopSales","type":"uint256"},{"name":"weiTopSalesTransfered","type":"uint256"},{"name":"weiTopSalesRemain","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"timestamp","type":"uint32"}],"name":"setStartTimestamp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startTimestamp","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"usdAmount","type":"uint256"},{"name":"stageIndex","type":"uint16"}],"name":"usd2TGByStage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"accountQuery","outputs":[{"name":"TGIssued","type":"uint256"},{"name":"TGBonus","type":"uint256"},{"name":"TGWhitelisted","type":"uint256"},{"name":"weiPurchased","type":"uint256"},{"name":"weiReferralRewarded","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":"seasonNumber","type":"uint16"}],"name":"seasonRefAccounts","outputs":[{"name":"accounts","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"value","type":"uint256"},{"indexed":true,"name":"account","type":"address"}],"name":"AuditEtherPriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"},{"indexed":false,"name":"state","type":"bool"}],"name":"AuditEtherPriceAuditorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TGBonusTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TGWhitelistTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"stageIndex","type":"uint16"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"TGAmount","type":"uint256"},{"indexed":false,"name":"auditEtherPrice","type":"uint256"},{"indexed":false,"name":"weiUsed","type":"uint256"}],"name":"TGIssuedTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_stageNumber","type":"uint256"},{"indexed":true,"name":"account","type":"address"}],"name":"StageClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_seasonNumber","type":"uint16"},{"indexed":true,"name":"account","type":"address"}],"name":"SeasonClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"seasonNumber","type":"uint16"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"SeasonTopSalesWeiTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TeamWeiTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"PendingWeiTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Unpaused","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":"previousReceiver","type":"address"},{"indexed":true,"name":"newReceiver","type":"address"}],"name":"ReceiverChanged","type":"event"}]
Contract Creation Code
600280546001600160a01b031990811682556003805490911681556005805461ffff191660231781556102606040526006608081815260a082905260c092909252600460e052610100929092526101209290925260016101408190526101608190526101808190526101a08190526101c08190526101e0819052610200819052610220819052610240526200009691600f62000224565b506007805467016345785d8a00006001600160481b031990911617600160481b600160901b03191671056bc75e2d6310000000000000000000000017600160901b600160d81b031916798ac7230489e8000000000000000000000000000000000000000017600160d81b62ffffff0219167d2dc6c0000000000000000000000000000000000000000000000000000000179055600880546216e36062ffffff199091161790556103e86009819055600a80556305f5e100600b55620f4240600c5564038407b700600d55600e55600f805461ea6061ffff199091161763ffff00001916626400001765ffff0000000019166502580000000017905562e4e1c0601d8190556302faf080601e55601f5560055461ffff16602155348015620001bc57600080fd5b5060008054336001600160a01b031991821681178355600180549092168117600160a01b60ff0219168255825260246020526040909120805460ff19169091179055600f80546801000000000000000069ffffffff00000000000019909116179055620002e5565b600183019183908215620002ae5791602002820160005b838211156200027c57835183826101000a81548161ffff021916908360ff16021790555092602001926002016020816001010492830192600103026200023b565b8015620002ac5782816101000a81549061ffff02191690556002016020816001010492830192600103026200027c565b505b50620002bc929150620002c0565b5090565b620002e291905b80821115620002bc57805461ffff19168155600101620002c7565b90565b61296280620002f56000396000f3fe6080604052600436106101815760003560e01c8063ac5cf934116100d1578063d4eeb6ad1161008a578063eaaeafb311610064578063eaaeafb314610b5b578063f2e2934114610b8f578063f2fde38b14610bed578063f5f56b7a14610c2057610181565b8063d4eeb6ad14610aa9578063de8f246c14610afd578063e6fd48bc14610b2d57610181565b8063ac5cf93414610955578063b7352bee146109a4578063baace5f3146109e1578063bcccdfbf14610a14578063c225135d14610a29578063cea9d26f14610a6657610181565b806348d3297c1161013e5780635c975abb116101185780635c975abb1461088f57806363b26e76146108a4578063853255cc146108d75780638da5cb5b1461092457610181565b806348d3297c146107b4578063522f681514610823578063547e3f061461085c57610181565b806316c38b3c1461062c578063200d2ed21461065a578063223e8eff146106d557806322c8c2cc1461071c5780632718799114610757578063294b2ed014610781575b600754600160d81b900462ffffff165a1161019b57600080fd5b600354600160a01b900463ffffffff16158015906101c75750600354600160a01b900463ffffffff1642115b61020557604051600160e51b62461bcd0281526004018080602001828103825260238152602001806129146023913960400191505060405180910390fd5b60006004541161024957604051600160e51b62461bcd02815260040180806020018281038252602a8152602001806128ea602a913960400191505060405180910390fd5b610251610c9e565b156102a65760408051600160e51b62461bcd02815260206004820152601960248201527f5447205075626c69632d53616c65206973207061757365642e00000000000000604482015290519081900360640190fd5b600f5461ffff808216600160301b90920416111561030e5760408051600160e51b62461bcd02815260206004820152601660248201527f5447205075626c69632d53616c6520436c6f7365642e00000000000000000000604482015290519081900360640190fd5b60075468ffffffffffffffffff1634101561032857600080fd5b6007546901000000000000000000900468ffffffffffffffffff1634111561034f57600080fd5b610357610caf565b600061036234611035565b90508060008080805b60085462ffffff165a1180156103815750600085115b801561039d5750600f5461ffff808216600160301b9092041611155b156103c95760006103ad86611060565b965090506103c1858263ffffffff61119716565b94505061036b565b6103d9868663ffffffff6111aa16565b91506103e4826111bc565b600754909150600160901b900468ffffffffffffffffff1634106104245761041384600a63ffffffff6111de16565b925061041e8361121f565b61042457fe5b60205460ff1680156104365750600084115b156104625761045361044e858563ffffffff61119716565b611347565b61045957fe5b6104628161146f565b84156104b8576000610473866111bc565b9050610485348263ffffffff6111aa16565b604051909250339082156108fc029083906000818181858888f193505050501580156104b5573d6000803e3d6000fd5b50505b801561051c576010546104d290600163ffffffff61119716565b6010556017546104e8908263ffffffff61119716565b601755336000908152602d602052604090205461050b908263ffffffff61119716565b336000908152602d60205260409020555b600f5460009061ffff6201000082048116600160401b90920416111561057857610571601a54610565601b546105656019546105656018546017546111aa90919063ffffffff16565b9063ffffffff6111aa16565b90506105d2565b6105cf662386f26fc100006105c3662386f26fc100006105b7601a54610565601b546105656019546105656018546017546111aa90919063ffffffff16565b9063ffffffff6111de16565b9063ffffffff6115d916565b90505b601a546105e5908263ffffffff61119716565b601a556001546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610622573d6000803e3d6000fd5b5050505050505050005b34801561063857600080fd5b506106586004803603602081101561064f57600080fd5b503515156115fe565b005b34801561066657600080fd5b5061066f6116e2565b604080519c8d5261ffff9b8c1660208e015299909a168b8a015260608b019790975260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083019190915251908190036101800190f35b3480156106e157600080fd5b50610708600480360360208110156106f857600080fd5b50356001600160a01b0316611786565b604080519115158252519081900360200190f35b34801561072857600080fd5b506106586004803603604081101561073f57600080fd5b506001600160a01b03813516906020013515156117a4565b34801561076357600080fd5b506106586004803603602081101561077a57600080fd5b503561181b565b34801561078d57600080fd5b50610658600480360360208110156107a457600080fd5b50356001600160a01b0316611875565b3480156107c057600080fd5b506107e2600480360360208110156107d757600080fd5b503561ffff1661193b565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561082f57600080fd5b506106586004803603604081101561084657600080fd5b506001600160a01b038135169060200135611a0e565b34801561086857600080fd5b506106586004803603602081101561087f57600080fd5b50356001600160a01b0316611a83565b34801561089b57600080fd5b50610708610c9e565b3480156108b057600080fd5b50610658600480360360208110156108c757600080fd5b50356001600160a01b0316611aff565b3480156108e357600080fd5b506108ec611be1565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b34801561093057600080fd5b50610939611c08565b604080516001600160a01b039092168252519081900360200190f35b34801561096157600080fd5b506109926004803603604081101561097857600080fd5b50803561ffff1690602001356001600160a01b0316611c17565b60408051918252519081900360200190f35b3480156109b057600080fd5b50610992600480360360408110156109c757600080fd5b50803561ffff1690602001356001600160a01b0316611c45565b3480156109ed57600080fd5b5061065860048036036020811015610a0457600080fd5b50356001600160a01b0316611c73565b348015610a2057600080fd5b50610939611cb6565b348015610a3557600080fd5b5061065860048036036040811015610a4c57600080fd5b50803561ffff1690602001356001600160a01b0316611cc5565b348015610a7257600080fd5b5061065860048036036060811015610a8957600080fd5b506001600160a01b03813581169160208101359091169060400135611db1565b348015610ab557600080fd5b50610ad760048036036020811015610acc57600080fd5b503561ffff16611efd565b604080519485526020850193909352838301919091526060830152519081900360800190f35b348015610b0957600080fd5b5061065860048036036020811015610b2057600080fd5b503563ffffffff16611f39565b348015610b3957600080fd5b50610b42611f87565b6040805163ffffffff9092168252519081900360200190f35b348015610b6757600080fd5b5061099260048036036040811015610b7e57600080fd5b508035906020013561ffff16611f9a565b348015610b9b57600080fd5b50610bc260048036036020811015610bb257600080fd5b50356001600160a01b0316611fc2565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b348015610bf957600080fd5b5061065860048036036020811015610c1057600080fd5b50356001600160a01b0316612006565b348015610c2c57600080fd5b50610c4e60048036036020811015610c4357600080fd5b503561ffff16612080565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610c8a578181015183820152602001610c72565b505050509050019250505060405180910390f35b600154600160a01b900460ff165b90565b610cbb6023600061288c565b610cc7602260006128aa565b60035460408051600160e01b63e2aafa2102815233600482015290516001600160a01b039092169163e2aafa2191602480820192602092909190829003018186803b158015610d1557600080fd5b505afa158015610d29573d6000803e3d6000fd5b505050506040513d6020811015610d3f57600080fd5b50516020805460ff191691151591909117905560055461ffff166021553360005b600f8161ffff1610156110315760035460408051600160e11b63167801e10281526001600160a01b03858116600483015291516000939290921691632cf003c291602480820192602092909190829003018186803b158015610dc157600080fd5b505afa158015610dd5573d6000803e3d6000fd5b505050506040513d6020811015610deb57600080fd5b505190506001600160a01b038381169082161415610e095750611031565b60035460408051600160e21b633b23e57f0281526001600160a01b038481166004830152915161ffff861693929092169163ec8f95fc91602480820192602092909190829003018186803b158015610e6057600080fd5b505afa158015610e74573d6000803e3d6000fd5b505050506040513d6020811015610e8a57600080fd5b5051111561102757600f54600160401b900461ffff1660009081526030602090815260408083206001600160a01b038516845290915290205460ff16610f4257600f805461ffff600160401b9182900481166000908152602f602090815260408083208054600181810183559185528385200180546001600160a01b038a166001600160a01b0319909116811790915596549590950490931682526030815282822094825293909352909120805460ff191690911790555b610f7860068361ffff16600f8110610f5657fe5b60108104919091015460215491600f166002026101000a900461ffff166111aa565b6021556022600661ffff8416600f8110610f8e57fe5b60108082049290920154835460018082018655600095865260208620948204909401805461ffff6002600f948516810261010090810a83810219909416959097160290950a9093049093169091021790556023805491820181559091527fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42300180546001600160a01b0319166001600160a01b0383161790555b9150600101610d60565b5050565b6000611058670de0b6b3a76400006105b7600454856115d990919063ffffffff16565b90505b919050565b600080600061107e600f60069054906101000a900461ffff166120f1565b600f54600160301b900461ffff166000908152602560205260408120549192509082906110ab9087611197565b111561112f57600f54600160301b900461ffff166000908152602560205260408120546110d99084906111aa565b905060006110ed878363ffffffff6111aa16565b90506110f882612135565b61110182612376565b925061110d8383612393565b61111357fe5b61111b612521565b61112157fe5b919450909250611192915050565b61113885612135565b61114185612376565b905061114d8186612393565b61115357fe5b600f54600160301b900461ffff166000908152602560205260409020548214156111855761117f612521565b61118557fe5b9250600091506111929050565b915091565b818101828110156111a457fe5b92915050565b6000828211156111b657fe5b50900390565b600454600090611058906105b784670de0b6b3a764000063ffffffff6115d916565b60008082116111e957fe5b60008284816111f457fe5b04905082848161120057fe5b0681840201841461120d57fe5b82848161121657fe5b04949350505050565b60125460009061123690600163ffffffff61119716565b60125560155461124c908363ffffffff61119716565b601555336000908152602b602052604090205461126f908363ffffffff61119716565b336000818152602b60209081526040808320949094556003548451600160e01b63a9059cbb02815260048101949094526024840187905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b1580156112d757600080fd5b505af11580156112eb573d6000803e3d6000fd5b505050506040513d602081101561130157600080fd5b505161130957fe5b60408051838152905133917f10c0d19d0fba78db8aad36e658a9b381538bea0eda3e3a46023e8d20d3187fdf919081900360200190a2506001919050565b60135460009061135e90600163ffffffff61119716565b601355601654611374908363ffffffff61119716565b601655336000908152602c6020526040902054611397908363ffffffff61119716565b336000818152602c60209081526040808320949094556003548451600160e01b63a9059cbb02815260048101949094526024840187905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b1580156113ff57600080fd5b505af1158015611413573d6000803e3d6000fd5b505050506040513d602081101561142957600080fd5b505161143157fe5b60408051838152905133917f1648ee5e9a6a29917de9fedd8b9ba92cab336ef9e1cd5703d873a1c94b17385d919081900360200190a2506001919050565b8060005b60225461ffff8216101561159d5760006114c360646105b760228561ffff168154811061149c57fe5b600091825260209091206010820401548891600f166002026101000a900461ffff166115d9565b9050600060238361ffff16815481106114d857fe5b6000918252602090912001546018546001600160a01b039091169150611504908363ffffffff61119716565b6018556001600160a01b0381166000908152602e6020526040902054611530908363ffffffff61119716565b6001600160a01b0382166000908152602e6020526040902055611559848363ffffffff6111aa16565b6040519094506001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611592573d6000803e3d6000fd5b505050600101611473565b5060215415611031576115d26115c360646105b7602154866115d990919063ffffffff16565b601b549063ffffffff61119716565b601b555050565b6000826115e8575060006111a4565b50818102818382816115f657fe5b04146111a457fe5b6000546001600160a01b0316331461161557600080fd5b600154600160a01b900460ff16801561162c575080155b156116795760018054600160a01b60ff02191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a16116df565b600154600160a01b900460ff161580156116905750805b156116df5760018054600160a01b60ff021916600160a01b1790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a15b50565b600454600f54600090819081908190819081908190819081908190819061ffff808216600160301b90920416111561172e57600f5461ffff8082169c506201000090910416995061174b565b600f5461ffff600160301b820481169c50600160401b9091041699505b600e549850601f5497506010549650601154955060125494506013549350601454925060155491506016549050909192939495969798999a9b565b6001600160a01b031660009081526024602052604090205460ff1690565b6000546001600160a01b031633146117bb57600080fd5b6001600160a01b038216600081815260246020908152604091829020805460ff1916851515908117909155825190815291517f7309a1bee0ae3b528b2e9f11ab2abd82b54426646b40c5bef678f09554bd7c8f9281900390910190a25050565b3360009081526024602052604090205460ff1661183757600080fd5b600481905560408051828152905133917f4c93251017d1829354b31aa6cb37ab6ec1b2af6a073553f6073a7a3420cf7393919081900360200190a250565b6000546001600160a01b0316331461188c57600080fd5b6000611896612670565b90506001600160a01b0382166118ab57600080fd5b601c546118be908263ffffffff61119716565b601c556040805182815290516001600160a01b038416917ffcd200d7cba84a55eb61ba9209300062477f6f08297653f398fa5489b65a1704919081900360200190a26040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611936573d6000803e3d6000fd5b505050565b600080600080600080600080600f60009054906101000a900461ffff1661ffff168961ffff16111561198457506000965086955085945084935083925082915081905080611a03565b61198d8961268e565b61ffff8a1660009081526026602052604090205490985094506119af896126bb565b96506119c1878663ffffffff6111aa16565b61ffff8a1660009081526025602052604090205490965091506119e3896120f1565b93506119f5848363ffffffff6111aa16565b9250611a00896126cf565b90505b919395975091939597565b6000546001600160a01b03163314611a2557600080fd5b6001600160a01b038216611a3857600080fd5b303181811015611a4757600080fd5b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015611a7d573d6000803e3d6000fd5b50505050565b6000546001600160a01b03163314611a9a57600080fd5b6001600160a01b038116611aad57600080fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fd36aafedb017e43b79d3cf6aa1987d3fbb9fff33e1738c71dbf6b2abaadbded090600090a35050565b6000546001600160a01b03163314611b1657600080fd5b6000611b41601a54610565601b546105656019546105656018546017546111aa90919063ffffffff16565b90506001600160a01b038216611b5657600080fd5b601a54611b69908263ffffffff61119716565b601a556040805182815290516001600160a01b038416917fe4de4c8dc6ab2404c805abf5db58633d76fc08b6c8b2c0a34d3a47bfb73663bf919081900360200190a26040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611936573d6000803e3d6000fd5b601754601854601954601a54601b54601c546000611bfd612670565b905090919293949596565b6000546001600160a01b031690565b61ffff821660009081526032602090815260408083206001600160a01b038516845290915290205492915050565b61ffff821660009081526031602090815260408083206001600160a01b038516845290915290205492915050565b6000546001600160a01b03163314611c8a57600080fd5b600280546001600160a01b039092166001600160a01b0319928316811790915560038054909216179055565b6003546001600160a01b031681565b6000546001600160a01b03163314611cdc57600080fd5b6000611ce783612707565b90506001600160a01b038216611cfc57600080fd5b61ffff8316600090815260296020526040902054611d20908263ffffffff61119716565b61ffff841660008181526029602090815260409182902093909355805191825291810183905281516001600160a01b038516927f69ccd39c099e91512b4f9c8d1664c05f38430681d4d594a1deec4ace4e7a6e0d928290030190a26040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611a7d573d6000803e3d6000fd5b6000546001600160a01b03163314611dc857600080fd5b826001600160a01b038316611ddc57600080fd5b60408051600160e01b6370a0823102815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015611e2957600080fd5b505afa158015611e3d573d6000803e3d6000fd5b505050506040513d6020811015611e5357600080fd5b5051905082811015611e6457600080fd5b816001600160a01b031663a9059cbb85856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611ec457600080fd5b505af1158015611ed8573d6000803e3d6000fd5b505050506040513d6020811015611eee57600080fd5b5051611ef657fe5b5050505050565b61ffff811660009081526027602090815260408083205460288352818420546029909352908320549092611f3085612707565b90509193509193565b6000546001600160a01b03163314611f5057600080fd5b6003805463ffffffff909216600160a01b0277ffffffff000000000000000000000000000000000000000019909216919091179055565b600354600160a01b900463ffffffff1690565b6000611fbb611fa88361268e565b6105b785620f424063ffffffff6115d916565b9392505050565b6001600160a01b03166000908152602a6020908152604080832054602b835281842054602c845282852054602d855283862054602e90955292909420549094919291565b6000546001600160a01b0316331461201d57600080fd5b6001600160a01b03811661203057600080fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61ffff81166000908152602f60209081526040918290208054835181840281018401909452808452606093928301828280156120e557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116120c7575b50505050509050919050565b60008061211f6121108461ffff16600c546115d990919063ffffffff16565b600b549063ffffffff61119716565b9050600d54811115611058575050600d5461105b565b6000612140826111bc565b9050600061214d83612735565b600f54600160401b900461ffff1660009081526031602090815260408083203384529091529020549091506121829084611197565b600f805461ffff600160401b909104811660009081526031602090815260408083203384528252808320959095559254600160301b90049091168152602590915220546121d5908463ffffffff61119716565b600f805461ffff600160301b90910481166000908152602560209081526040808320959095559254600160401b9004909116815260279091522054612220908363ffffffff61119716565b600f805461ffff600160401b91829004811660009081526027602090815260408083209690965593549290920416815260289091522054612267908263ffffffff61119716565b600f54600160401b900461ffff166000908152602860205260409020556019546122919082611197565b60195560205460ff16156119365760005b60225461ffff82161015611a7d57600f5461ffff600160401b909104811660009081526032602052604081206023805461231794899492919087169081106122e657fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549063ffffffff61119716565b600f5461ffff600160401b90910481166000908152603260205260408120602380549193909190861690811061234957fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556001016122a2565b600e54600090611058906105b784620f424063ffffffff6115d916565b6011546000906123aa90600163ffffffff61119716565b6011556014546123c0908463ffffffff61119716565b601455600f54600160301b900461ffff166000908152602660205260409020546123ea9084611197565b600f54600160301b900461ffff16600090815260266020908152604080832093909355338252602a905220546124209084611197565b336000818152602a60209081526040808320949094556003548451600160e01b63a9059cbb02815260048101949094526024840188905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b15801561248857600080fd5b505af115801561249c573d6000803e3d6000fd5b505050506040513d60208110156124b257600080fd5b50516124ba57fe5b600f546004546040805161ffff600160301b9094049390931683526020830186905282810191909152606082018490525133917f8b47af86936656ebc489ae00a2cf70f1b4b3102aac9f4b8d157444cf0e5c3117919081900360800190a250600192915050565b600f5460408051600160301b90920461ffff1682525160009133917feb233b5b7ba017d2651d779b7619d1a70758bcd13049019e0dd121077a1e1a2f916020908290030190a2600f5461258090600160301b900461ffff16600161275c565b600f805467ffff0000000000001916600160301b61ffff938416810291909117918290556125b09291041661268e565b600e55600f546125ca90600160301b900461ffff166126cf565b601f55600f546000906125e790600160301b900461ffff16612770565b600f5490915061ffff808316600160401b90920416101561266857600f546040805161ffff600160401b9093049290921682525133917f7d2797fdf1b9f35ccf52e7b904a608332c1db1d8c7f2ff7f28ea7f2d6f87996c919081900360200190a2600f805469ffff00000000000000001916600160401b61ffff8416021790555b600191505090565b6000612689601c54601b546111aa90919063ffffffff16565b905090565b60006110586126ac8361ffff16600a546115d990919063ffffffff16565b6009549063ffffffff61119716565b60006110586126c9836120f1565b83611f9a565b600f54601e54600091611058916126f89161ffff908116916105b791871663ffffffff6115d916565b601d549063ffffffff61119716565b61ffff811660009081526029602090815260408083205460289092528220546110589163ffffffff6111aa16565b60006110586127576305f5e1006105b7601f54866115d990919063ffffffff16565b6111bc565b81810161ffff80841690821610156111a457fe5b600061ffff8216156127f757600f546000906127a19061ffff8581169164010000000090041663ffffffff6127ff16565b600f549091506000906127c99061ffff8681169164010000000090041663ffffffff61286316565b61ffff1611156127f0576127e861ffff8216600163ffffffff61275c16565b91505061105b565b905061105b565b506001919050565b6000808261ffff161161280e57fe5b60008261ffff168461ffff168161282157fe5b0461ffff1690508261ffff168461ffff168161283957fe5b0661ffff16818461ffff1602018461ffff161461285257fe5b8261ffff168461ffff168161121657fe5b600061ffff821661287357600080fd5b8161ffff168361ffff168161288457fe5b069392505050565b50805460008255906000526020600020908101906116df91906128cb565b50805460008255600f0160109004906000526020600020908101906116df91905b610cac91905b808211156128e557600081556001016128d1565b509056fe417564697420455448207072696365206d7573742062652067726561746572207468616e207a65726f2e5447205075626c69632d53616c6520686173206e6f742073746172746564207965742ea165627a7a723058205a5e398e7e7cdea43030af6dbb8a9d359b06d081af919e1b6eb68a86dc6d5c680029
Deployed Bytecode
0x6080604052600436106101815760003560e01c8063ac5cf934116100d1578063d4eeb6ad1161008a578063eaaeafb311610064578063eaaeafb314610b5b578063f2e2934114610b8f578063f2fde38b14610bed578063f5f56b7a14610c2057610181565b8063d4eeb6ad14610aa9578063de8f246c14610afd578063e6fd48bc14610b2d57610181565b8063ac5cf93414610955578063b7352bee146109a4578063baace5f3146109e1578063bcccdfbf14610a14578063c225135d14610a29578063cea9d26f14610a6657610181565b806348d3297c1161013e5780635c975abb116101185780635c975abb1461088f57806363b26e76146108a4578063853255cc146108d75780638da5cb5b1461092457610181565b806348d3297c146107b4578063522f681514610823578063547e3f061461085c57610181565b806316c38b3c1461062c578063200d2ed21461065a578063223e8eff146106d557806322c8c2cc1461071c5780632718799114610757578063294b2ed014610781575b600754600160d81b900462ffffff165a1161019b57600080fd5b600354600160a01b900463ffffffff16158015906101c75750600354600160a01b900463ffffffff1642115b61020557604051600160e51b62461bcd0281526004018080602001828103825260238152602001806129146023913960400191505060405180910390fd5b60006004541161024957604051600160e51b62461bcd02815260040180806020018281038252602a8152602001806128ea602a913960400191505060405180910390fd5b610251610c9e565b156102a65760408051600160e51b62461bcd02815260206004820152601960248201527f5447205075626c69632d53616c65206973207061757365642e00000000000000604482015290519081900360640190fd5b600f5461ffff808216600160301b90920416111561030e5760408051600160e51b62461bcd02815260206004820152601660248201527f5447205075626c69632d53616c6520436c6f7365642e00000000000000000000604482015290519081900360640190fd5b60075468ffffffffffffffffff1634101561032857600080fd5b6007546901000000000000000000900468ffffffffffffffffff1634111561034f57600080fd5b610357610caf565b600061036234611035565b90508060008080805b60085462ffffff165a1180156103815750600085115b801561039d5750600f5461ffff808216600160301b9092041611155b156103c95760006103ad86611060565b965090506103c1858263ffffffff61119716565b94505061036b565b6103d9868663ffffffff6111aa16565b91506103e4826111bc565b600754909150600160901b900468ffffffffffffffffff1634106104245761041384600a63ffffffff6111de16565b925061041e8361121f565b61042457fe5b60205460ff1680156104365750600084115b156104625761045361044e858563ffffffff61119716565b611347565b61045957fe5b6104628161146f565b84156104b8576000610473866111bc565b9050610485348263ffffffff6111aa16565b604051909250339082156108fc029083906000818181858888f193505050501580156104b5573d6000803e3d6000fd5b50505b801561051c576010546104d290600163ffffffff61119716565b6010556017546104e8908263ffffffff61119716565b601755336000908152602d602052604090205461050b908263ffffffff61119716565b336000908152602d60205260409020555b600f5460009061ffff6201000082048116600160401b90920416111561057857610571601a54610565601b546105656019546105656018546017546111aa90919063ffffffff16565b9063ffffffff6111aa16565b90506105d2565b6105cf662386f26fc100006105c3662386f26fc100006105b7601a54610565601b546105656019546105656018546017546111aa90919063ffffffff16565b9063ffffffff6111de16565b9063ffffffff6115d916565b90505b601a546105e5908263ffffffff61119716565b601a556001546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610622573d6000803e3d6000fd5b5050505050505050005b34801561063857600080fd5b506106586004803603602081101561064f57600080fd5b503515156115fe565b005b34801561066657600080fd5b5061066f6116e2565b604080519c8d5261ffff9b8c1660208e015299909a168b8a015260608b019790975260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083019190915251908190036101800190f35b3480156106e157600080fd5b50610708600480360360208110156106f857600080fd5b50356001600160a01b0316611786565b604080519115158252519081900360200190f35b34801561072857600080fd5b506106586004803603604081101561073f57600080fd5b506001600160a01b03813516906020013515156117a4565b34801561076357600080fd5b506106586004803603602081101561077a57600080fd5b503561181b565b34801561078d57600080fd5b50610658600480360360208110156107a457600080fd5b50356001600160a01b0316611875565b3480156107c057600080fd5b506107e2600480360360208110156107d757600080fd5b503561ffff1661193b565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561082f57600080fd5b506106586004803603604081101561084657600080fd5b506001600160a01b038135169060200135611a0e565b34801561086857600080fd5b506106586004803603602081101561087f57600080fd5b50356001600160a01b0316611a83565b34801561089b57600080fd5b50610708610c9e565b3480156108b057600080fd5b50610658600480360360208110156108c757600080fd5b50356001600160a01b0316611aff565b3480156108e357600080fd5b506108ec611be1565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b34801561093057600080fd5b50610939611c08565b604080516001600160a01b039092168252519081900360200190f35b34801561096157600080fd5b506109926004803603604081101561097857600080fd5b50803561ffff1690602001356001600160a01b0316611c17565b60408051918252519081900360200190f35b3480156109b057600080fd5b50610992600480360360408110156109c757600080fd5b50803561ffff1690602001356001600160a01b0316611c45565b3480156109ed57600080fd5b5061065860048036036020811015610a0457600080fd5b50356001600160a01b0316611c73565b348015610a2057600080fd5b50610939611cb6565b348015610a3557600080fd5b5061065860048036036040811015610a4c57600080fd5b50803561ffff1690602001356001600160a01b0316611cc5565b348015610a7257600080fd5b5061065860048036036060811015610a8957600080fd5b506001600160a01b03813581169160208101359091169060400135611db1565b348015610ab557600080fd5b50610ad760048036036020811015610acc57600080fd5b503561ffff16611efd565b604080519485526020850193909352838301919091526060830152519081900360800190f35b348015610b0957600080fd5b5061065860048036036020811015610b2057600080fd5b503563ffffffff16611f39565b348015610b3957600080fd5b50610b42611f87565b6040805163ffffffff9092168252519081900360200190f35b348015610b6757600080fd5b5061099260048036036040811015610b7e57600080fd5b508035906020013561ffff16611f9a565b348015610b9b57600080fd5b50610bc260048036036020811015610bb257600080fd5b50356001600160a01b0316611fc2565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b348015610bf957600080fd5b5061065860048036036020811015610c1057600080fd5b50356001600160a01b0316612006565b348015610c2c57600080fd5b50610c4e60048036036020811015610c4357600080fd5b503561ffff16612080565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610c8a578181015183820152602001610c72565b505050509050019250505060405180910390f35b600154600160a01b900460ff165b90565b610cbb6023600061288c565b610cc7602260006128aa565b60035460408051600160e01b63e2aafa2102815233600482015290516001600160a01b039092169163e2aafa2191602480820192602092909190829003018186803b158015610d1557600080fd5b505afa158015610d29573d6000803e3d6000fd5b505050506040513d6020811015610d3f57600080fd5b50516020805460ff191691151591909117905560055461ffff166021553360005b600f8161ffff1610156110315760035460408051600160e11b63167801e10281526001600160a01b03858116600483015291516000939290921691632cf003c291602480820192602092909190829003018186803b158015610dc157600080fd5b505afa158015610dd5573d6000803e3d6000fd5b505050506040513d6020811015610deb57600080fd5b505190506001600160a01b038381169082161415610e095750611031565b60035460408051600160e21b633b23e57f0281526001600160a01b038481166004830152915161ffff861693929092169163ec8f95fc91602480820192602092909190829003018186803b158015610e6057600080fd5b505afa158015610e74573d6000803e3d6000fd5b505050506040513d6020811015610e8a57600080fd5b5051111561102757600f54600160401b900461ffff1660009081526030602090815260408083206001600160a01b038516845290915290205460ff16610f4257600f805461ffff600160401b9182900481166000908152602f602090815260408083208054600181810183559185528385200180546001600160a01b038a166001600160a01b0319909116811790915596549590950490931682526030815282822094825293909352909120805460ff191690911790555b610f7860068361ffff16600f8110610f5657fe5b60108104919091015460215491600f166002026101000a900461ffff166111aa565b6021556022600661ffff8416600f8110610f8e57fe5b60108082049290920154835460018082018655600095865260208620948204909401805461ffff6002600f948516810261010090810a83810219909416959097160290950a9093049093169091021790556023805491820181559091527fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42300180546001600160a01b0319166001600160a01b0383161790555b9150600101610d60565b5050565b6000611058670de0b6b3a76400006105b7600454856115d990919063ffffffff16565b90505b919050565b600080600061107e600f60069054906101000a900461ffff166120f1565b600f54600160301b900461ffff166000908152602560205260408120549192509082906110ab9087611197565b111561112f57600f54600160301b900461ffff166000908152602560205260408120546110d99084906111aa565b905060006110ed878363ffffffff6111aa16565b90506110f882612135565b61110182612376565b925061110d8383612393565b61111357fe5b61111b612521565b61112157fe5b919450909250611192915050565b61113885612135565b61114185612376565b905061114d8186612393565b61115357fe5b600f54600160301b900461ffff166000908152602560205260409020548214156111855761117f612521565b61118557fe5b9250600091506111929050565b915091565b818101828110156111a457fe5b92915050565b6000828211156111b657fe5b50900390565b600454600090611058906105b784670de0b6b3a764000063ffffffff6115d916565b60008082116111e957fe5b60008284816111f457fe5b04905082848161120057fe5b0681840201841461120d57fe5b82848161121657fe5b04949350505050565b60125460009061123690600163ffffffff61119716565b60125560155461124c908363ffffffff61119716565b601555336000908152602b602052604090205461126f908363ffffffff61119716565b336000818152602b60209081526040808320949094556003548451600160e01b63a9059cbb02815260048101949094526024840187905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b1580156112d757600080fd5b505af11580156112eb573d6000803e3d6000fd5b505050506040513d602081101561130157600080fd5b505161130957fe5b60408051838152905133917f10c0d19d0fba78db8aad36e658a9b381538bea0eda3e3a46023e8d20d3187fdf919081900360200190a2506001919050565b60135460009061135e90600163ffffffff61119716565b601355601654611374908363ffffffff61119716565b601655336000908152602c6020526040902054611397908363ffffffff61119716565b336000818152602c60209081526040808320949094556003548451600160e01b63a9059cbb02815260048101949094526024840187905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b1580156113ff57600080fd5b505af1158015611413573d6000803e3d6000fd5b505050506040513d602081101561142957600080fd5b505161143157fe5b60408051838152905133917f1648ee5e9a6a29917de9fedd8b9ba92cab336ef9e1cd5703d873a1c94b17385d919081900360200190a2506001919050565b8060005b60225461ffff8216101561159d5760006114c360646105b760228561ffff168154811061149c57fe5b600091825260209091206010820401548891600f166002026101000a900461ffff166115d9565b9050600060238361ffff16815481106114d857fe5b6000918252602090912001546018546001600160a01b039091169150611504908363ffffffff61119716565b6018556001600160a01b0381166000908152602e6020526040902054611530908363ffffffff61119716565b6001600160a01b0382166000908152602e6020526040902055611559848363ffffffff6111aa16565b6040519094506001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611592573d6000803e3d6000fd5b505050600101611473565b5060215415611031576115d26115c360646105b7602154866115d990919063ffffffff16565b601b549063ffffffff61119716565b601b555050565b6000826115e8575060006111a4565b50818102818382816115f657fe5b04146111a457fe5b6000546001600160a01b0316331461161557600080fd5b600154600160a01b900460ff16801561162c575080155b156116795760018054600160a01b60ff02191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a16116df565b600154600160a01b900460ff161580156116905750805b156116df5760018054600160a01b60ff021916600160a01b1790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a15b50565b600454600f54600090819081908190819081908190819081908190819061ffff808216600160301b90920416111561172e57600f5461ffff8082169c506201000090910416995061174b565b600f5461ffff600160301b820481169c50600160401b9091041699505b600e549850601f5497506010549650601154955060125494506013549350601454925060155491506016549050909192939495969798999a9b565b6001600160a01b031660009081526024602052604090205460ff1690565b6000546001600160a01b031633146117bb57600080fd5b6001600160a01b038216600081815260246020908152604091829020805460ff1916851515908117909155825190815291517f7309a1bee0ae3b528b2e9f11ab2abd82b54426646b40c5bef678f09554bd7c8f9281900390910190a25050565b3360009081526024602052604090205460ff1661183757600080fd5b600481905560408051828152905133917f4c93251017d1829354b31aa6cb37ab6ec1b2af6a073553f6073a7a3420cf7393919081900360200190a250565b6000546001600160a01b0316331461188c57600080fd5b6000611896612670565b90506001600160a01b0382166118ab57600080fd5b601c546118be908263ffffffff61119716565b601c556040805182815290516001600160a01b038416917ffcd200d7cba84a55eb61ba9209300062477f6f08297653f398fa5489b65a1704919081900360200190a26040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611936573d6000803e3d6000fd5b505050565b600080600080600080600080600f60009054906101000a900461ffff1661ffff168961ffff16111561198457506000965086955085945084935083925082915081905080611a03565b61198d8961268e565b61ffff8a1660009081526026602052604090205490985094506119af896126bb565b96506119c1878663ffffffff6111aa16565b61ffff8a1660009081526025602052604090205490965091506119e3896120f1565b93506119f5848363ffffffff6111aa16565b9250611a00896126cf565b90505b919395975091939597565b6000546001600160a01b03163314611a2557600080fd5b6001600160a01b038216611a3857600080fd5b303181811015611a4757600080fd5b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015611a7d573d6000803e3d6000fd5b50505050565b6000546001600160a01b03163314611a9a57600080fd5b6001600160a01b038116611aad57600080fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fd36aafedb017e43b79d3cf6aa1987d3fbb9fff33e1738c71dbf6b2abaadbded090600090a35050565b6000546001600160a01b03163314611b1657600080fd5b6000611b41601a54610565601b546105656019546105656018546017546111aa90919063ffffffff16565b90506001600160a01b038216611b5657600080fd5b601a54611b69908263ffffffff61119716565b601a556040805182815290516001600160a01b038416917fe4de4c8dc6ab2404c805abf5db58633d76fc08b6c8b2c0a34d3a47bfb73663bf919081900360200190a26040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611936573d6000803e3d6000fd5b601754601854601954601a54601b54601c546000611bfd612670565b905090919293949596565b6000546001600160a01b031690565b61ffff821660009081526032602090815260408083206001600160a01b038516845290915290205492915050565b61ffff821660009081526031602090815260408083206001600160a01b038516845290915290205492915050565b6000546001600160a01b03163314611c8a57600080fd5b600280546001600160a01b039092166001600160a01b0319928316811790915560038054909216179055565b6003546001600160a01b031681565b6000546001600160a01b03163314611cdc57600080fd5b6000611ce783612707565b90506001600160a01b038216611cfc57600080fd5b61ffff8316600090815260296020526040902054611d20908263ffffffff61119716565b61ffff841660008181526029602090815260409182902093909355805191825291810183905281516001600160a01b038516927f69ccd39c099e91512b4f9c8d1664c05f38430681d4d594a1deec4ace4e7a6e0d928290030190a26040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611a7d573d6000803e3d6000fd5b6000546001600160a01b03163314611dc857600080fd5b826001600160a01b038316611ddc57600080fd5b60408051600160e01b6370a0823102815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015611e2957600080fd5b505afa158015611e3d573d6000803e3d6000fd5b505050506040513d6020811015611e5357600080fd5b5051905082811015611e6457600080fd5b816001600160a01b031663a9059cbb85856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611ec457600080fd5b505af1158015611ed8573d6000803e3d6000fd5b505050506040513d6020811015611eee57600080fd5b5051611ef657fe5b5050505050565b61ffff811660009081526027602090815260408083205460288352818420546029909352908320549092611f3085612707565b90509193509193565b6000546001600160a01b03163314611f5057600080fd5b6003805463ffffffff909216600160a01b0277ffffffff000000000000000000000000000000000000000019909216919091179055565b600354600160a01b900463ffffffff1690565b6000611fbb611fa88361268e565b6105b785620f424063ffffffff6115d916565b9392505050565b6001600160a01b03166000908152602a6020908152604080832054602b835281842054602c845282852054602d855283862054602e90955292909420549094919291565b6000546001600160a01b0316331461201d57600080fd5b6001600160a01b03811661203057600080fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61ffff81166000908152602f60209081526040918290208054835181840281018401909452808452606093928301828280156120e557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116120c7575b50505050509050919050565b60008061211f6121108461ffff16600c546115d990919063ffffffff16565b600b549063ffffffff61119716565b9050600d54811115611058575050600d5461105b565b6000612140826111bc565b9050600061214d83612735565b600f54600160401b900461ffff1660009081526031602090815260408083203384529091529020549091506121829084611197565b600f805461ffff600160401b909104811660009081526031602090815260408083203384528252808320959095559254600160301b90049091168152602590915220546121d5908463ffffffff61119716565b600f805461ffff600160301b90910481166000908152602560209081526040808320959095559254600160401b9004909116815260279091522054612220908363ffffffff61119716565b600f805461ffff600160401b91829004811660009081526027602090815260408083209690965593549290920416815260289091522054612267908263ffffffff61119716565b600f54600160401b900461ffff166000908152602860205260409020556019546122919082611197565b60195560205460ff16156119365760005b60225461ffff82161015611a7d57600f5461ffff600160401b909104811660009081526032602052604081206023805461231794899492919087169081106122e657fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549063ffffffff61119716565b600f5461ffff600160401b90910481166000908152603260205260408120602380549193909190861690811061234957fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556001016122a2565b600e54600090611058906105b784620f424063ffffffff6115d916565b6011546000906123aa90600163ffffffff61119716565b6011556014546123c0908463ffffffff61119716565b601455600f54600160301b900461ffff166000908152602660205260409020546123ea9084611197565b600f54600160301b900461ffff16600090815260266020908152604080832093909355338252602a905220546124209084611197565b336000818152602a60209081526040808320949094556003548451600160e01b63a9059cbb02815260048101949094526024840188905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b15801561248857600080fd5b505af115801561249c573d6000803e3d6000fd5b505050506040513d60208110156124b257600080fd5b50516124ba57fe5b600f546004546040805161ffff600160301b9094049390931683526020830186905282810191909152606082018490525133917f8b47af86936656ebc489ae00a2cf70f1b4b3102aac9f4b8d157444cf0e5c3117919081900360800190a250600192915050565b600f5460408051600160301b90920461ffff1682525160009133917feb233b5b7ba017d2651d779b7619d1a70758bcd13049019e0dd121077a1e1a2f916020908290030190a2600f5461258090600160301b900461ffff16600161275c565b600f805467ffff0000000000001916600160301b61ffff938416810291909117918290556125b09291041661268e565b600e55600f546125ca90600160301b900461ffff166126cf565b601f55600f546000906125e790600160301b900461ffff16612770565b600f5490915061ffff808316600160401b90920416101561266857600f546040805161ffff600160401b9093049290921682525133917f7d2797fdf1b9f35ccf52e7b904a608332c1db1d8c7f2ff7f28ea7f2d6f87996c919081900360200190a2600f805469ffff00000000000000001916600160401b61ffff8416021790555b600191505090565b6000612689601c54601b546111aa90919063ffffffff16565b905090565b60006110586126ac8361ffff16600a546115d990919063ffffffff16565b6009549063ffffffff61119716565b60006110586126c9836120f1565b83611f9a565b600f54601e54600091611058916126f89161ffff908116916105b791871663ffffffff6115d916565b601d549063ffffffff61119716565b61ffff811660009081526029602090815260408083205460289092528220546110589163ffffffff6111aa16565b60006110586127576305f5e1006105b7601f54866115d990919063ffffffff16565b6111bc565b81810161ffff80841690821610156111a457fe5b600061ffff8216156127f757600f546000906127a19061ffff8581169164010000000090041663ffffffff6127ff16565b600f549091506000906127c99061ffff8681169164010000000090041663ffffffff61286316565b61ffff1611156127f0576127e861ffff8216600163ffffffff61275c16565b91505061105b565b905061105b565b506001919050565b6000808261ffff161161280e57fe5b60008261ffff168461ffff168161282157fe5b0461ffff1690508261ffff168461ffff168161283957fe5b0661ffff16818461ffff1602018461ffff161461285257fe5b8261ffff168461ffff168161121657fe5b600061ffff821661287357600080fd5b8161ffff168361ffff168161288457fe5b069392505050565b50805460008255906000526020600020908101906116df91906128cb565b50805460008255600f0160109004906000526020600020908101906116df91905b610cac91905b808211156128e557600081556001016128d1565b509056fe417564697420455448207072696365206d7573742062652067726561746572207468616e207a65726f2e5447205075626c69632d53616c6520686173206e6f742073746172746564207965742ea165627a7a723058205a5e398e7e7cdea43030af6dbb8a9d359b06d081af919e1b6eb68a86dc6d5c680029
Deployed Bytecode Sourcemap
7396:25362:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18642:7;;-1:-1:-1;;;18642:7:0;;;;18630:9;:19;18622:28;;;;;;18773:15;;-1:-1:-1;;;18773:15:0;;;;:19;;;;:44;;-1:-1:-1;18802:15:0;;-1:-1:-1;;;18802:15:0;;;;18796:3;:21;18773:44;18765:92;;;;-1:-1:-1;;;;;18765:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18890:1;18876:11;;:15;18868:70;;;;-1:-1:-1;;;;;18868:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18958:8;:6;:8::i;:::-;18957:9;18949:47;;;;;-1:-1:-1;;;;;18949:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19025:9;;;;;;-1:-1:-1;;;19015:6:0;;;;:19;;19007:54;;;;;-1:-1:-1;;;;;19007:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24174:7;;;;24161:9;:20;;24153:29;;;;;;24214:7;;;;;;;24201:9;:20;;24193:29;;;;;;24272:23;:21;:23::i;:::-;24306:19;24328:18;24336:9;24328:7;:18::i;:::-;24306:40;-1:-1:-1;24306:40:0;24357:19;;;;24538:232;24557:6;;;;24545:9;:18;:37;;;;;24581:1;24567:11;:15;24545:37;:60;;;;-1:-1:-1;24596:9:0;;;;;;-1:-1:-1;;;24586:6:0;;;;:19;;24545:60;24538:232;;;24622:20;24687:15;24690:11;24687:2;:15::i;:::-;24657:45;-1:-1:-1;24657:45:0;-1:-1:-1;24730:28:0;:10;24657:45;24730:28;:14;:28;:::i;:::-;24717:41;;24538:232;;;;24811:28;:11;24827;24811:28;:15;:28;:::i;:::-;24799:40;;24862:18;24870:9;24862:7;:18::i;:::-;24932:9;;24850:30;;-1:-1:-1;;;;24932:9:0;;;;24919;:22;24915:134;;24970:18;:10;24985:2;24970:18;:14;:18;:::i;:::-;24958:30;;25010:26;25026:9;25010:15;:26::i;:::-;25003:34;;;;25131:13;;;;:31;;;;;25161:1;25148:10;:14;25131:31;25127:248;;;25224:48;25246:25;:10;25261:9;25246:25;:14;:25;:::i;:::-;25224:21;:48::i;:::-;25217:56;;;;25324:39;25353:9;25324:28;:39::i;:::-;25427:15;;25423:226;;25459:19;25481:20;25489:11;25481:7;:20::i;:::-;25459:42;-1:-1:-1;25530:26:0;:9;25459:42;25530:26;:13;:26;:::i;:::-;25605:32;;25518:38;;-1:-1:-1;25605:10:0;;:32;;;;;25625:11;;25605:32;;;;25625:11;25605:10;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25605:32:0;25423:226;;25685:13;;25681:210;;25722:4;;:11;;25731:1;25722:11;:8;:11;:::i;:::-;25715:4;:18;25759:8;;:23;;25772:9;25759:23;:12;:23;:::i;:::-;25748:8;:34;25853:10;25832:32;;;;:20;:32;;;;;;:47;;25869:9;25832:47;:36;:47;:::i;:::-;25818:10;25797:32;;;;:20;:32;;;;;:82;25681:210;25966:10;;25924:17;;25966:10;;;;;;-1:-1:-1;;;25956:7:0;;;;:20;25952:280;;;26003:78;26072:8;;26003:64;26055:11;;26003:47;26037:12;;26003:29;26016:15;;26003:8;;:12;;:29;;;;:::i;:::-;:33;:47;:33;:47;:::i;:78::-;25991:90;;25952:280;;;26122:110;26221:10;26122:94;26205:10;26122:78;26191:8;;26122:64;26174:11;;26122:47;26156:12;;26122:29;26135:15;;26122:8;;:12;;:29;;;;:::i;:78::-;:82;:94;:82;:94;:::i;:::-;:98;:110;:98;:110;:::i;:::-;26110:122;;25952:280;26256:8;;:23;;26269:9;26256:23;:12;:23;:::i;:::-;26245:8;:34;26290:9;;:29;;-1:-1:-1;;;;;26290:9:0;;;;:29;;;;;26309:9;;26290;:29;:9;:29;26309:9;26290;:29;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;19072:1:0;;;;;;;7396:25362;6384:281;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6384:281:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6384:281:0;;;;:::i;:::-;;16454:1303;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16454:1303:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13110:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13110:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13110:125:0;-1:-1:-1;;;;;13110:125:0;;:::i;:::-;;;;;;;;;;;;;;;;;;13305:194;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13305:194:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13305:194:0;;;;;;;;;;:::i;12876:164::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12876:164:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12876:164:0;;:::i;15680:319::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15680:319:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15680:319:0;-1:-1:-1;;;;;15680:319:0;;:::i;20200:1145::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20200:1145:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20200:1145:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5351:241;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5351:241:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5351:241:0;;;;;;;;:::i;4456:272::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4456:272:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4456:272:0;-1:-1:-1;;;;;4456:272:0;;:::i;6016:78::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6016:78:0;;;:::i;16057:350::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16057:350:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16057:350:0;-1:-1:-1;;;;;16057:350:0;;:::i;17801:721::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17801:721:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3722:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3722:79:0;;;:::i;:::-;;;;-1:-1:-1;;;;;3722:79:0;;;;;;;;;;;;;;23687:166;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23687:166:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23687:166:0;;;;;;;;-1:-1:-1;;;;;23687:166:0;;:::i;:::-;;;;;;;;;;;;;;;;23424:178;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23424:178:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23424:178:0;;;;;;;;-1:-1:-1;;;;;23424:178:0;;:::i;32635:120::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32635:120:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32635:120:0;-1:-1:-1;;;;;32635:120:0;;:::i;7563:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7563:28:0;;;:::i;15013:423::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15013:423:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15013:423:0;;;;;;;;-1:-1:-1;;;;;15013:423:0;;:::i;4958:339::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4958:339:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4958:339:0;;;;;;;;;;;;;;;;;:::i;21696:659::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21696:659:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21696:659:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12526:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12526:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12526:110:0;;;;:::i;12370:96::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12370:96:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14316:172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14316:172:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14316:172:0;;;;;;;;;:::i;22409:705::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22409:705:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22409:705:0;-1:-1:-1;;;;;22409:705:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4152:248;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4152:248:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4152:248:0;-1:-1:-1;;;;;4152:248:0;;:::i;23184:158::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23184:158:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23184:158:0;;;;:::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;23184:158:0;;;;;;;;;;;;;;;;;6016:78;6079:7;;-1:-1:-1;;;6079:7:0;;;;6016:78;;:::o;26444:990::-;26496:18;26503:11;;26496:18;:::i;:::-;26525:16;26532:9;;26525:16;:::i;:::-;26570:2;;:26;;;-1:-1:-1;;;;;26570:26:0;;26585:10;26570:26;;;;;;-1:-1:-1;;;;;26570:2:0;;;;:14;;:26;;;;;;;;;;;;;;;:2;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;26570:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26570:26:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26570:26:0;;26554:42;;-1:-1:-1;;26554:42:0;;;;;;;;;;26619:29;;;;26607:9;:41;26680:10;-1:-1:-1;26701:726:0;26723:32;26719:1;:36;;;26701:726;;;26800:2;;:21;;;-1:-1:-1;;;;;26800:21:0;;-1:-1:-1;;;;;26800:21:0;;;;;;;;;26777:20;;26800:2;;;;;:11;;:21;;;;;;;;;;;;;;;:2;:21;;;5:2:-1;;;;30:1;27;20:12;5:2;26800:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26800:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26800:21:0;;-1:-1:-1;;;;;;26842:24:0;;;;;;;26838:52;;;26885:5;;;26838:52;26911:2;;:25;;;-1:-1:-1;;;;;26911:25:0;;-1:-1:-1;;;;;26911:25:0;;;;;;;;;:29;;;;:2;;;;;:11;;:25;;;;;;;;;;;;;;;:2;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;26911:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26911:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26911:25:0;:29;26907:469;;;26987:7;;-1:-1:-1;;;26987:7:0;;;;26966:29;;;;:20;:29;;;;;;;;-1:-1:-1;;;;;26966:43:0;;;;;;;;;;;;26961:212;;27053:7;;;;-1:-1:-1;;;27053:7:0;;;;;;27034:27;;;;:18;:27;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;27034:46:0;;;;;;;;;-1:-1:-1;;;;;27034:46:0;;-1:-1:-1;;;;;;27034:46:0;;;;;;;;27124:7;;;;;;;;;27103:29;;:20;:29;;;;;:43;;;;;;;;;;:50;;-1:-1:-1;;27103:50:0;;;;;;26961:212;27205:43;27219:25;27245:1;27219:28;;;;;;;;;;;;;;;;;27205:9;;;27219:28;;;;;;;;;;27205:13;:43::i;:::-;27193:9;:55;27267:9;27282:25;:28;;;;;;;;;;;;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;27267:44:0;;;;;;;;;;;;;;27282:28;;;27267:44;;;;;27282:28;27267:44;;;;;;;;;;27282:28;;;;;;;;;;;;;;27267:44;;;;;;27330:11;27:10:-1;;23:18;;;45:23;;27330:30:0;;;;;;;-1:-1:-1;;;;;;27330:30:0;-1:-1:-1;;;;;27330:30:0;;;;;26907:469;27403:12;-1:-1:-1;26757:3:0;;26701:726;;;;26444:990;:::o;13785:126::-;13840:7;13867:36;13895:7;13867:23;13878:11;;13867:6;:10;;:23;;;;:::i;:36::-;13860:43;;13785:126;;;;:::o;27483:1214::-;27531:7;27540;27560:21;27584:19;27596:6;;;;;;;;;;;27584:11;:19::i;:::-;27663:6;;-1:-1:-1;;;27663:6:0;;;;27614:18;27649:21;;;:13;:21;;;;;;27560:43;;-1:-1:-1;27614:18:0;27560:43;;27649:36;;27675:9;27649:25;:36::i;:::-;:52;27645:1045;;;27800:6;;-1:-1:-1;;;27800:6:0;;;;27748:17;27786:21;;;:13;:21;;;;;;27768:40;;:13;;:17;:40::i;:::-;27748:60;-1:-1:-1;27857:19:0;27879:24;:9;27748:60;27879:24;:13;:24;:::i;:::-;27857:46;;27949:18;27957:9;27949:7;:18::i;:::-;28031:17;28038:9;28031:6;:17::i;:::-;28018:30;;28095:39;28112:10;28124:9;28095:16;:39::i;:::-;28088:47;;;;28157:12;:10;:12::i;:::-;28150:20;;;;28195:10;;-1:-1:-1;28207:11:0;;-1:-1:-1;28187:32:0;;-1:-1:-1;;28187:32:0;27645:1045;28281:18;28289:9;28281:7;:18::i;:::-;28363:17;28370:9;28363:6;:17::i;:::-;28350:30;;28427:39;28444:10;28456:9;28427:16;:39::i;:::-;28420:47;;;;28576:6;;-1:-1:-1;;;28576:6:0;;;;28562:21;;;;:13;:21;;;;;;28545:38;;28541:99;;;28611:12;:10;:12::i;:::-;28604:20;;;;28664:10;-1:-1:-1;28676:1:0;;-1:-1:-1;28656:22:0;;-1:-1:-1;28656:22:0;27483:1214;;;;:::o;274:141::-;358:5;;;381:6;;;;374:14;;;;274:141;;;;:::o;553:123::-;611:7;643:1;638;:6;;631:14;;;;-1:-1:-1;663:5:0;;;553:123::o;13961:126::-;14067:11;;14016:7;;14043:36;;:19;:6;14054:7;14043:19;:10;:19;:::i;1115:187::-;1173:7;1204:1;1200;:5;1193:13;;;;1217:9;1233:1;1229;:5;;;;;;1217:17;;1269:1;1265;:5;;;;;;1261:1;1257;:5;:13;1252:1;:18;1245:26;;;;1293:1;1289;:5;;;;;;;1115:187;-1:-1:-1;;;;1115:187:0:o;30417:366::-;30506:11;;30475:4;;30506:18;;30522:1;30506:18;:15;:18;:::i;:::-;30492:11;:32;30548:8;;:20;;30561:6;30548:20;:12;:20;:::i;:::-;30537:8;:31;30625:10;30609:27;;;;:15;:27;;;;;;:39;;30641:6;30609:39;:31;:39;:::i;:::-;30595:10;30579:27;;;;:15;:27;;;;;;;;:69;;;;30668:2;;:31;;-1:-1:-1;;;;;30668:31:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30668:2:0;;;;:11;;:31;;;;;;;;;;;;;:2;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;30668:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30668:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30668:31:0;30661:39;;;;30716:37;;;;;;;;30734:10;;30716:37;;;;;;;;;;-1:-1:-1;30771:4:0;30417:366;;;:::o;30847:404::-;30946:15;;30911:4;;30946:22;;30966:1;30946:22;:19;:22;:::i;:::-;30928:15;:40;30996:12;;:24;;31013:6;30996:24;:16;:24;:::i;:::-;30981:12;:39;31089:10;31067:33;;;;:21;:33;;;;;;:45;;31105:6;31067:45;:37;:45;:::i;:::-;31053:10;31031:33;;;;:21;:33;;;;;;;;:81;;;;31132:2;;:31;;-1:-1:-1;;;;;31132:31:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31132:2:0;;;;:11;;:31;;;;;;;;;;;;;:2;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;31132:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31132:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31132:31:0;31125:39;;;;31180:41;;;;;;;;31202:10;;31180:41;;;;;;;;;;-1:-1:-1;31239:4:0;30847:404;;;:::o;31864:717::-;31962:9;31940:19;31982:483;32005:9;:16;32001:20;;;;31982:483;;;32043:19;32065:36;32097:3;32065:27;32079:9;32089:1;32079:12;;;;;;;;;;;;;;;;;;;;;;;32065:9;;32079:12;;;;;;;;;;32065:13;:27::i;:36::-;32043:58;;32116:26;32161:11;32173:1;32161:14;;;;;;;;;;;;;;;;;;;;32212:15;;-1:-1:-1;;;;;32161:14:0;;;;-1:-1:-1;32212:32:0;;32232:11;32212:32;:19;:32;:::i;:::-;32194:15;:50;-1:-1:-1;;;;;32296:34:0;;;;;;:22;:34;;;;;;:51;;32335:11;32296:51;:38;:51;:::i;:::-;-1:-1:-1;;;;;32259:34:0;;;;;;:22;:34;;;;;:88;32376:28;:11;32392;32376:28;:15;:28;:::i;:::-;32421:32;;32362:42;;-1:-1:-1;;;;;;32421:19:0;;;:32;;;;;32441:11;;32421:32;;;;32441:11;32421:19;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;32023:3:0;;31982:483;;;-1:-1:-1;32481:9:0;;:13;32477:96;;32523:50;32539:33;32568:3;32539:24;32553:9;;32539;:13;;:24;;;;:::i;:33::-;32523:11;;;:50;:15;:50;:::i;:::-;32509:11;:64;31864:717;;:::o;770:202::-;828:9;854:6;850:47;;-1:-1:-1;884:1:0;877:8;;850:47;-1:-1:-1;911:5:0;;;915:1;911;:5;:1;934:5;;;;;:10;927:18;;;6384:281;3948:6;;-1:-1:-1;;;;;3948:6:0;3934:10;:20;3926:29;;;;;;6449:7;;-1:-1:-1;;;6449:7:0;;;;:17;;;;;6461:5;6460:6;6449:17;6445:213;;;6483:7;:15;;-1:-1:-1;;;;;;6483:15:0;;;6518:20;;;6527:10;6518:20;;;;;;;;;;;;;6445:213;;;6561:7;;-1:-1:-1;;;6561:7:0;;;;6560:8;:17;;;;;6572:5;6560:17;6556:102;;;6604:4;6594:14;;-1:-1:-1;;;;;;6594:14:0;-1:-1:-1;;;6594:14:0;;;6628:18;;;6635:10;6628:18;;;;;;;;;;;;;6556:102;6384:281;:::o;16454:1303::-;17238:11;;17275:9;;16493:23;;;;;;;;;;;;;;;;;;;;;;17275:9;;;;-1:-1:-1;;;17266:6:0;;;;:18;17262:180;;;17309:9;;;;;;;-1:-1:-1;17342:10:0;;;;;;-1:-1:-1;17262:180:0;;;17393:6;;;-1:-1:-1;;;17393:6:0;;;;;-1:-1:-1;;;;17423:7:0;;;;;-1:-1:-1;17262:180:0;17467:11;;17454:24;;17512:14;;17489:37;;17545:4;;17539:10;;17568:6;;17560:14;;17598:11;;17585:24;;17637:15;;17620:32;;17674:9;;17663:20;;17704:8;;17694:18;;17737:12;;17723:26;;16454:1303;;;;;;;;;;;;:::o;13110:125::-;-1:-1:-1;;;;;13199:28:0;13175:4;13199:28;;;:19;:28;;;;;;;;;13110:125::o;13305:194::-;3948:6;;-1:-1:-1;;;;;3948:6:0;3934:10;:20;3926:29;;;;;;-1:-1:-1;;;;;13394:28:0;;;;;;:19;:28;;;;;;;;;:36;;-1:-1:-1;;13394:36:0;;;;;;;;;;13446:45;;;;;;;;;;;;;;;;;13305:194;;:::o;12876:164::-;12782:10;12762:31;;;;:19;:31;;;;;;;;12754:40;;;;;;12956:11;:19;;;12991:41;;;;;;;;13021:10;;12991:41;;;;;;;;;;12876:164;:::o;15680:319::-;3948:6;;-1:-1:-1;;;;;3948:6:0;3934:10;:20;3926:29;;;;;;15755:19;15777:15;:13;:15::i;:::-;15755:37;-1:-1:-1;;;;;;15811:16:0;;15803:25;;;;;;15865:21;;:38;;15891:11;15865:38;:25;:38;:::i;:::-;15841:21;:62;15919:37;;;;;;;;-1:-1:-1;;;;;15919:37:0;;;;;;;;;;;;;15967:24;;-1:-1:-1;;;;;15967:11:0;;;:24;;;;;15979:11;;15967:24;;;;15979:11;15967;:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15967:24:0;3966:1;15680:319;:::o;20200:1145::-;20261:18;20347:13;20428:16;20512:14;20594;20676:17;20761:15;20844:24;20898:9;;;;;;;;;;;20885:22;;:10;:22;;;20881:86;;;-1:-1:-1;20932:1:0;;-1:-1:-1;20932:1:0;;-1:-1:-1;20932:1:0;;-1:-1:-1;20932:1:0;;-1:-1:-1;20932:1:0;;-1:-1:-1;20932:1:0;;-1:-1:-1;20932:1:0;;-1:-1:-1;20932:1:0;20924:31;;20881:86;20992:27;21008:10;20992:15;:27::i;:::-;21041:26;;;;;;;:14;:26;;;;;;20979:40;;-1:-1:-1;21041:26:0;-1:-1:-1;21086:22:0;21056:10;21086;:22::i;:::-;21078:30;-1:-1:-1;21130:17:0;21078:30;21140:6;21130:17;:9;:17;:::i;:::-;21170:25;;;;;;;:13;:25;;;;;;21119:28;;-1:-1:-1;21170:25:0;-1:-1:-1;21215:23:0;21184:10;21215:11;:23::i;:::-;21206:32;-1:-1:-1;21261:19:0;21206:32;21272:7;21261:19;:10;:19;:::i;:::-;21249:31;;21312:25;21326:10;21312:13;:25::i;:::-;21293:44;;20200:1145;;;;;;;;;;:::o;5351:241::-;3948:6;;-1:-1:-1;;;;;3948:6:0;3934:10;:20;3926:29;;;;;;-1:-1:-1;;;;;5448:16:0;;5440:25;;;;;;5502:4;5494:21;5534:17;;;;5526:26;;;;;;5565:19;;-1:-1:-1;;;;;5565:11:0;;;:19;;;;;5577:6;;5565:19;;;;5577:6;5565:11;:19;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5565:19:0;3966:1;5351:241;;:::o;4456:272::-;3948:6;;-1:-1:-1;;;;;3948:6:0;3934:10;:20;3926:29;;;;;;-1:-1:-1;;;;;4547:25:0;;4539:34;;;;;;4613:9;;;-1:-1:-1;;;;;4633:23:0;;;-1:-1:-1;;;;;;4633:23:0;;;;;;;4672:48;;4613:9;;;4633:23;4613:9;;4672:48;;4584:26;;4672:48;3966:1;4456:272;:::o;16057:350::-;3948:6;;-1:-1:-1;;;;;3948:6:0;3934:10;:20;3926:29;;;;;;16129:19;16151:78;16220:8;;16151:64;16203:11;;16151:47;16185:12;;16151:29;16164:15;;16151:8;;:12;;:29;;;;:::i;:78::-;16129:100;-1:-1:-1;;;;;;16248:16:0;;16240:25;;;;;;16289:8;;:25;;16302:11;16289:25;:12;:25;:::i;:::-;16278:8;:36;16330:34;;;;;;;;-1:-1:-1;;;;;16330:34:0;;;;;;;;;;;;;16375:24;;-1:-1:-1;;;;;16375:11:0;;;:24;;;;;16387:11;;16375:24;;;;16387:11;16375;:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;17801:721:0;18257:8;;18298:15;;18338:12;;18371:8;;18403:11;;18448:21;;17836:15;18499;:13;:15::i;:::-;18480:34;;17801:721;;;;;;;:::o;3722:79::-;3760:7;3787:6;-1:-1:-1;;;;;3787:6:0;3722:79;:::o;23687:166::-;23802:34;;;23775:7;23802:34;;;:20;:34;;;;;;;;-1:-1:-1;;;;;23802:43:0;;;;;;;;;;23687:166;;;;:::o;23424:178::-;23545:40;;;23518:7;23545:40;;;:26;:40;;;;;;;;-1:-1:-1;;;;;23545:49:0;;;;;;;;;;23424:178;;;;:::o;32635:120::-;3948:6;;-1:-1:-1;;;;;3948:6:0;3934:10;:20;3926:29;;;;;;32702:7;:17;;-1:-1:-1;;;;;32702:17:0;;;-1:-1:-1;;;;;;32702:17:0;;;;;;;;32730:2;:17;;;;;;;;32635:120::o;7563:28::-;;;-1:-1:-1;;;;;7563:28:0;;:::o;15013:423::-;3948:6;;-1:-1:-1;;;;;3948:6:0;3934:10;:20;3926:29;;;;;;15110:19;15132:34;15153:12;15132:20;:34::i;:::-;15110:56;-1:-1:-1;;;;;;15185:16:0;;15177:25;;;;;;15260:42;;;;;;;:28;:42;;;;;;:59;;15307:11;15260:59;:46;:59;:::i;:::-;15215:42;;;;;;;:28;:42;;;;;;;;;:104;;;;15335:58;;;;;;;;;;;;;-1:-1:-1;;;;;15335:58:0;;;;;;;;;;;15404:24;;-1:-1:-1;;;;;15404:11:0;;;:24;;;;;15416:11;;15404:24;;;;15416:11;15404;:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;4958:339:0;3948:6;;-1:-1:-1;;;;;3948:6:0;3934:10;:20;3926:29;;;;;;5086:9;-1:-1:-1;;;;;5115:22:0;;5107:31;;;;;;5167;;;-1:-1:-1;;;;;5167:31:0;;5192:4;5167:31;;;;;;5149:15;;-1:-1:-1;;;;;5167:16:0;;;;;:31;;;;;;;;;;;;;;;:16;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;5167:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5167:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5167:31:0;;-1:-1:-1;5217:17:0;;;;5209:26;;;;;;5255:6;-1:-1:-1;;;;;5255:15:0;;5271:8;5281:6;5255:33;;;;;;;;;;;;;-1:-1:-1;;;;;5255:33:0;-1:-1:-1;;;;;5255:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5255:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5255:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5255:33:0;5248:41;;;;3966:1;;4958:339;;;:::o;21696:659::-;22120:28;;;21769:15;22120:28;;;:14;:28;;;;;;;;;22173:18;:32;;;;;;22240:28;:42;;;;;;;22120:28;;22313:34;22135:12;22313:20;:34::i;:::-;22293:54;;21696:659;;;;;:::o;12526:110::-;3948:6;;-1:-1:-1;;;;;3948:6:0;3934:10;:20;3926:29;;;;;;12601:15;:27;;;;;;-1:-1:-1;;;12601:27:0;-1:-1:-1;;12601:27:0;;;;;;;;;12526:110::o;12370:96::-;12443:15;;-1:-1:-1;;;12443:15:0;;;;;12370:96::o;14316:172::-;14398:7;14425:55;14452:27;14468:10;14452:15;:27::i;:::-;14425:22;:9;14439:7;14425:22;:13;:22;:::i;:55::-;14418:62;14316:172;-1:-1:-1;;;14316:172:0:o;22409:705::-;-1:-1:-1;;;;;22860:25:0;22469:16;22860:25;;;:16;:25;;;;;;;;;22906:15;:24;;;;;;22957:21;:30;;;;;;23013:20;:29;;;;;;23075:22;:31;;;;;;;;22860:25;;22957:30;;23013:29;22409:705::o;4152:248::-;3948:6;;-1:-1:-1;;;;;3948:6:0;3934:10;:20;3926:29;;;;;;-1:-1:-1;;;;;4235:22:0;;4227:31;;;;;;4269:23;4295:6;;-1:-1:-1;;;;;4312:17:0;;;-1:-1:-1;;;;;;4312:17:0;;;;;;4345:47;;4295:6;;;;;;;4345:47;;4269:23;4345:47;3966:1;4152:248;:::o;23184:158::-;23302:32;;;;;;;:18;:32;;;;;;;;;23291:43;;;;;;;;;;;;;;;;;23253:25;;23291:43;;;23302:32;23291:43;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23291:43:0;;;;;;;;;;;;;;;;;;;;;;;23184:158;;;:::o;19620:293::-;19682:7;19702:16;19721:59;19745:34;19768:10;19745:34;;:18;;:22;;:34;;;;:::i;:::-;19721:19;;;:59;:23;:59;:::i;:::-;19702:78;;19808:17;;19797:8;:28;19793:85;;;-1:-1:-1;;19849:17:0;;19842:24;;28748:1069;28803:17;28823:18;28831:9;28823:7;:18::i;:::-;28803:38;;28852:21;28876:26;28892:9;28876:15;:26::i;:::-;28992:7;;-1:-1:-1;;;28992:7:0;;;;28965:35;;;;:26;:35;;;;;;;;29001:10;28965:47;;;;;;;;28852:50;;-1:-1:-1;28965:62:0;;29017:9;28965:51;:62::i;:::-;28942:7;;;;-1:-1:-1;;;28942:7:0;;;;;28915:35;;;;:26;:35;;;;;;;;28951:10;28915:47;;;;;;;:112;;;;29122:6;;-1:-1:-1;;;29122:6:0;;;;;29108:21;;:13;:21;;;;;:36;;29134:9;29108:36;:25;:36;:::i;:::-;29098:6;;;;-1:-1:-1;;;29098:6:0;;;;;29084:21;;;;:13;:21;;;;;;;;:60;;;;29236:7;;-1:-1:-1;;;29236:7:0;;;;;29221:23;;:14;:23;;;;;:38;;29249:9;29221:38;:27;:38;:::i;:::-;29210:7;;;;-1:-1:-1;;;29210:7:0;;;;;;29195:23;;;;:14;:23;;;;;;;;:64;;;;29356:7;;;;;;;29337:27;;:18;:27;;;;;:46;;29369:13;29337:46;:31;:46;:::i;:::-;29326:7;;-1:-1:-1;;;29326:7:0;;;;29307:27;;;;:18;:27;;;;;:76;29439:12;;:31;;29456:13;29439:16;:31::i;:::-;29424:12;:46;29580:13;;;;29576:234;;;29615:8;29610:189;29633:9;:16;29629:20;;;;29610:189;;;29744:7;;;-1:-1:-1;;;29744:7:0;;;;;29723:29;;;;:20;:29;;;;;29753:11;:14;;29723:60;;29773:9;;29723:29;29753:11;:14;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29753:14:0;29723:45;;;;;;;;;;;;;;:60;:49;:60;:::i;:::-;29696:7;;;-1:-1:-1;;;29696:7:0;;;;;29675:29;;;;:20;:29;;;;;29705:11;:14;;29675:29;;29705:11;;:14;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29705:14:0;29675:45;;;;;;;;;;;;:108;29705:14;29651:3;29610:189;;14136:131;14247:11;;14193:7;;14220:39;;:22;:9;14234:7;14220:22;:13;:22;:::i;29876:483::-;29980:6;;29954:4;;29980:13;;29991:1;29980:13;:10;:13;:::i;:::-;29971:6;:22;30018:9;;:21;;30032:6;30018:21;:13;:21;:::i;:::-;30006:9;:33;30090:6;;-1:-1:-1;;;30090:6:0;;;;30075:22;;;;:14;:22;;;;;;:34;;30102:6;30075:26;:34::i;:::-;30065:6;;-1:-1:-1;;;30065:6:0;;;;30050:22;;;;:14;:22;;;;;;;;:59;;;;30168:10;30151:28;;:16;:28;;;;:40;;30184:6;30151:32;:40::i;:::-;30137:10;30120:28;;;;:16;:28;;;;;;;;:71;;;;30211:2;;:31;;-1:-1:-1;;;;;30211:31:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30211:2:0;;;;:11;;:31;;;;;;;;;;;;;:2;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;30211:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30211:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30211:31:0;30204:39;;;;30278:6;;30306:11;;30259:70;;;30278:6;-1:-1:-1;;;30278:6:0;;;;;;;30259:70;;;;;;;;;;;;;;;;;;;;;;30286:10;;30259:70;;;;;;;;;;-1:-1:-1;30347:4:0;29876:483;;;;:::o;31306:486::-;31379:6;;31367:31;;;-1:-1:-1;;;31379:6:0;;;;;31367:31;;;31345:4;;31387:10;;31367:31;;;;;;;;;;31418:6;;:13;;-1:-1:-1;;;31418:6:0;;;;31429:1;31418:10;:13::i;:::-;31409:6;:22;;-1:-1:-1;;31409:22:0;-1:-1:-1;;;31409:22:0;;;;;;;;;;;;;;31456:23;;31472:6;;;31456:15;:23::i;:::-;31442:11;:37;31521:6;;31507:21;;-1:-1:-1;;;31521:6:0;;;;31507:13;:21::i;:::-;31490:14;:38;31609:6;;31574:21;;31598:18;;-1:-1:-1;;;31609:6:0;;;;31598:10;:18::i;:::-;31631:7;;31574:42;;-1:-1:-1;31631:24:0;;;;-1:-1:-1;;;31631:7:0;;;;:24;31627:134;;;31690:7;;31677:33;;;31690:7;-1:-1:-1;;;31690:7:0;;;;;;;31677:33;;;31699:10;;31677:33;;;;;;;;;;31725:7;:24;;-1:-1:-1;;31725:24:0;-1:-1:-1;;;31725:24:0;;;;;;;31627:134;31780:4;31773:11;;;31306:486;:::o;15499:120::-;15546:7;15573:38;15589:21;;15573:11;;:15;;:38;;;;:::i;:::-;15566:45;;15499:120;:::o;13577:158::-;13643:7;13670:57;13693:33;13715:10;13693:33;;:17;;:21;;:33;;;;:::i;:::-;13670:18;;;:57;:22;:57;:::i;19985:146::-;20046:7;20073:50;20087:23;20099:10;20087:11;:23::i;:::-;20112:10;20073:13;:50::i;19137:181::-;19299:9;;19254:24;;19201:7;;19228:82;;19254:55;;19299:9;;;;;19254:40;;;;;:28;:40;:::i;:55::-;19228:21;;;:82;:25;:82;:::i;21417:188::-;21554:42;;;21490:7;21554:42;;;:28;:42;;;;;;;;;21517:18;:32;;;;;;:80;;;:36;:80;:::i;19383:154::-;19449:7;19476:53;19484:44;19518:9;19484:29;19498:14;;19484:9;:13;;:29;;;;:::i;:44::-;19476:7;:53::i;1816:138::-;1897:5;;;1920:6;;;;;;;;;1913:14;;;14568:364;14629:6;14652:14;;;;14648:256;;14722:13;;14683:21;;14707:29;;14722:13;14707:14;;;;14722:13;;;;14707:29;:14;:29;:::i;:::-;14772:13;;14683:53;;-1:-1:-1;14789:1:0;;14757:29;;14772:13;14757:14;;;;14772:13;;;;14757:29;:14;:29;:::i;:::-;:33;;;14753:102;;;14818:21;:18;;;14837:1;14818:21;:18;:21;:::i;:::-;14811:28;;;;;14753:102;14878:14;-1:-1:-1;14871:21:0;;14648:256;-1:-1:-1;14923:1:0;14568:364;;;:::o;2648:184::-;2704:6;2734:1;2730;:5;;;2723:13;;;;2747:9;2763:1;2759:5;;:1;:5;;;;;;;;2747:17;;;;2799:1;2795:5;;:1;:5;;;;;;;;2787:13;;2791:1;2787;:5;;;:13;2782:1;:18;;;2775:26;;;;2823:1;2819:5;;:1;:5;;;;;;2993:121;3049:6;3076;;;3068:15;;;;;;3105:1;3101:5;;:1;:5;;;;;;;;;2993:121;-1:-1:-1;;;2993:121:0:o;7396:25362::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://5a5e398e7e7cdea43030af6dbb8a9d359b06d081af919e1b6eb68a86dc6d5c68
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,717.25 | 5.5279 | $15,020.71 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.