ERC-20
Overview
Max Total Supply
20.824769670313372982 KittenETHv0
Holders
28
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000007875224268 KittenETHv0Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
KittenETHv0
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-02-26 */ // SPDX-License-Identifier: UNLICENSED // _ _ _ _ __ _ // | | (_) | | | / _(_) // | | ___| |_| |_ ___ _ __ | |_ _ _ __ __ _ _ __ ___ ___ // | |/ / | __| __/ _ \ '_ \ | _| | '_ \ / _` | '_ \ / __/ _ \ // | <| | |_| || __/ | | |_| | | | | | | (_| | | | | (_| __/ // |_|\_\_|\__|\__\___|_| |_(_)_| |_|_| |_|\__,_|_| |_|\___\___| // // KittenSwap Lending v0 // // https://www.KittenSwap.org/ // pragma solidity ^0.6.12; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require (c >= a, "!!add"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require (b <= a, "!!sub"); uint256 c = a - b; return c; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require (b <= a, errorMessage); uint c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require (c / a == b, "!!mul"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require (b > 0, "!!div"); uint256 c = a / b; return c; } } contract ERC20Detailed { string private _name; string private _symbol; uint8 private _decimals; constructor (string memory name, string memory symbol, uint8 decimals) public { _name = name; _symbol = symbol; _decimals = decimals; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } } //////////////////////////////////////////////////////////////////////////////// interface LIQUID_TOKEN { function totalSupply ( ) external view returns ( uint256 ); function getTokenReserve ( ) external view returns ( uint256 ); function getEthReserve ( ) external view returns ( uint256 ); function balanceOf ( address account ) external view returns ( uint256 ); function transfer ( address recipient, uint256 amount ) external returns ( bool ); function transferFrom ( address sender, address recipient, uint256 amount ) external returns ( bool ); function buyToken ( uint256 minTokenAmt, uint256 expireTimestamp ) external payable; function sellToken ( uint256 tokenAmt, uint256 minEthAmt, uint256 expireTimestamp ) external; } //////////////////////////////////////////////////////////////////////////////// contract KittenETHv0 is ERC20Detailed { using SafeMath for uint; address public constant LIQUID_ADDR = 0xC618D56b6D606E59c6B87Af724AB5a91eb40D1cb; uint public MIGRATION_TIMESTAMP = 0; // for migration uint public MIGRATION_LIQUIDATION_WAIT = 14 days; // gov can liquidate forgotten loans some days after migration starts uint public FLASH_LOAN_BP = 10; // in terms of basis points //////////////////////////////////////////////////////////////////////////////// LIQUID_TOKEN private constant LIQUID = LIQUID_TOKEN(LIQUID_ADDR); address public govAddr; constructor () public ERC20Detailed("KittenETHv0", "KittenETHv0", 18) { govAddr = msg.sender; } modifier govOnly() { require (msg.sender == govAddr, "!gov"); _; } function govTransferAddr(address newAddr) external govOnly { require (newAddr != address(0), "!addr"); govAddr = newAddr; } function govSetMIGRATION_TIMESTAMP(uint $MIGRATION_TIMESTAMP) external govOnly { require ($MIGRATION_TIMESTAMP > block.timestamp); MIGRATION_TIMESTAMP = $MIGRATION_TIMESTAMP; } function govSetFLASH_LOAN_BP(uint $FLASH_LOAN_BP) external govOnly { require (FLASH_LOAN_BP <= 60); FLASH_LOAN_BP = $FLASH_LOAN_BP; } //////////////////////////////////////////////////////////////////////////////// function _msgSender() internal view returns (address payable) { return msg.sender; } event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); mapping (address => uint) private _balances; mapping (address => mapping (address => uint)) private _allowances; uint private _totalSupply; function totalSupply() public view returns (uint) { return _totalSupply; } function balanceOf(address account) public view returns (uint) { return _balances[account]; } function transfer(address recipient, uint amount) public returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function transferFrom(address sender, address recipient, uint amount) public returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function _transfer(address sender, address recipient, uint amount) internal { require (sender != address(0), "ERC20: transfer from the zero address"); require (recipient != address(0), "ERC20: transfer to the zero address"); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } //------------------------------------------------------------------------------ function allowance(address owner, address spender) public view returns (uint) { return _allowances[owner][spender]; } function approve(address spender, uint amount) public returns (bool) { _approve(_msgSender(), spender, amount); return true; } function _approve(address owner, address spender, uint amount) internal { require (owner != address(0), "ERC20: approve from the zero address"); require (spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } //------------------------------------------------------------------------------ function _mint(address account, uint amount) internal { require (account != address(0), "ERC20: mint to the zero address"); _balances[account] = _balances[account].add(amount); _totalSupply = _totalSupply.add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint amount) internal { require (account != address(0), "ERC20: burn from the zero address"); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } //////////////////////////////////////////////////////////////////////////////// uint constant PRICE_SCALE = 10 ** 10; function getLiqEthFloorPriceScaled() internal view returns (uint) { uint AMM_PRODUCT = (LIQUID.getTokenReserve()).mul(LIQUID.getEthReserve()); uint TOTAL_SUPPLY = LIQUID.totalSupply(); return PRICE_SCALE.mul(AMM_PRODUCT).div(TOTAL_SUPPLY).div(TOTAL_SUPPLY); } //////////////////////////////////////////////////////////////////////////////// event LOCK_ETH(address indexed user, uint ethAmt, uint kethAmt); event UNLOCK_ETH(address indexed user, uint ethAmt, uint kethAmt); function getContractValueInEth() public view returns (uint) { uint ethValue = (address(this).balance); uint liqValue = (LIQUID.balanceOf(address(this))).mul(getLiqEthFloorPriceScaled()) / (PRICE_SCALE); return ethValue.add(liqValue); } function lockEth() external payable // lock ETH for lending, and mint KittenEth { //-------- receive ETH from user -------- address user = msg.sender; uint ethInAmt = msg.value; require (ethInAmt > 0, '!ethInAmt'); //-------- compute KittenETH mint amt -------- uint kethMintAmt = 0; if (_totalSupply == 0) { kethMintAmt = ethInAmt; // initial price: 1 kETH = 1 ETH } else { kethMintAmt = ethInAmt.mul(_totalSupply).div(getContractValueInEth().sub(ethInAmt)); } //-------- mint KittenETH to user -------- _mint(user, kethMintAmt); emit LOCK_ETH(user, ethInAmt, kethMintAmt); } function unlockEth(uint kethBurnAmt) external // unlock ETH, and burn KittenEth { require (kethBurnAmt > 0, '!kethBurnAmt'); address payable user = msg.sender; //-------- compute ETH out amt -------- uint ethOutAmt = kethBurnAmt.mul(getContractValueInEth()).div(_totalSupply); require (address(this).balance >= ethOutAmt, '!ethInContract'); //-------- burn KittenETH from user -------- _burn(user, kethBurnAmt); //-------- send ETH to user -------- user.transfer(ethOutAmt); emit UNLOCK_ETH(user, ethOutAmt, kethBurnAmt); } //////////////////////////////////////////////////////////////////////////////// mapping (address => uint) public liqLocked; event LOCK_LIQ(address indexed user, uint liqAmt, uint ethAmt); event UNLOCK_LIQ(address indexed user, uint liqAmt, uint ethAmt); function lockLiq(uint liqInAmt) external // lock LIQUID to borrow ETH { require (liqInAmt > 0, '!liqInAmt'); require (block.timestamp < MIGRATION_TIMESTAMP, '!migration'); // can't lock after migration starts address payable user = msg.sender; //-------- compute ETH out amt -------- uint ethOutAmt = liqInAmt.mul(getLiqEthFloorPriceScaled()) / (PRICE_SCALE); require (address(this).balance >= ethOutAmt, '!ethInContract'); //-------- send LIQUID to contract -------- LIQUID.transferFrom(user, address(this), liqInAmt); liqLocked[user] = liqLocked[user].add(liqInAmt); //-------- send ETH to user -------- user.transfer(ethOutAmt); emit LOCK_LIQ(user, liqInAmt, ethOutAmt); } function unlockLiq() external payable // payback ETH to unlock LIQUID { //-------- receive ETH from user -------- uint ethInAmt = msg.value; require (ethInAmt > 0, '!ethInAmt'); uint ethReturnAmt = 0; address payable user = msg.sender; //-------- compute LIQUID out amt -------- uint LiqEthFloorPriceScaled = getLiqEthFloorPriceScaled(); uint liqOutAmt = ethInAmt.mul(PRICE_SCALE).div(LiqEthFloorPriceScaled); if (liqOutAmt > liqLocked[user]) { liqOutAmt = liqLocked[user]; ethReturnAmt = ethInAmt.sub( liqOutAmt.mul(LiqEthFloorPriceScaled) / (PRICE_SCALE) ); } //-------- send LIQUID to user -------- liqLocked[user] = liqLocked[user].sub(liqOutAmt); LIQUID.transfer(user, liqOutAmt); //-------- return extra ETH to user -------- if (ethReturnAmt > 10 ** 8) { // ignore dust user.transfer(ethReturnAmt); } emit UNLOCK_LIQ(user, liqOutAmt, ethInAmt.sub(ethReturnAmt)); } //////////////////////////////////////////////////////////////////////////////// receive() external payable { // receive ETH (from selling LIQUID) require(msg.sender == LIQUID_ADDR, '!sender'); } function flashUnlockLiqAndSell(address payable user, uint liqUnlockAmt, uint liqSellAmt, uint liqSellMinEthAmt, uint liqSellExpireTimestamp) external payable { require ( (user == msg.sender) || // gov can liquidate forgotten loans some days after migration starts ((block.timestamp.sub(MIGRATION_LIQUIDATION_WAIT) > MIGRATION_TIMESTAMP) && (govAddr == msg.sender)) , '!user'); if (liqUnlockAmt > liqLocked[user]) liqUnlockAmt = liqLocked[user]; if (liqSellAmt > liqUnlockAmt) liqSellAmt = liqUnlockAmt; //-------- receive ETH from user -------- uint ethInAmt = msg.value; //-------- compute ETH required for unlocking LIQUID -------- uint ethBorrowAmt = 0; uint ethOutAmt = 0; uint ethRequiredForUnlock = liqUnlockAmt.mul(getLiqEthFloorPriceScaled()) / (PRICE_SCALE); if (ethRequiredForUnlock > ethInAmt) { ethBorrowAmt = (ethRequiredForUnlock - ethInAmt).mul(10000 + FLASH_LOAN_BP) / 10000; // add FLASH_LOAN_BP fee } else { ethOutAmt = ethInAmt - ethRequiredForUnlock; } //-------- sell LIQUID -------- uint liqLoss = 0; uint ethGain = 0; if (liqSellAmt > 0) { uint liqBefore = LIQUID.balanceOf(address(this)); uint ethBefore = address(this).balance; LIQUID.sellToken(liqSellAmt, liqSellMinEthAmt, liqSellExpireTimestamp); // sell LIQUID liqLoss = liqBefore.sub(LIQUID.balanceOf(address(this)), '!liqLoss'); // now contract has less LIQUID ethGain = (address(this).balance).sub(ethBefore, '!ethGain'); // now contract has more ETH } //-------- payback flash-loan (if occured) -------- if (ethBorrowAmt > 0) { // ethOutAmt = 0 ethOutAmt = ethGain.sub(ethBorrowAmt, '!ethBorrowAmt'); // will throw if not enough } else { // ethBorrowAmt = 0 ethOutAmt = ethOutAmt.add(ethGain); } //-------- unlock LIQUID -------- liqLocked[user] = liqLocked[user].sub(liqUnlockAmt, '!liqUnlockAmt'); //-------- send LIQUID to user -------- if (liqUnlockAmt > liqLoss) { LIQUID.transfer(user, liqUnlockAmt - liqLoss); } //-------- send ETH to user -------- if (ethOutAmt > 10 ** 8) { // ignore dust user.transfer(ethOutAmt); } emit UNLOCK_LIQ(user, liqUnlockAmt, ethRequiredForUnlock); } function flashBuyLiqAndLock(uint ethBorrowAmt, uint liqLockAmt, uint liqBuyMinAmt, uint liqBuyExpireTimestamp) external payable { require (block.timestamp < MIGRATION_TIMESTAMP, '!migration'); // can't lock after migration starts address payable user = msg.sender; //-------- receive ETH from user -------- uint ethInAmt = msg.value; //-------- buy LIQUID -------- uint liqGain = 0; uint ethLoss = 0; { uint liqBefore = LIQUID.balanceOf(address(this)); uint ethBefore = address(this).balance; //-------- borrow flash-loan -------- uint ethTotalInAmt = ethInAmt.add(ethBorrowAmt); require (ethBefore >= ethTotalInAmt, '!ethInContract'); LIQUID.buyToken {value: ethTotalInAmt} (liqBuyMinAmt, liqBuyExpireTimestamp); // buy LIQUID liqGain = (LIQUID.balanceOf(address(this))).sub(liqBefore, '!liqGain'); // now contract has more LIQUID ethLoss = ethBefore.sub(address(this).balance, '!ethLoss'); // now contract has less ETH } //-------- compute ETH gain from locking LIQUID -------- if (liqLockAmt > liqGain) { liqLockAmt = liqGain; } uint ethLockOutAmt = liqLockAmt.mul(getLiqEthFloorPriceScaled()) / (PRICE_SCALE); //-------- payback flash-loan -------- uint ethOutAmt = ethInAmt.add(ethLockOutAmt).sub(ethLoss, '!ethLockOutAmt'); // will throw if not enough ethOutAmt = ethOutAmt.sub(ethBorrowAmt.mul(FLASH_LOAN_BP) / 10000, '!ethBorrowAmt'); //-------- lock LIQUID -------- liqLocked[user] = liqLocked[user].add(liqLockAmt); //-------- send LIQUID to user -------- if (liqGain > liqLockAmt) { LIQUID.transfer(user, liqGain - liqLockAmt); } //-------- send ETH to user -------- if (ethOutAmt > 10 ** 8) { // ignore dust require (address(this).balance >= ethOutAmt, '!ethOutAmt'); user.transfer(ethOutAmt); } emit LOCK_LIQ(user, liqLockAmt, ethLockOutAmt); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"kethAmt","type":"uint256"}],"name":"LOCK_ETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"liqAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmt","type":"uint256"}],"name":"LOCK_LIQ","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"kethAmt","type":"uint256"}],"name":"UNLOCK_ETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"liqAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmt","type":"uint256"}],"name":"UNLOCK_LIQ","type":"event"},{"inputs":[],"name":"FLASH_LOAN_BP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIQUID_ADDR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIGRATION_LIQUIDATION_WAIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIGRATION_TIMESTAMP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethBorrowAmt","type":"uint256"},{"internalType":"uint256","name":"liqLockAmt","type":"uint256"},{"internalType":"uint256","name":"liqBuyMinAmt","type":"uint256"},{"internalType":"uint256","name":"liqBuyExpireTimestamp","type":"uint256"}],"name":"flashBuyLiqAndLock","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"user","type":"address"},{"internalType":"uint256","name":"liqUnlockAmt","type":"uint256"},{"internalType":"uint256","name":"liqSellAmt","type":"uint256"},{"internalType":"uint256","name":"liqSellMinEthAmt","type":"uint256"},{"internalType":"uint256","name":"liqSellExpireTimestamp","type":"uint256"}],"name":"flashUnlockLiqAndSell","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getContractValueInEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"govAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"$FLASH_LOAN_BP","type":"uint256"}],"name":"govSetFLASH_LOAN_BP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"$MIGRATION_TIMESTAMP","type":"uint256"}],"name":"govSetMIGRATION_TIMESTAMP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddr","type":"address"}],"name":"govTransferAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"liqLocked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liqInAmt","type":"uint256"}],"name":"lockLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"kethBurnAmt","type":"uint256"}],"name":"unlockEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockLiq","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600060035562127500600455600a6005553480156200002257600080fd5b50604080518082018252600b8082526a04b697474656e45544876360ac1b6020808401828152855180870190965292855284015281519192916012916200006d9160009190620000b3565b50815162000083906001906020850190620000b3565b506002805460ff90921660ff199092169190911790555050600680546001600160a01b031916331790556200014f565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000f657805160ff191683800117855562000126565b8280016001018555821562000126579182015b828111156200012657825182559160200191906001019062000109565b506200013492915062000138565b5090565b5b8082111562000134576000815560010162000139565b61254c806200015f6000396000f3fe60806040526004361061019a5760003560e01c80637e0eeadc116100e1578063b7397ade1161008a578063d594cdb811610064578063d594cdb8146105d9578063d7611cc1146105ee578063dcb6aa6b146105f6578063dd62ed3e1461062057610209565b8063b7397ade1461057c578063cb85ce67146105af578063cde9d09e146105c457610209565b8063a779f2fe116100bb578063a779f2fe146104ff578063a9059cbb1461052e578063aa09cc571461056757610209565b80637e0eeadc146104825780638e07eb94146104ac57806395d89b41146104ea57610209565b8063377a1ed61161014357806348f965061161011d57806348f965061461041d57806370a0823114610447578063778f652d1461047a57610209565b8063377a1ed61461038f57806342edd8e0146103c057806345e26ef9146103f357610209565b80631f05cbea116101745780631f05cbea1461030c57806323b872dd14610321578063313ce5671461036457610209565b806306fdde031461020e578063095ea7b31461029857806318160ddd146102e557610209565b36610209573373c618d56b6d606e59c6b87af724ab5a91eb40d1cb14610207576040805162461bcd60e51b815260206004820152600760248201527f2173656e64657200000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b34801561021a57600080fd5b5061022361065b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561025d578181015183820152602001610245565b50505050905090810190601f16801561028a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102a457600080fd5b506102d1600480360360408110156102bb57600080fd5b506001600160a01b0381351690602001356106f1565b604080519115158252519081900360200190f35b3480156102f157600080fd5b506102fa61070f565b60408051918252519081900360200190f35b34801561031857600080fd5b506102fa610715565b34801561032d57600080fd5b506102d16004803603606081101561034457600080fd5b506001600160a01b0381358116916020810135909116906040013561071b565b34801561037057600080fd5b506103796107a2565b6040805160ff9092168252519081900360200190f35b34801561039b57600080fd5b506103a46107ab565b604080516001600160a01b039092168252519081900360200190f35b3480156103cc57600080fd5b50610207600480360360208110156103e357600080fd5b50356001600160a01b03166107c3565b3480156103ff57600080fd5b506102076004803603602081101561041657600080fd5b50356108a0565b34801561042957600080fd5b506102076004803603602081101561044057600080fd5b50356108fd565b34801561045357600080fd5b506102fa6004803603602081101561046a57600080fd5b50356001600160a01b0316610956565b610207610971565b34801561048e57600080fd5b50610207600480360360208110156104a557600080fd5b5035610b9c565b610207600480360360a08110156104c257600080fd5b506001600160a01b038135169060208101359060408101359060608101359060800135610ce1565b3480156104f657600080fd5b50610223611232565b6102076004803603608081101561051557600080fd5b5080359060208101359060408101359060600135611292565b34801561053a57600080fd5b506102d16004803603604081101561055157600080fd5b506001600160a01b0381351690602001356117e9565b34801561057357600080fd5b506102fa6117fd565b34801561058857600080fd5b506102fa6004803603602081101561059f57600080fd5b50356001600160a01b03166118b0565b3480156105bb57600080fd5b506103a46118c2565b3480156105d057600080fd5b506102fa6118d1565b3480156105e557600080fd5b506102fa6118d7565b6102076118dd565b34801561060257600080fd5b506102076004803603602081101561061957600080fd5b50356119a9565b34801561062c57600080fd5b506102fa6004803603604081101561064357600080fd5b506001600160a01b0381358116916020013516611c0d565b60008054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106e75780601f106106bc576101008083540402835291602001916106e7565b820191906000526020600020905b8154815290600101906020018083116106ca57829003601f168201915b5050505050905090565b60006107056106fe611c38565b8484611c3c565b5060015b92915050565b60095490565b60045481565b6000610728848484611d28565b61079884610734611c38565b61079385604051806060016040528060288152602001612485602891396001600160a01b038a16600090815260086020526040812090610772611c38565b6001600160a01b031681526020810191909152604001600020549190611e7a565b611c3c565b5060019392505050565b60025460ff1690565b73c618d56b6d606e59c6b87af724ab5a91eb40d1cb81565b6006546001600160a01b0316331461080b576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b6001600160a01b038116610866576040805162461bcd60e51b815260206004820152600560248201527f2161646472000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6006546001600160a01b031633146108e8576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b603c60055411156108f857600080fd5b600555565b6006546001600160a01b03163314610945576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b42811161095157600080fd5b600355565b6001600160a01b031660009081526007602052604090205490565b34806109b0576040805162461bcd60e51b815260206004820152600960248201526808595d1a125b905b5d60ba1b604482015290519081900360640190fd5b600033816109bc611f11565b905060006109d9826109d3876402540be400612084565b906120fa565b6001600160a01b0384166000908152600a6020526040902054909150811115610a3c57506001600160a01b0382166000908152600a6020526040902054610a396402540be400610a298385612084565b81610a3057fe5b87919004612164565b93505b6001600160a01b0383166000908152600a6020526040902054610a5f9082612164565b6001600160a01b0384166000818152600a6020908152604080832094909455835163a9059cbb60e01b8152600481019390935260248301859052925173c618d56b6d606e59c6b87af724ab5a91eb40d1cb9363a9059cbb93604480820194929392918390030190829087803b158015610ad757600080fd5b505af1158015610aeb573d6000803e3d6000fd5b505050506040513d6020811015610b0157600080fd5b50506305f5e100841115610b47576040516001600160a01b0384169085156108fc029086906000818181858888f19350505050158015610b45573d6000803e3d6000fd5b505b6001600160a01b0383167f998b2cc3508ff742355b91fd07dd44bdc9011ec87d1093d9378be94d2b38e5f582610b7d8888612164565b6040805192835260208301919091528051918290030190a25050505050565b60008111610bf1576040805162461bcd60e51b815260206004820152600c60248201527f216b6574684275726e416d740000000000000000000000000000000000000000604482015290519081900360640190fd5b60003390506000610c106009546109d3610c096117fd565b8690612084565b905080471015610c58576040805162461bcd60e51b815260206004820152600e60248201526d08595d1a125b90dbdb9d1c9858dd60921b604482015290519081900360640190fd5b610c6282846121c1565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610c98573d6000803e3d6000fd5b50604080518281526020810185905281516001600160a01b038516927fa47a77dc9b560fa9fc75e07b2c95e7729a69f8dcb9bf56b241891290efb369ba928290030190a2505050565b6001600160a01b038516331480610d1b5750600354600454610d04904290612164565b118015610d1b57506006546001600160a01b031633145b610d6c576040805162461bcd60e51b815260206004820152600560248201527f2175736572000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0385166000908152600a6020526040902054841115610da8576001600160a01b0385166000908152600a602052604090205493505b83831115610db4578392505b34600080806402540be400610dd1610dca611f11565b8a90612084565b81610dd857fe5b04905083811115610e1057612710610e016005546127100186840361208490919063ffffffff16565b81610e0857fe5b049250610e16565b80840391505b600080881561104657604080516370a0823160e01b8152306004820152905160009173c618d56b6d606e59c6b87af724ab5a91eb40d1cb916370a0823191602480820192602092909190829003018186803b158015610e7457600080fd5b505afa158015610e88573d6000803e3d6000fd5b505050506040513d6020811015610e9e57600080fd5b5051604080517f1f181d57000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c9052604481018b90529051919250479173c618d56b6d606e59c6b87af724ab5a91eb40d1cb91631f181d5791606480830192600092919082900301818387803b158015610f1f57600080fd5b505af1158015610f33573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051610ff5935073c618d56b6d606e59c6b87af724ab5a91eb40d1cb92506370a0823191602480820192602092909190829003018186803b158015610f8d57600080fd5b505afa158015610fa1573d6000803e3d6000fd5b505050506040513d6020811015610fb757600080fd5b505160408051808201909152600881527f216c69714c6f73730000000000000000000000000000000000000000000000006020820152849190611e7a565b9350611041816040518060400160405280600881526020017f216574684761696e00000000000000000000000000000000000000000000000081525047611e7a9092919063ffffffff16565b925050505b84156110845760408051808201909152600d81526c08595d1a109bdc9c9bddd05b5d609a1b602082015261107d9082908790611e7a565b9350611091565b61108e84826122b1565b93505b604080518082018252600d81527f216c6971556e6c6f636b416d74000000000000000000000000000000000000006020808301919091526001600160a01b038e166000908152600a90915291909120546110ec918c90611e7a565b6001600160a01b038c166000908152600a6020526040902055818a111561119e576040805163a9059cbb60e01b81526001600160a01b038d166004820152838c036024820152905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb9163a9059cbb9160448083019260209291908290030181600087803b15801561117157600080fd5b505af1158015611185573d6000803e3d6000fd5b505050506040513d602081101561119b57600080fd5b50505b6305f5e1008411156111e2576040516001600160a01b038c169085156108fc029086906000818181858888f193505050501580156111e0573d6000803e3d6000fd5b505b604080518b81526020810185905281516001600160a01b038e16927f998b2cc3508ff742355b91fd07dd44bdc9011ec87d1093d9378be94d2b38e5f5928290030190a25050505050505050505050565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156106e75780601f106106bc576101008083540402835291602001916106e7565b60035442106112d5576040805162461bcd60e51b815260206004820152600a60248201526910b6b4b3b930ba34b7b760b11b604482015290519081900360640190fd5b604080516370a0823160e01b81523060048201529051339134916000918291829173c618d56b6d606e59c6b87af724ab5a91eb40d1cb916370a0823191602480820192602092909190829003018186803b15801561133257600080fd5b505afa158015611346573d6000803e3d6000fd5b505050506040513d602081101561135c57600080fd5b5051905047600061136d868c6122b1565b9050808210156113b5576040805162461bcd60e51b815260206004820152600e60248201526d08595d1a125b90dbdb9d1c9858dd60921b604482015290519081900360640190fd5b73c618d56b6d606e59c6b87af724ab5a91eb40d1cb6001600160a01b031663057466ea828b8b6040518463ffffffff1660e01b815260040180838152602001828152602001925050506000604051808303818588803b15801561141757600080fd5b505af115801561142b573d6000803e3d6000fd5b50505050506114fe836040518060400160405280600881526020017f216c69714761696e00000000000000000000000000000000000000000000000081525073c618d56b6d606e59c6b87af724ab5a91eb40d1cb6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156114cb57600080fd5b505afa1580156114df573d6000803e3d6000fd5b505050506040513d60208110156114f557600080fd5b50519190611e7a565b945061154a476040518060400160405280600881526020017f216574684c6f737300000000000000000000000000000000000000000000000081525084611e7a9092919063ffffffff16565b93505050508187111561155b578196505b60006402540be40061156e610dca611f11565b8161157557fe5b04905060006115ce836040518060400160405280600e81526020017f216574684c6f636b4f7574416d740000000000000000000000000000000000008152506115c785896122b190919063ffffffff16565b9190611e7a565b90506116296127106115eb6005548d61208490919063ffffffff16565b816115f257fe5b046040518060400160405280600d81526020016c08595d1a109bdc9c9bddd05b5d609a1b81525083611e7a9092919063ffffffff16565b6001600160a01b0387166000908152600a602052604090205490915061164f908a6122b1565b6001600160a01b0387166000908152600a602052604090205588841115611701576040805163a9059cbb60e01b81526001600160a01b03881660048201528a86036024820152905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb9163a9059cbb9160448083019260209291908290030181600087803b1580156116d457600080fd5b505af11580156116e8573d6000803e3d6000fd5b505050506040513d60208110156116fe57600080fd5b50505b6305f5e10081111561179a5780471015611762576040805162461bcd60e51b815260206004820152600a60248201527f216574684f7574416d7400000000000000000000000000000000000000000000604482015290519081900360640190fd5b6040516001600160a01b0387169082156108fc029083906000818181858888f19350505050158015611798573d6000803e3d6000fd5b505b604080518a81526020810184905281516001600160a01b038916927f9b6024f0ea0edc0d7101fc2c29212ff50f0da5a8d7614d1042adf37b764c5d89928290030190a250505050505050505050565b60006107056117f6611c38565b8484611d28565b600047816402540be400611895611812611f11565b604080516370a0823160e01b8152306004820152905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb916370a08231916024808301926020929190829003018186803b15801561186357600080fd5b505afa158015611877573d6000803e3d6000fd5b505050506040513d602081101561188d57600080fd5b505190612084565b8161189c57fe5b0490506118a982826122b1565b9250505090565b600a6020526000908152604090205481565b6006546001600160a01b031681565b60035481565b60055481565b33348061191d576040805162461bcd60e51b815260206004820152600960248201526808595d1a125b905b5d60ba1b604482015290519081900360640190fd5b600060095460001415611931575080611957565b611954611946836119406117fd565b90612164565b6009546109d3908590612084565b90505b611961838261230b565b604080518381526020810183905281516001600160a01b038616927f1675c3def69e4ded795f3e247bd4a74ee003770f64b2a3fa8ebbd94310e571a5928290030190a2505050565b600081116119fe576040805162461bcd60e51b815260206004820152600960248201527f216c6971496e416d740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6003544210611a41576040805162461bcd60e51b815260206004820152600a60248201526910b6b4b3b930ba34b7b760b11b604482015290519081900360640190fd5b3360006402540be400611a5c611a55611f11565b8590612084565b81611a6357fe5b04905080471015611aac576040805162461bcd60e51b815260206004820152600e60248201526d08595d1a125b90dbdb9d1c9858dd60921b604482015290519081900360640190fd5b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015230602482015260448101859052905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb916323b872dd9160648083019260209291908290030181600087803b158015611b2e57600080fd5b505af1158015611b42573d6000803e3d6000fd5b505050506040513d6020811015611b5857600080fd5b50506001600160a01b0382166000908152600a6020526040902054611b7d90846122b1565b6001600160a01b0383166000818152600a6020526040808220939093559151909183156108fc02918491818181858888f19350505050158015611bc4573d6000803e3d6000fd5b50604080518481526020810183905281516001600160a01b038516927f9b6024f0ea0edc0d7101fc2c29212ff50f0da5a8d7614d1042adf37b764c5d89928290030190a2505050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3390565b6001600160a01b038316611c815760405162461bcd60e51b81526004018080602001828103825260248152602001806124f36024913960400191505060405180910390fd5b6001600160a01b038216611cc65760405162461bcd60e51b815260040180806020018281038252602281526020018061243d6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260086020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611d6d5760405162461bcd60e51b81526004018080602001828103825260258152602001806124ce6025913960400191505060405180910390fd5b6001600160a01b038216611db25760405162461bcd60e51b81526004018080602001828103825260238152602001806123f86023913960400191505060405180910390fd5b611def8160405180606001604052806026815260200161245f602691396001600160a01b0386166000908152600760205260409020549190611e7a565b6001600160a01b038085166000908152600760205260408082209390935590841681522054611e1e90826122b1565b6001600160a01b0380841660008181526007602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611f095760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611ece578181015183820152602001611eb6565b50505050905090810190601f168015611efb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080611ff473c618d56b6d606e59c6b87af724ab5a91eb40d1cb6001600160a01b0316638a9118c06040518163ffffffff1660e01b815260040160206040518083038186803b158015611f6457600080fd5b505afa158015611f78573d6000803e3d6000fd5b505050506040513d6020811015611f8e57600080fd5b5051604080517ff1d9f88b000000000000000000000000000000000000000000000000000000008152905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb9163f1d9f88b916004808301926020929190829003018186803b15801561186357600080fd5b9050600073c618d56b6d606e59c6b87af724ab5a91eb40d1cb6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561204557600080fd5b505afa158015612059573d6000803e3d6000fd5b505050506040513d602081101561206f57600080fd5b505190506118a9816109d381816402540be400875b60008261209357506000610709565b828202828482816120a057fe5b04146120f3576040805162461bcd60e51b815260206004820152600560248201527f21216d756c000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b9392505050565b6000808211612150576040805162461bcd60e51b815260206004820152600560248201527f2121646976000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600082848161215b57fe5b04949350505050565b6000828211156121bb576040805162461bcd60e51b815260206004820152600560248201527f2121737562000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b50900390565b6001600160a01b0382166122065760405162461bcd60e51b81526004018080602001828103825260218152602001806124ad6021913960400191505060405180910390fd5b6122438160405180606001604052806022815260200161241b602291396001600160a01b0385166000908152600760205260409020549190611e7a565b6001600160a01b0383166000908152600760205260409020556009546122699082612164565b6009556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000828201838110156120f3576040805162461bcd60e51b815260206004820152600560248201527f2121616464000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038216612366576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6001600160a01b03821660009081526007602052604090205461238990826122b1565b6001600160a01b0383166000908152600760205260409020556009546123af90826122b1565b6009556040805182815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a2646970667358221220c5a926da78506474e82c8b52a22f26414e5780fe9150d7e446c639d81942f63564736f6c634300060c0033
Deployed Bytecode
0x60806040526004361061019a5760003560e01c80637e0eeadc116100e1578063b7397ade1161008a578063d594cdb811610064578063d594cdb8146105d9578063d7611cc1146105ee578063dcb6aa6b146105f6578063dd62ed3e1461062057610209565b8063b7397ade1461057c578063cb85ce67146105af578063cde9d09e146105c457610209565b8063a779f2fe116100bb578063a779f2fe146104ff578063a9059cbb1461052e578063aa09cc571461056757610209565b80637e0eeadc146104825780638e07eb94146104ac57806395d89b41146104ea57610209565b8063377a1ed61161014357806348f965061161011d57806348f965061461041d57806370a0823114610447578063778f652d1461047a57610209565b8063377a1ed61461038f57806342edd8e0146103c057806345e26ef9146103f357610209565b80631f05cbea116101745780631f05cbea1461030c57806323b872dd14610321578063313ce5671461036457610209565b806306fdde031461020e578063095ea7b31461029857806318160ddd146102e557610209565b36610209573373c618d56b6d606e59c6b87af724ab5a91eb40d1cb14610207576040805162461bcd60e51b815260206004820152600760248201527f2173656e64657200000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b34801561021a57600080fd5b5061022361065b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561025d578181015183820152602001610245565b50505050905090810190601f16801561028a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102a457600080fd5b506102d1600480360360408110156102bb57600080fd5b506001600160a01b0381351690602001356106f1565b604080519115158252519081900360200190f35b3480156102f157600080fd5b506102fa61070f565b60408051918252519081900360200190f35b34801561031857600080fd5b506102fa610715565b34801561032d57600080fd5b506102d16004803603606081101561034457600080fd5b506001600160a01b0381358116916020810135909116906040013561071b565b34801561037057600080fd5b506103796107a2565b6040805160ff9092168252519081900360200190f35b34801561039b57600080fd5b506103a46107ab565b604080516001600160a01b039092168252519081900360200190f35b3480156103cc57600080fd5b50610207600480360360208110156103e357600080fd5b50356001600160a01b03166107c3565b3480156103ff57600080fd5b506102076004803603602081101561041657600080fd5b50356108a0565b34801561042957600080fd5b506102076004803603602081101561044057600080fd5b50356108fd565b34801561045357600080fd5b506102fa6004803603602081101561046a57600080fd5b50356001600160a01b0316610956565b610207610971565b34801561048e57600080fd5b50610207600480360360208110156104a557600080fd5b5035610b9c565b610207600480360360a08110156104c257600080fd5b506001600160a01b038135169060208101359060408101359060608101359060800135610ce1565b3480156104f657600080fd5b50610223611232565b6102076004803603608081101561051557600080fd5b5080359060208101359060408101359060600135611292565b34801561053a57600080fd5b506102d16004803603604081101561055157600080fd5b506001600160a01b0381351690602001356117e9565b34801561057357600080fd5b506102fa6117fd565b34801561058857600080fd5b506102fa6004803603602081101561059f57600080fd5b50356001600160a01b03166118b0565b3480156105bb57600080fd5b506103a46118c2565b3480156105d057600080fd5b506102fa6118d1565b3480156105e557600080fd5b506102fa6118d7565b6102076118dd565b34801561060257600080fd5b506102076004803603602081101561061957600080fd5b50356119a9565b34801561062c57600080fd5b506102fa6004803603604081101561064357600080fd5b506001600160a01b0381358116916020013516611c0d565b60008054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106e75780601f106106bc576101008083540402835291602001916106e7565b820191906000526020600020905b8154815290600101906020018083116106ca57829003601f168201915b5050505050905090565b60006107056106fe611c38565b8484611c3c565b5060015b92915050565b60095490565b60045481565b6000610728848484611d28565b61079884610734611c38565b61079385604051806060016040528060288152602001612485602891396001600160a01b038a16600090815260086020526040812090610772611c38565b6001600160a01b031681526020810191909152604001600020549190611e7a565b611c3c565b5060019392505050565b60025460ff1690565b73c618d56b6d606e59c6b87af724ab5a91eb40d1cb81565b6006546001600160a01b0316331461080b576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b6001600160a01b038116610866576040805162461bcd60e51b815260206004820152600560248201527f2161646472000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6006546001600160a01b031633146108e8576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b603c60055411156108f857600080fd5b600555565b6006546001600160a01b03163314610945576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b42811161095157600080fd5b600355565b6001600160a01b031660009081526007602052604090205490565b34806109b0576040805162461bcd60e51b815260206004820152600960248201526808595d1a125b905b5d60ba1b604482015290519081900360640190fd5b600033816109bc611f11565b905060006109d9826109d3876402540be400612084565b906120fa565b6001600160a01b0384166000908152600a6020526040902054909150811115610a3c57506001600160a01b0382166000908152600a6020526040902054610a396402540be400610a298385612084565b81610a3057fe5b87919004612164565b93505b6001600160a01b0383166000908152600a6020526040902054610a5f9082612164565b6001600160a01b0384166000818152600a6020908152604080832094909455835163a9059cbb60e01b8152600481019390935260248301859052925173c618d56b6d606e59c6b87af724ab5a91eb40d1cb9363a9059cbb93604480820194929392918390030190829087803b158015610ad757600080fd5b505af1158015610aeb573d6000803e3d6000fd5b505050506040513d6020811015610b0157600080fd5b50506305f5e100841115610b47576040516001600160a01b0384169085156108fc029086906000818181858888f19350505050158015610b45573d6000803e3d6000fd5b505b6001600160a01b0383167f998b2cc3508ff742355b91fd07dd44bdc9011ec87d1093d9378be94d2b38e5f582610b7d8888612164565b6040805192835260208301919091528051918290030190a25050505050565b60008111610bf1576040805162461bcd60e51b815260206004820152600c60248201527f216b6574684275726e416d740000000000000000000000000000000000000000604482015290519081900360640190fd5b60003390506000610c106009546109d3610c096117fd565b8690612084565b905080471015610c58576040805162461bcd60e51b815260206004820152600e60248201526d08595d1a125b90dbdb9d1c9858dd60921b604482015290519081900360640190fd5b610c6282846121c1565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610c98573d6000803e3d6000fd5b50604080518281526020810185905281516001600160a01b038516927fa47a77dc9b560fa9fc75e07b2c95e7729a69f8dcb9bf56b241891290efb369ba928290030190a2505050565b6001600160a01b038516331480610d1b5750600354600454610d04904290612164565b118015610d1b57506006546001600160a01b031633145b610d6c576040805162461bcd60e51b815260206004820152600560248201527f2175736572000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0385166000908152600a6020526040902054841115610da8576001600160a01b0385166000908152600a602052604090205493505b83831115610db4578392505b34600080806402540be400610dd1610dca611f11565b8a90612084565b81610dd857fe5b04905083811115610e1057612710610e016005546127100186840361208490919063ffffffff16565b81610e0857fe5b049250610e16565b80840391505b600080881561104657604080516370a0823160e01b8152306004820152905160009173c618d56b6d606e59c6b87af724ab5a91eb40d1cb916370a0823191602480820192602092909190829003018186803b158015610e7457600080fd5b505afa158015610e88573d6000803e3d6000fd5b505050506040513d6020811015610e9e57600080fd5b5051604080517f1f181d57000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c9052604481018b90529051919250479173c618d56b6d606e59c6b87af724ab5a91eb40d1cb91631f181d5791606480830192600092919082900301818387803b158015610f1f57600080fd5b505af1158015610f33573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051610ff5935073c618d56b6d606e59c6b87af724ab5a91eb40d1cb92506370a0823191602480820192602092909190829003018186803b158015610f8d57600080fd5b505afa158015610fa1573d6000803e3d6000fd5b505050506040513d6020811015610fb757600080fd5b505160408051808201909152600881527f216c69714c6f73730000000000000000000000000000000000000000000000006020820152849190611e7a565b9350611041816040518060400160405280600881526020017f216574684761696e00000000000000000000000000000000000000000000000081525047611e7a9092919063ffffffff16565b925050505b84156110845760408051808201909152600d81526c08595d1a109bdc9c9bddd05b5d609a1b602082015261107d9082908790611e7a565b9350611091565b61108e84826122b1565b93505b604080518082018252600d81527f216c6971556e6c6f636b416d74000000000000000000000000000000000000006020808301919091526001600160a01b038e166000908152600a90915291909120546110ec918c90611e7a565b6001600160a01b038c166000908152600a6020526040902055818a111561119e576040805163a9059cbb60e01b81526001600160a01b038d166004820152838c036024820152905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb9163a9059cbb9160448083019260209291908290030181600087803b15801561117157600080fd5b505af1158015611185573d6000803e3d6000fd5b505050506040513d602081101561119b57600080fd5b50505b6305f5e1008411156111e2576040516001600160a01b038c169085156108fc029086906000818181858888f193505050501580156111e0573d6000803e3d6000fd5b505b604080518b81526020810185905281516001600160a01b038e16927f998b2cc3508ff742355b91fd07dd44bdc9011ec87d1093d9378be94d2b38e5f5928290030190a25050505050505050505050565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156106e75780601f106106bc576101008083540402835291602001916106e7565b60035442106112d5576040805162461bcd60e51b815260206004820152600a60248201526910b6b4b3b930ba34b7b760b11b604482015290519081900360640190fd5b604080516370a0823160e01b81523060048201529051339134916000918291829173c618d56b6d606e59c6b87af724ab5a91eb40d1cb916370a0823191602480820192602092909190829003018186803b15801561133257600080fd5b505afa158015611346573d6000803e3d6000fd5b505050506040513d602081101561135c57600080fd5b5051905047600061136d868c6122b1565b9050808210156113b5576040805162461bcd60e51b815260206004820152600e60248201526d08595d1a125b90dbdb9d1c9858dd60921b604482015290519081900360640190fd5b73c618d56b6d606e59c6b87af724ab5a91eb40d1cb6001600160a01b031663057466ea828b8b6040518463ffffffff1660e01b815260040180838152602001828152602001925050506000604051808303818588803b15801561141757600080fd5b505af115801561142b573d6000803e3d6000fd5b50505050506114fe836040518060400160405280600881526020017f216c69714761696e00000000000000000000000000000000000000000000000081525073c618d56b6d606e59c6b87af724ab5a91eb40d1cb6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156114cb57600080fd5b505afa1580156114df573d6000803e3d6000fd5b505050506040513d60208110156114f557600080fd5b50519190611e7a565b945061154a476040518060400160405280600881526020017f216574684c6f737300000000000000000000000000000000000000000000000081525084611e7a9092919063ffffffff16565b93505050508187111561155b578196505b60006402540be40061156e610dca611f11565b8161157557fe5b04905060006115ce836040518060400160405280600e81526020017f216574684c6f636b4f7574416d740000000000000000000000000000000000008152506115c785896122b190919063ffffffff16565b9190611e7a565b90506116296127106115eb6005548d61208490919063ffffffff16565b816115f257fe5b046040518060400160405280600d81526020016c08595d1a109bdc9c9bddd05b5d609a1b81525083611e7a9092919063ffffffff16565b6001600160a01b0387166000908152600a602052604090205490915061164f908a6122b1565b6001600160a01b0387166000908152600a602052604090205588841115611701576040805163a9059cbb60e01b81526001600160a01b03881660048201528a86036024820152905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb9163a9059cbb9160448083019260209291908290030181600087803b1580156116d457600080fd5b505af11580156116e8573d6000803e3d6000fd5b505050506040513d60208110156116fe57600080fd5b50505b6305f5e10081111561179a5780471015611762576040805162461bcd60e51b815260206004820152600a60248201527f216574684f7574416d7400000000000000000000000000000000000000000000604482015290519081900360640190fd5b6040516001600160a01b0387169082156108fc029083906000818181858888f19350505050158015611798573d6000803e3d6000fd5b505b604080518a81526020810184905281516001600160a01b038916927f9b6024f0ea0edc0d7101fc2c29212ff50f0da5a8d7614d1042adf37b764c5d89928290030190a250505050505050505050565b60006107056117f6611c38565b8484611d28565b600047816402540be400611895611812611f11565b604080516370a0823160e01b8152306004820152905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb916370a08231916024808301926020929190829003018186803b15801561186357600080fd5b505afa158015611877573d6000803e3d6000fd5b505050506040513d602081101561188d57600080fd5b505190612084565b8161189c57fe5b0490506118a982826122b1565b9250505090565b600a6020526000908152604090205481565b6006546001600160a01b031681565b60035481565b60055481565b33348061191d576040805162461bcd60e51b815260206004820152600960248201526808595d1a125b905b5d60ba1b604482015290519081900360640190fd5b600060095460001415611931575080611957565b611954611946836119406117fd565b90612164565b6009546109d3908590612084565b90505b611961838261230b565b604080518381526020810183905281516001600160a01b038616927f1675c3def69e4ded795f3e247bd4a74ee003770f64b2a3fa8ebbd94310e571a5928290030190a2505050565b600081116119fe576040805162461bcd60e51b815260206004820152600960248201527f216c6971496e416d740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6003544210611a41576040805162461bcd60e51b815260206004820152600a60248201526910b6b4b3b930ba34b7b760b11b604482015290519081900360640190fd5b3360006402540be400611a5c611a55611f11565b8590612084565b81611a6357fe5b04905080471015611aac576040805162461bcd60e51b815260206004820152600e60248201526d08595d1a125b90dbdb9d1c9858dd60921b604482015290519081900360640190fd5b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015230602482015260448101859052905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb916323b872dd9160648083019260209291908290030181600087803b158015611b2e57600080fd5b505af1158015611b42573d6000803e3d6000fd5b505050506040513d6020811015611b5857600080fd5b50506001600160a01b0382166000908152600a6020526040902054611b7d90846122b1565b6001600160a01b0383166000818152600a6020526040808220939093559151909183156108fc02918491818181858888f19350505050158015611bc4573d6000803e3d6000fd5b50604080518481526020810183905281516001600160a01b038516927f9b6024f0ea0edc0d7101fc2c29212ff50f0da5a8d7614d1042adf37b764c5d89928290030190a2505050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3390565b6001600160a01b038316611c815760405162461bcd60e51b81526004018080602001828103825260248152602001806124f36024913960400191505060405180910390fd5b6001600160a01b038216611cc65760405162461bcd60e51b815260040180806020018281038252602281526020018061243d6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260086020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611d6d5760405162461bcd60e51b81526004018080602001828103825260258152602001806124ce6025913960400191505060405180910390fd5b6001600160a01b038216611db25760405162461bcd60e51b81526004018080602001828103825260238152602001806123f86023913960400191505060405180910390fd5b611def8160405180606001604052806026815260200161245f602691396001600160a01b0386166000908152600760205260409020549190611e7a565b6001600160a01b038085166000908152600760205260408082209390935590841681522054611e1e90826122b1565b6001600160a01b0380841660008181526007602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611f095760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611ece578181015183820152602001611eb6565b50505050905090810190601f168015611efb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080611ff473c618d56b6d606e59c6b87af724ab5a91eb40d1cb6001600160a01b0316638a9118c06040518163ffffffff1660e01b815260040160206040518083038186803b158015611f6457600080fd5b505afa158015611f78573d6000803e3d6000fd5b505050506040513d6020811015611f8e57600080fd5b5051604080517ff1d9f88b000000000000000000000000000000000000000000000000000000008152905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb9163f1d9f88b916004808301926020929190829003018186803b15801561186357600080fd5b9050600073c618d56b6d606e59c6b87af724ab5a91eb40d1cb6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561204557600080fd5b505afa158015612059573d6000803e3d6000fd5b505050506040513d602081101561206f57600080fd5b505190506118a9816109d381816402540be400875b60008261209357506000610709565b828202828482816120a057fe5b04146120f3576040805162461bcd60e51b815260206004820152600560248201527f21216d756c000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b9392505050565b6000808211612150576040805162461bcd60e51b815260206004820152600560248201527f2121646976000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600082848161215b57fe5b04949350505050565b6000828211156121bb576040805162461bcd60e51b815260206004820152600560248201527f2121737562000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b50900390565b6001600160a01b0382166122065760405162461bcd60e51b81526004018080602001828103825260218152602001806124ad6021913960400191505060405180910390fd5b6122438160405180606001604052806022815260200161241b602291396001600160a01b0385166000908152600760205260409020549190611e7a565b6001600160a01b0383166000908152600760205260409020556009546122699082612164565b6009556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000828201838110156120f3576040805162461bcd60e51b815260206004820152600560248201527f2121616464000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038216612366576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6001600160a01b03821660009081526007602052604090205461238990826122b1565b6001600160a01b0383166000908152600760205260409020556009546123af90826122b1565b6009556040805182815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a2646970667358221220c5a926da78506474e82c8b52a22f26414e5780fe9150d7e446c639d81942f63564736f6c634300060c0033
Deployed Bytecode Sourcemap
2931:14459:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12384:10;3051:42;12384:25;12376:45;;;;;-1:-1:-1;;;12376:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2931:14459;;;;;1772:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6253:149;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6253:149:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4857:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3173:48;;;;;;;;;;;;;:::i;5225:301::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5225:301:0;;;;;;;;;;;;;;;;;:::i;1954:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3013:80;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;3013:80:0;;;;;;;;;;;;;;3807:140;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3807:140:0;-1:-1:-1;;;;;3807:140:0;;:::i;4167:153::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4167:153:0;;:::i;3959:196::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3959:196:0;;:::i;4951:107::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4951:107:0;-1:-1:-1;;;;;4951:107:0;;:::i;11053:1144::-;;;:::i;9286:637::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9286:637:0;;:::i;12437:2674::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12437:2674:0;;;;;;;;;;;;;;;;;;;;;;;:::i;1861:87::-;;;;;;;;;;;;;:::i;15123:2264::-;;;;;;;;;;;;;;;;-1:-1:-1;15123:2264:0;;;;;;;;;;;;;;;;;:::i;5064:155::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5064:155:0;;;;;;;;:::i;8208:292::-;;;;;;;;;;;;;:::i;10027:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10027:42:0;-1:-1:-1;;;;;10027:42:0;;:::i;3552:22::-;;;;;;;;;;;;;:::i;3100:35::-;;;;;;;;;;;;;:::i;3299:30::-;;;;;;;;;;;;;:::i;8508:766::-;;;:::i;10232:809::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10232:809:0;;:::i;6116:131::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6116:131:0;;;;;;;;;;:::i;1772:83::-;1842:5;1835:12;;;;;;;;-1:-1:-1;;1835:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1809:13;;1835:12;;1842:5;;1835:12;;1842:5;1835:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1772:83;:::o;6253:149::-;6316:4;6333:39;6342:12;:10;:12::i;:::-;6356:7;6365:6;6333:8;:39::i;:::-;-1:-1:-1;6390:4:0;6253:149;;;;;:::o;4857:88::-;4925:12;;4857:88;:::o;3173:48::-;;;;:::o;5225:301::-;5311:4;5328:36;5338:6;5346:9;5357:6;5328:9;:36::i;:::-;5375:121;5384:6;5392:12;:10;:12::i;:::-;5406:89;5444:6;5406:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5406:19:0;;;;;;:11;:19;;;;;;5426:12;:10;:12::i;:::-;-1:-1:-1;;;;;5406:33:0;;;;;;;;;;;;-1:-1:-1;5406:33:0;;;:89;:37;:89::i;:::-;5375:8;:121::i;:::-;-1:-1:-1;5514:4:0;5225:301;;;;;:::o;1954:83::-;2020:9;;;;1954:83;:::o;3013:80::-;3051:42;3013:80;:::o;3807:140::-;3762:7;;-1:-1:-1;;;;;3762:7:0;3748:10;:21;3739:39;;;;;-1:-1:-1;;;3739:39:0;;;;;;;;;;;;;;;-1:-1:-1;;;3739:39:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3883:21:0;::::1;3874:40;;;::::0;;-1:-1:-1;;;3874:40:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3922:7;:17:::0;;;::::1;-1:-1:-1::0;;;;;3922:17:0;;;::::1;::::0;;;::::1;::::0;;3807:140::o;4167:153::-;3762:7;;-1:-1:-1;;;;;3762:7:0;3748:10;:21;3739:39;;;;;-1:-1:-1;;;3739:39:0;;;;;;;;;;;;;;;-1:-1:-1;;;3739:39:0;;;;;;;;;;;;;;;4271:2:::1;4254:13;;:19;;4245:29;;;::::0;::::1;;4282:13;:30:::0;4167:153::o;3959:196::-;3762:7;;-1:-1:-1;;;;;3762:7:0;3748:10;:21;3739:39;;;;;-1:-1:-1;;;3739:39:0;;;;;;;;;;;;;;;-1:-1:-1;;;3739:39:0;;;;;;;;;;;;;;;4081:15:::1;4058:20;:38;4049:48;;;::::0;::::1;;4105:19;:42:::0;3959:196::o;4951:107::-;-1:-1:-1;;;;;5032:18:0;5008:4;5032:18;;;:9;:18;;;;;;;4951:107::o;11053:1144::-;11206:9;11235:12;11226:35;;;;;-1:-1:-1;;;11226:35:0;;;;;;;;;;;;-1:-1:-1;;;11226:35:0;;;;;;;;;;;;;;;11272:17;11327:10;11272:17;11432:27;:25;:27::i;:::-;11402:57;-1:-1:-1;11472:14:0;11489:53;11402:57;11489:25;:8;7647;11489:12;:25::i;:::-;:29;;:53::i;:::-;-1:-1:-1;;;;;11569:15:0;;;;;;:9;:15;;;;;;11472:70;;-1:-1:-1;11557:27:0;;11553:233;;;-1:-1:-1;;;;;;11622:15:0;;;;;;:9;:15;;;;;;11667:107;7647:8;11702:37;11622:15;11716:22;11702:13;:37::i;:::-;:53;;;;;11667:8;;11702:53;;11667:12;:107::i;:::-;11652:122;;11553:233;-1:-1:-1;;;;;11874:15:0;;;;;;:9;:15;;;;;;:30;;11894:9;11874:19;:30::i;:::-;-1:-1:-1;;;;;11856:15:0;;;;;;:9;:15;;;;;;;;:48;;;;11915:32;;-1:-1:-1;;;11915:32:0;;;;;;;;;;;;;;;;;3051:42;;11915:15;;:32;;;;;11856:15;;11915:32;;;;;;;;;3051:42;11915:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12041:7:0;12026:22;;12022:97;;;12080:27;;-1:-1:-1;;;;;12080:13:0;;;:27;;;;;12094:12;;12080:27;;;;12094:12;12080:13;:27;;;;;;;;;;;;;;;;;;;;;12022:97;-1:-1:-1;;;;;12134:55:0;;;12151:9;12162:26;:8;12175:12;12162;:26::i;:::-;12134:55;;;;;;;;;;;;;;;;;;;;;;11053:1144;;;;;:::o;9286:637::-;9405:1;9391:11;:15;9382:41;;;;;-1:-1:-1;;;9382:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9434:20;9457:10;9434:33;;9529:14;9546:58;9591:12;;9546:40;9562:23;:21;:23::i;:::-;9546:11;;:15;:40::i;:58::-;9529:75;;9649:9;9624:21;:34;;9615:62;;;;;-1:-1:-1;;;9615:62:0;;;;;;;;;;;;-1:-1:-1;;;9615:62:0;;;;;;;;;;;;;;;9744:24;9750:4;9756:11;9744:5;:24::i;:::-;9835;;-1:-1:-1;;;;;9835:13:0;;;:24;;;;;9849:9;;9835:24;;;;9849:9;9835:13;:24;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9875:40:0;;;;;;;;;;;;;;-1:-1:-1;;;;;9875:40:0;;;;;;;;;;;9286:637;;;:::o;12437:2674::-;-1:-1:-1;;;;;12635:18:0;;12643:10;12635:18;;12634:221;;-1:-1:-1;12807:19:0;;12777:26;;12757:47;;:15;;:19;:47::i;:::-;:69;12756:98;;;;-1:-1:-1;12832:7:0;;-1:-1:-1;;;;;12832:7:0;12843:10;12832:21;12756:98;12611:264;;;;;-1:-1:-1;;;12611:264:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12915:15:0;;;;;;:9;:15;;;;;;12900:30;;12896:79;;;-1:-1:-1;;;;;12960:15:0;;;;;;:9;:15;;;;;;;-1:-1:-1;12896:79:0;13003:12;12990:10;:25;12986:69;;;13043:12;13030:25;;12986:69;13135:9;13119:13;;;7647:8;13335:45;13352:27;:25;:27::i;:::-;13335:12;;:16;:45::i;:::-;:61;;;;;;13307:89;;13434:8;13411:20;:31;13407:248;;;13537:5;13474:60;13520:13;;13512:5;:21;13498:8;13475:20;:31;13474:37;;:60;;;;:::i;:::-;:68;;;;;;13459:83;;13407:248;;;13623:20;13612:8;:31;13600:43;;13407:248;13708:12;;13766:14;;13762:508;;13823:31;;;-1:-1:-1;;;13823:31:0;;13848:4;13823:31;;;;;;13806:14;;3051:42;;13823:16;;:31;;;;;;;;;;;;;;;3051:42;13823:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13823:31:0;13936:70;;;;;;;;;;;;;;;;;;;;;;;;;;13823:31;;-1:-1:-1;13886:21:0;;3051:42;;13936:16;;:70;;;;;13869:14;;13936:70;;;;;;;13869:14;3051:42;13936:70;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14066:31:0;;;-1:-1:-1;;;14066:31:0;;14091:4;14066:31;;;;;;14052:58;;-1:-1:-1;3051:42:0;;-1:-1:-1;14066:16:0;;:31;;;;;;;;;;;;;;;3051:42;14066:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14066:31:0;14052:58;;;;;;;;;;;;;14066:31;14052:58;;;:9;;14066:31;14052:13;:58::i;:::-;14042:68;;14167:50;14195:9;14167:50;;;;;;;;;;;;;;;;;14168:21;14167:27;;:50;;;;;:::i;:::-;14157:60;;13762:508;;;14355:16;;14351:235;;14417:42;;;;;;;;;;;;-1:-1:-1;;;14417:42:0;;;;;;:7;;14429:12;;14417:11;:42::i;:::-;14405:54;;14351:235;;;14552:22;:9;14566:7;14552:13;:22::i;:::-;14540:34;;14351:235;14659:50;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14659:15:0;;-1:-1:-1;14659:15:0;;;:9;:15;;;;;;;;:50;;14679:12;;14659:19;:50::i;:::-;-1:-1:-1;;;;;14641:15:0;;;;;;:9;:15;;;;;:68;14783:22;;;14779:100;;;14822:45;;;-1:-1:-1;;;14822:45:0;;-1:-1:-1;;;;;14822:45:0;;;;;;14844:22;;;14822:45;;;;;;3051:42;;14822:15;;:45;;;;;;;;;;;;;;-1:-1:-1;3051:42:0;14822:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14779:100:0;14951:7;14939:9;:19;14935:91;;;14990:24;;-1:-1:-1;;;;;14990:13:0;;;:24;;;;;15004:9;;14990:24;;;;15004:9;14990:13;:24;;;;;;;;;;;;;;;;;;;;;14935:91;15051:52;;;;;;;;;;;;;;-1:-1:-1;;;;;15051:52:0;;;;;;;;;;;12437:2674;;;;;;;;;;;:::o;1861:87::-;1933:7;1926:14;;;;;;;;-1:-1:-1;;1926:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1900:13;;1926:14;;1933:7;;1926:14;;1933:7;1926:14;;;;;;;;;;;;;;;;;;;;;;;;15123:2264;15294:19;;15276:15;:37;15267:61;;;;;-1:-1:-1;;;15267:61:0;;;;;;;;;;;;-1:-1:-1;;;15267:61:0;;;;;;;;;;;;;;;15661:31;;;-1:-1:-1;;;15661:31:0;;15686:4;15661:31;;;;;;15407:10;;15505:9;;15384:20;;;;;;3051:42;;15661:16;;:31;;;;;;;;;;;;;;;3051:42;15661:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15661:31:0;;-1:-1:-1;15724:21:0;15707:14;15846:26;:8;15859:12;15846;:26::i;:::-;15825:47;;15923:13;15910:9;:26;;15901:54;;;;;-1:-1:-1;;;15901:54:0;;;;;;;;;;;;-1:-1:-1;;;15901:54:0;;;;;;;;;;;;;;;3051:42;-1:-1:-1;;;;;15970:15:0;;15994:13;16010:12;16024:21;15970:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16091:60;16129:9;16091:60;;;;;;;;;;;;;;;;;3051:42;-1:-1:-1;;;;;16092:16:0;;16117:4;16092:31;;;;;;;;;;;;;-1:-1:-1;;;;;16092:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16092:31:0;;16091:60;:37;:60::i;:::-;16081:70;;16208:48;16222:21;16208:48;;;;;;;;;;;;;;;;;:9;:13;;:48;;;;;:::i;:::-;16198:58;;15123:2264;;;16412:7;16399:10;:20;16395:73;;;16449:7;16436:20;;16395:73;16478:18;7647:8;16499:43;16514:27;:25;:27::i;16499:43::-;:59;;;;;;16478:80;;16627:14;16644:58;16676:7;16644:58;;;;;;;;;;;;;;;;;:27;16657:13;16644:8;:12;;:27;;;;:::i;:::-;:31;:58;:31;:58::i;:::-;16627:75;;16753:71;16801:5;16767:31;16784:13;;16767:12;:16;;:31;;;;:::i;:::-;:39;;;;;;16753:71;;;;;;;;;;;;;-1:-1:-1;;;16753:71:0;;;:9;:13;;:71;;;;;:::i;:::-;-1:-1:-1;;;;;16896:15:0;;;;;;:9;:15;;;;;;16741:83;;-1:-1:-1;16896:31:0;;16916:10;16896:19;:31::i;:::-;-1:-1:-1;;;;;16878:15:0;;;;;;:9;:15;;;;;:49;17001:20;;;16997:96;;;17038:43;;;-1:-1:-1;;;17038:43:0;;-1:-1:-1;;;;;17038:43:0;;;;;;17060:20;;;17038:43;;;;;;3051:42;;17038:15;;:43;;;;;;;;;;;;;;-1:-1:-1;3051:42:0;17038:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16997:96:0;17165:7;17153:9;:19;17149:164;;;17238:9;17213:21;:34;;17204:58;;;;;-1:-1:-1;;;17204:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17277:24;;-1:-1:-1;;;;;17277:13:0;;;:24;;;;;17291:9;;17277:24;;;;17291:9;17277:13;:24;;;;;;;;;;;;;;;;;;;;;17149:164;17338:41;;;;;;;;;;;;;;-1:-1:-1;;;;;17338:41:0;;;;;;;;;;;15123:2264;;;;;;;;;;:::o;5064:155::-;5130:4;5147:42;5157:12;:10;:12::i;:::-;5171:9;5182:6;5147:9;:42::i;8208:292::-;8262:4;8301:21;8262:4;7647:8;8360:66;8398:27;:25;:27::i;:::-;8361:31;;;-1:-1:-1;;;8361:31:0;;8386:4;8361:31;;;;;;3051:42;;8361:16;;:31;;;;;;;;;;;;;;3051:42;8361:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8361:31:0;;8360:37;:66::i;:::-;:82;;;;;;;-1:-1:-1;8470:22:0;:8;8360:82;8470:12;:22::i;:::-;8463:29;;;;8208:292;:::o;10027:42::-;;;;;;;;;;;;;:::o;3552:22::-;;;-1:-1:-1;;;;;3552:22:0;;:::o;3100:35::-;;;;:::o;3299:30::-;;;;:::o;8508:766::-;8670:10;8707:9;8736:12;8727:35;;;;;-1:-1:-1;;;8727:35:0;;;;;;;;;;;;-1:-1:-1;;;8727:35:0;;;;;;;;;;;;;;;8839:16;8874:12;;8890:1;8874:17;8870:247;;;-1:-1:-1;8923:8:0;8870:247;;;9036:69;9067:37;9095:8;9067:23;:21;:23::i;:::-;:27;;:37::i;:::-;9049:12;;9036:26;;:8;;:12;:26::i;:69::-;9022:83;;8870:247;9189:24;9195:4;9201:11;9189:5;:24::i;:::-;9229:37;;;;;;;;;;;;;;-1:-1:-1;;;;;9229:37:0;;;;;;;;;;;8508:766;;;:::o;10232:809::-;10338:1;10327:8;:12;10318:35;;;;;-1:-1:-1;;;10318:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10391:19;;10373:15;:37;10364:61;;;;;-1:-1:-1;;;10364:61:0;;;;;;;;;;;;-1:-1:-1;;;10364:61:0;;;;;;;;;;;;;;;10496:10;10473:20;7647:8;10585:41;10598:27;:25;:27::i;:::-;10585:8;;:12;:41::i;:::-;:57;;;;;;10568:74;;10687:9;10662:21;:34;;10653:62;;;;;-1:-1:-1;;;10653:62:0;;;;;;;;;;;;-1:-1:-1;;;10653:62:0;;;;;;;;;;;;;;;10782:50;;;;;;-1:-1:-1;;;;;10782:50:0;;;;;;10816:4;10782:50;;;;;;;;;;;;3051:42;;10782:19;;:50;;;;;;;;;;;;;;-1:-1:-1;3051:42:0;10782:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;10862:15:0;;;;;;:9;10782:50;10862:15;;;;;:29;;10882:8;10862:19;:29::i;:::-;-1:-1:-1;;;;;10844:15:0;;;;;;:9;:15;;;;;;:47;;;;10958:24;;10844:15;;10958:24;;;;;10972:9;;10958:24;10844:15;10958:24;10972:9;10844:15;10958:24;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10998:35:0;;;;;;;;;;;;;;-1:-1:-1;;;;;10998:35:0;;;;;;;;;;;10232:809;;;:::o;6116:131::-;-1:-1:-1;;;;;6212:18:0;;;6188:4;6212:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6116:131::o;4428:98::-;4508:10;4428:98;:::o;6408:337::-;-1:-1:-1;;;;;6500:19:0;;6491:69;;;;-1:-1:-1;;;6491:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6580:21:0;;6571:69;;;;-1:-1:-1;;;6571:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6653:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6705:32;;;;;;;;;;;;;;;;;6408:337;;;:::o;5532:480::-;-1:-1:-1;;;;;5628:20:0;;5619:71;;;;-1:-1:-1;;;5619:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5710:23:0;;5701:72;;;;-1:-1:-1;;;5701:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5806:71;5828:6;5806:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5806:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;5786:17:0;;;;;;;:9;:17;;;;;;:91;;;;5921:20;;;;;;;:32;;5946:6;5921:24;:32::i;:::-;-1:-1:-1;;;;;5898:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;5969:35;;;;;;;5898:20;;5969:35;;;;;;;;;;;;;5532:480;;;:::o;894:188::-;980:7;1017:12;1009:6;;;;1000:30;;;;-1:-1:-1;;;1000:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1050:5:0;;;894:188::o;7662:298::-;7722:4;7744:16;7763:54;3051:42;-1:-1:-1;;;;;7794:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7794:22:0;7764:24;;;;;;;;3051:42;;7764:22;;:24;;;;;7794:22;;7764:24;;;;;;;3051:42;7764:24;;;;;;;;;;7763:54;7744:73;;7828:17;3051:42;-1:-1:-1;;;;;7848:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7848:20:0;;-1:-1:-1;7888:64:0;7848:20;7888:46;7848:20;7888:46;7647:8;7904:11;1092:219;1150:7;1174:6;1170:47;;-1:-1:-1;1204:1:0;1197:8;;1170:47;1239:5;;;1243:1;1239;:5;:1;1264:5;;;;;:10;1255:29;;;;;-1:-1:-1;;;1255:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1302:1;1092:219;-1:-1:-1;;;1092:219:0:o;1317:157::-;1375:7;1408:1;1404;:5;1395:24;;;;;-1:-1:-1;;;1395:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1430:9;1446:1;1442;:5;;;;;;;1317:157;-1:-1:-1;;;;1317:157:0:o;730:158::-;788:7;822:1;817;:6;;808:25;;;;;-1:-1:-1;;;808:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;856:5:0;;;730:158::o;7163:356::-;-1:-1:-1;;;;;7237:21:0;;7228:68;;;;-1:-1:-1;;;7228:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7338;7361:6;7338:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7338:18:0;;;;;;:9;:18;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;7317:18:0;;;;;;:9;:18;;;;;:89;7432:12;;:24;;7449:6;7432:16;:24::i;:::-;7417:12;:39;7474:37;;;;;;;;7500:1;;-1:-1:-1;;;;;7474:37:0;;;;;;;;;;;;7163:356;;:::o;566:158::-;624:7;656:5;;;681:6;;;;672:25;;;;;-1:-1:-1;;;672:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;6849:308;-1:-1:-1;;;;;6923:21:0;;6914:66;;;;;-1:-1:-1;;;6914:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7014:18:0;;;;;;:9;:18;;;;;;:30;;7037:6;7014:22;:30::i;:::-;-1:-1:-1;;;;;6993:18:0;;;;;;:9;:18;;;;;:51;7070:12;;:24;;7087:6;7070:16;:24::i;:::-;7055:12;:39;7112:37;;;;;;;;-1:-1:-1;;;;;7112:37:0;;;7129:1;;7112:37;;;;;;;;;6849:308;;:::o
Swarm Source
ipfs://c5a926da78506474e82c8b52a22f26414e5780fe9150d7e446c639d81942f635
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.