Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Any ERC... | 11424069 | 1413 days ago | IN | 0 ETH | 0.0015565 | ||||
Claim Reward | 11423805 | 1414 days ago | IN | 0 ETH | 0.00431212 | ||||
Stake | 11423589 | 1414 days ago | IN | 0 ETH | 0.00339504 | ||||
Update Score Eth | 11423045 | 1414 days ago | IN | 0 ETH | 0.00047894 | ||||
Old Stake | 11423006 | 1414 days ago | IN | 0 ETH | 0.00709397 | ||||
0x60806040 | 11422916 | 1414 days ago | IN | 0 ETH | 0.08648997 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
PRDZstaking
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-12-10 */ /** *Submitted for verification at Etherscan.io on 2020-12-10 */ pragma solidity 0.6.12; // SPDX-License-Identifier: No License /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.0.0, only sets of type `address` (`AddressSet`) and `uint256` * (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(value))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(value))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(value))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint256(_at(set._inner, index))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } interface Token { function transferFrom(address, address, uint) external returns (bool); function transfer(address, uint) external returns (bool); } contract PRDZstaking is Ownable { using SafeMath for uint; using EnumerableSet for EnumerableSet.AddressSet; event RewardsTransferred(address holder, uint amount); // PRDZ token contract address address public constant tokenAddress = 0x4e085036A1b732cBe4FfB1C12ddfDd87E7C3664d; // reward rate 80.00% per year uint public constant rewardRate = 8000; uint public constant scoreRate = 1000; uint public constant rewardInterval = 365 days; uint public constant scoreInterval = 3 days; uint public scoreEth = 11340; // unstaking fee 2.00 percent uint public constant unstakingFeeRate = 250; // unstaking possible after 72 hours uint public constant cliffTime = 72 hours; uint public totalClaimedRewards = 0; uint public totalStakedToken = 0; EnumerableSet.AddressSet private holders; mapping (address => uint) public depositedTokens; mapping (address => uint) public stakingTime; mapping (address => uint) public lastClaimedTime; mapping (address => uint) public totalEarnedTokens; mapping (address => uint) public totalScore; mapping (address => uint) public lastScoreTime; function updateAccount(address account) private { uint pendingDivs = getPendingDivs(account); if (pendingDivs > 0) { require(Token(tokenAddress).transfer(account, pendingDivs), "Could not transfer tokens."); totalEarnedTokens[account] = totalEarnedTokens[account].add(pendingDivs); totalClaimedRewards = totalClaimedRewards.add(pendingDivs); emit RewardsTransferred(account, pendingDivs); } lastClaimedTime[account] = now; } function updateScore(address _holder) private { lastScoreTime[_holder] = now ; } function getScoreEth(address _holder) public view returns (uint) { uint timeDiff = 0 ; if(lastScoreTime[_holder] > 0){ timeDiff = now.sub(lastScoreTime[_holder]).div(2); } uint stakedAmount = depositedTokens[_holder]; uint score = stakedAmount .mul(scoreRate) .mul(timeDiff) .div(scoreInterval) .div(1e4); uint eth = score.div(scoreEth); return eth; } function getStakingScore(address _holder) public view returns (uint) { uint timeDiff = 0 ; if(lastScoreTime[_holder] > 0){ timeDiff = now.sub(lastScoreTime[_holder]).div(2); } uint stakedAmount = depositedTokens[_holder]; uint score = stakedAmount .mul(scoreRate) .mul(timeDiff) .div(scoreInterval) .div(1e4); return score; } function getPendingDivs(address _holder) public view returns (uint) { if (!holders.contains(_holder)) return 0; if (depositedTokens[_holder] == 0) return 0; uint timeDiff = now.sub(lastClaimedTime[_holder]); uint stakedAmount = depositedTokens[_holder]; uint pendingDivs = stakedAmount .mul(rewardRate) .mul(timeDiff) .div(rewardInterval) .div(1e4); return pendingDivs; } function getNumberOfHolders() public view returns (uint) { return holders.length(); } function getTotalStaked() public view returns (uint) { return totalStakedToken; } function stake(uint amountToStake) public { require(amountToStake > 0, "Cannot deposit 0 Tokens"); require(Token(tokenAddress).transferFrom(msg.sender, address(this), amountToStake), "Insufficient Token Allowance"); updateAccount(msg.sender); updateScore(msg.sender); depositedTokens[msg.sender] = depositedTokens[msg.sender].add(amountToStake); totalStakedToken = totalStakedToken.add(amountToStake); if (!holders.contains(msg.sender)) { holders.add(msg.sender); stakingTime[msg.sender] = now; } } function OldStake(address _holder , uint amountToStake , uint stakeTime) public onlyOwner { require(amountToStake > 0, "Cannot deposit 0 Tokens"); require(Token(tokenAddress).transferFrom(msg.sender, address(this), amountToStake), "Insufficient Token Allowance"); lastClaimedTime[_holder] = stakeTime; lastScoreTime[_holder] = stakeTime ; totalStakedToken = totalStakedToken.add(amountToStake); depositedTokens[_holder] = depositedTokens[_holder].add(amountToStake); if (!holders.contains(_holder)) { holders.add(_holder); stakingTime[_holder] = stakeTime; } } function unstake(uint amountToWithdraw) public { require(depositedTokens[msg.sender] >= amountToWithdraw, "Invalid amount to withdraw"); updateAccount(msg.sender); uint fee = amountToWithdraw.mul(unstakingFeeRate).div(1e4); uint amountAfterFee = amountToWithdraw.sub(fee); require(Token(tokenAddress).transfer(owner, fee), "Could not transfer withdraw fee."); require(Token(tokenAddress).transfer(msg.sender, amountAfterFee), "Could not transfer tokens."); totalStakedToken = totalStakedToken.sub(amountAfterFee); uint timeDiff = 0 ; if(lastScoreTime[msg.sender] > 0){ timeDiff = now.sub(lastScoreTime[msg.sender]).div(2); } uint score = amountAfterFee .mul(scoreRate) .mul(timeDiff) .div(scoreInterval) .div(1e4); uint eth = score.div(scoreEth); msg.sender.transfer(eth); lastScoreTime[msg.sender] = now; depositedTokens[msg.sender] = depositedTokens[msg.sender].sub(amountToWithdraw); if (holders.contains(msg.sender) && depositedTokens[msg.sender] == 0) { holders.remove(msg.sender); } } function claimReward() public { updateAccount(msg.sender); } function withdraw() public onlyOwner{ msg.sender.transfer(address(this).balance); } function claimScoreEth() public { uint timeDiff = 0 ; if(lastScoreTime[msg.sender] > 0){ timeDiff = now.sub(lastScoreTime[msg.sender]).div(2); } uint stakedAmount = depositedTokens[msg.sender]; uint score = stakedAmount .mul(scoreRate) .mul(timeDiff) .div(scoreInterval) .div(1e4); uint eth = score.div(scoreEth); msg.sender.transfer(eth); lastScoreTime[msg.sender] = now; } uint private constant stakingAndDaoTokens = 84000000000000000000000; function getStakingAndDaoAmount() public view returns (uint) { if (totalClaimedRewards >= stakingAndDaoTokens) { return 0; } uint remaining = stakingAndDaoTokens.sub(totalClaimedRewards); return remaining; } function deposit() payable public { // nothing to do! } function updateScoreEth(uint _amount) public onlyOwner { scoreEth = _amount ; } // function to allow admin to claim *other* ERC20 tokens sent to this contract (by mistake) function transferAnyERC20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner { if (_tokenAddr == tokenAddress) { if (_amount > getStakingAndDaoAmount()) { revert(); } totalClaimedRewards = totalClaimedRewards.add(_amount); } Token(_tokenAddr).transfer(_to, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"},{"internalType":"uint256","name":"amountToStake","type":"uint256"},{"internalType":"uint256","name":"stakeTime","type":"uint256"}],"name":"OldStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimScoreEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cliffTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getPendingDivs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getScoreEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingAndDaoAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getStakingScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastScoreTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scoreEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scoreInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scoreRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToStake","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalEarnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakedToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferAnyERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToWithdraw","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakingFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateScoreEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052612c4c6001556000600255600060035534801561002057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061289a806100706000396000f3fe6080604052600436106101ee5760003560e01c806393bcb5a31161010d578063c326bf4f116100a0578063d0e30db01161006f578063d0e30db014610921578063d578ceab1461092b578063d816c7d514610956578063f2fde38b14610981578063f3f91fa0146109d2576101ee565b8063c326bf4f1461083b578063c7c09074146108a0578063cb6d8ee6146108cb578063ce40453d146108f6576101ee565b8063a84e9dee116100dc578063a84e9dee14610759578063a967b72c146107be578063b88a802f146107f9578063bec4de3f14610810576101ee565b806393bcb5a31461066157806398896d10146106785780639d76ea58146106dd578063a694fc3a1461071e576101ee565b80634b3d36c7116101855780637b0a47ee116101545780637b0a47ee1461052b57806384eda6621461055657806387285587146105bb5780638da5cb5b14610620576101ee565b80634b3d36c714610381578063583d42fd146103e65780636270cd181461044b5780636a395ccb146104b0576101ee565b8063308feec3116101c1578063308feec3146102af57806335d8f62f146102da5780633a5ec6531461033f5780633ccfd60b1461036a576101ee565b80630917e776146101f35780630f1a64441461021e578063268cab49146102495780632e17de7814610274575b600080fd5b3480156101ff57600080fd5b50610208610a37565b6040518082815260200191505060405180910390f35b34801561022a57600080fd5b50610233610a41565b6040518082815260200191505060405180910390f35b34801561025557600080fd5b5061025e610a48565b6040518082815260200191505060405180910390f35b34801561028057600080fd5b506102ad6004803603602081101561029757600080fd5b8101908080359060200190929190505050610a91565b005b3480156102bb57600080fd5b506102c46110f1565b6040518082815260200191505060405180910390f35b3480156102e657600080fd5b50610329600480360360208110156102fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611102565b6040518082815260200191505060405180910390f35b34801561034b57600080fd5b50610354611276565b6040518082815260200191505060405180910390f35b34801561037657600080fd5b5061037f61127d565b005b34801561038d57600080fd5b506103e4600480360360608110156103a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919050505061131e565b005b3480156103f257600080fd5b506104356004803603602081101561040957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116eb565b6040518082815260200191505060405180910390f35b34801561045757600080fd5b5061049a6004803603602081101561046e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611703565b6040518082815260200191505060405180910390f35b3480156104bc57600080fd5b50610529600480360360608110156104d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061171b565b005b34801561053757600080fd5b5061054061189d565b6040518082815260200191505060405180910390f35b34801561056257600080fd5b506105a56004803603602081101561057957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118a3565b6040518082815260200191505060405180910390f35b3480156105c757600080fd5b5061060a600480360360208110156105de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118bb565b6040518082815260200191505060405180910390f35b34801561062c57600080fd5b50610635611a15565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561066d57600080fd5b50610676611a39565b005b34801561068457600080fd5b506106c76004803603602081101561069b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c2c565b6040518082815260200191505060405180910390f35b3480156106e957600080fd5b506106f2611d9b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072a57600080fd5b506107576004803603602081101561074157600080fd5b8101908080359060200190929190505050611db3565b005b34801561076557600080fd5b506107a86004803603602081101561077c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120b0565b6040518082815260200191505060405180910390f35b3480156107ca57600080fd5b506107f7600480360360208110156107e157600080fd5b81019080803590602001909291905050506120c8565b005b34801561080557600080fd5b5061080e61212a565b005b34801561081c57600080fd5b50610825612135565b6040518082815260200191505060405180910390f35b34801561084757600080fd5b5061088a6004803603602081101561085e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061213d565b6040518082815260200191505060405180910390f35b3480156108ac57600080fd5b506108b5612155565b6040518082815260200191505060405180910390f35b3480156108d757600080fd5b506108e061215b565b6040518082815260200191505060405180910390f35b34801561090257600080fd5b5061090b612161565b6040518082815260200191505060405180910390f35b610929612167565b005b34801561093757600080fd5b50610940612169565b6040518082815260200191505060405180910390f35b34801561096257600080fd5b5061096b61216f565b6040518082815260200191505060405180910390f35b34801561098d57600080fd5b506109d0600480360360208110156109a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612174565b005b3480156109de57600080fd5b50610a21600480360360208110156109f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122c3565b6040518082815260200191505060405180910390f35b6000600354905090565b6203f48081565b60006911c9a62d04ed0c80000060025410610a665760009050610a8e565b6000610a876002546911c9a62d04ed0c8000006122db90919063ffffffff16565b9050809150505b90565b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610b46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c696420616d6f756e7420746f20776974686472617700000000000081525060200191505060405180910390fd5b610b4f336122f2565b6000610b79612710610b6b60fa8561258890919063ffffffff16565b6125b790919063ffffffff16565b90506000610b9082846122db90919063ffffffff16565b9050734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c3757600080fd5b505af1158015610c4b573d6000803e3d6000fd5b505050506040513d6020811015610c6157600080fd5b8101908080519060200190929190505050610ce4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f756c64206e6f74207472616e73666572207769746864726177206665652e81525060200191505060405180910390fd5b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610d6957600080fd5b505af1158015610d7d573d6000803e3d6000fd5b505050506040513d6020811015610d9357600080fd5b8101908080519060200190929190505050610e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b610e2b816003546122db90919063ffffffff16565b600381905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610ee257610edf6002610ed1600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122db90919063ffffffff16565b6125b790919063ffffffff16565b90505b6000610f34612710610f266203f480610f1886610f0a6103e88a61258890919063ffffffff16565b61258890919063ffffffff16565b6125b790919063ffffffff16565b6125b790919063ffffffff16565b90506000610f4d600154836125b790919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f95573d6000803e3d6000fd5b5042600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061102c86600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122db90919063ffffffff16565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110833360046125d090919063ffffffff16565b80156110ce57506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156110e9576110e733600461260090919063ffffffff16565b505b505050505050565b60006110fd6004612630565b905090565b600080600090506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156111b9576111b660026111a8600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122db90919063ffffffff16565b6125b790919063ffffffff16565b90505b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600061124f6127106112416203f480611233876112256103e88961258890919063ffffffff16565b61258890919063ffffffff16565b6125b790919063ffffffff16565b6125b790919063ffffffff16565b90506000611268600154836125b790919063ffffffff16565b905080945050505050919050565b6203f48081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112d557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561131b573d6000803e3d6000fd5b50565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461137657600080fd5b600082116113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f74206465706f736974203020546f6b656e7300000000000000000081525060200191505060405180910390fd5b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561148f57600080fd5b505af11580156114a3573d6000803e3d6000fd5b505050506040513d60208110156114b957600080fd5b810190808051906020019092919050505061153c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496e73756666696369656e7420546f6b656e20416c6c6f77616e63650000000081525060200191505060405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115d98260035461264590919063ffffffff16565b60038190555061163182600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264590919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116888360046125d090919063ffffffff16565b6116e6576116a083600461266190919063ffffffff16565b5080600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60076020528060005260406000206000915090505481565b60096020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461177357600080fd5b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117eb576117c3610a48565b8111156117cf57600080fd5b6117e48160025461264590919063ffffffff16565b6002819055505b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561185c57600080fd5b505af1158015611870573d6000803e3d6000fd5b505050506040513d602081101561188657600080fd5b810190808051906020019092919050505050505050565b611f4081565b600a6020528060005260406000206000915090505481565b600080600090506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156119725761196f6002611961600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122db90919063ffffffff16565b6125b790919063ffffffff16565b90505b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611a086127106119fa6203f4806119ec876119de6103e88961258890919063ffffffff16565b61258890919063ffffffff16565b6125b790919063ffffffff16565b6125b790919063ffffffff16565b9050809350505050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611aea57611ae76002611ad9600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122db90919063ffffffff16565b6125b790919063ffffffff16565b90505b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611b80612710611b726203f480611b6487611b566103e88961258890919063ffffffff16565b61258890919063ffffffff16565b6125b790919063ffffffff16565b6125b790919063ffffffff16565b90506000611b99600154836125b790919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611be1573d6000803e3d6000fd5b5042600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b6000611c428260046125d090919063ffffffff16565b611c4f5760009050611d96565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611ca05760009050611d96565b6000611cf4600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122db90919063ffffffff16565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611d8d612710611d7f6301e13380611d7187611d63611f408961258890919063ffffffff16565b61258890919063ffffffff16565b6125b790919063ffffffff16565b6125b790919063ffffffff16565b90508093505050505b919050565b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d81565b60008111611e29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f74206465706f736974203020546f6b656e7300000000000000000081525060200191505060405180910390fd5b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611ecc57600080fd5b505af1158015611ee0573d6000803e3d6000fd5b505050506040513d6020811015611ef657600080fd5b8101908080519060200190929190505050611f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496e73756666696369656e7420546f6b656e20416c6c6f77616e63650000000081525060200191505060405180910390fd5b611f82336122f2565b611f8b33612691565b611fdd81600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264590919063ffffffff16565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120358160035461264590919063ffffffff16565b60038190555061204f3360046125d090919063ffffffff16565b6120ad5761206733600461266190919063ffffffff16565b5042600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50565b600b6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461212057600080fd5b8060018190555050565b612133336122f2565b565b6301e1338081565b60066020528060005260406000206000915090505481565b6103e881565b60035481565b60015481565b565b60025481565b60fa81565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121cc57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561220657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528060005260406000206000915090505481565b6000828211156122e757fe5b818303905092915050565b60006122fd82611c2c565b9050600081111561254057734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561238d57600080fd5b505af11580156123a1573d6000803e3d6000fd5b505050506040513d60208110156123b757600080fd5b810190808051906020019092919050505061243a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b61248c81600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264590919063ffffffff16565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124e48160025461264590919063ffffffff16565b6002819055507f586b2e63a21a7a4e1402e36f48ce10cb1ec94684fea254c186b76d1f98ecf1308282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b42600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600080828402905060008414806125a75750828482816125a457fe5b04145b6125ad57fe5b8091505092915050565b6000808284816125c357fe5b0490508091505092915050565b60006125f8836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6126d8565b905092915050565b6000612628836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6126fb565b905092915050565b600061263e826000016127e3565b9050919050565b60008082840190508381101561265757fe5b8091505092915050565b6000612689836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6127f4565b905092915050565b42600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001016000848152602001908152602001600020549050600081146127d7576000600182039050600060018660000180549050039050600086600001828154811061274657fe5b906000526020600020015490508087600001848154811061276357fe5b906000526020600020018190555060018301876001016000838152602001908152602001600020819055508660000180548061279b57fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506127dd565b60009150505b92915050565b600081600001805490509050919050565b600061280083836126d8565b61285957826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061285e565b600090505b9291505056fea2646970667358221220fa4b5faa56fce973139bf5be274feba6155566360ae7ef66551f6bdb9e95931d64736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c806393bcb5a31161010d578063c326bf4f116100a0578063d0e30db01161006f578063d0e30db014610921578063d578ceab1461092b578063d816c7d514610956578063f2fde38b14610981578063f3f91fa0146109d2576101ee565b8063c326bf4f1461083b578063c7c09074146108a0578063cb6d8ee6146108cb578063ce40453d146108f6576101ee565b8063a84e9dee116100dc578063a84e9dee14610759578063a967b72c146107be578063b88a802f146107f9578063bec4de3f14610810576101ee565b806393bcb5a31461066157806398896d10146106785780639d76ea58146106dd578063a694fc3a1461071e576101ee565b80634b3d36c7116101855780637b0a47ee116101545780637b0a47ee1461052b57806384eda6621461055657806387285587146105bb5780638da5cb5b14610620576101ee565b80634b3d36c714610381578063583d42fd146103e65780636270cd181461044b5780636a395ccb146104b0576101ee565b8063308feec3116101c1578063308feec3146102af57806335d8f62f146102da5780633a5ec6531461033f5780633ccfd60b1461036a576101ee565b80630917e776146101f35780630f1a64441461021e578063268cab49146102495780632e17de7814610274575b600080fd5b3480156101ff57600080fd5b50610208610a37565b6040518082815260200191505060405180910390f35b34801561022a57600080fd5b50610233610a41565b6040518082815260200191505060405180910390f35b34801561025557600080fd5b5061025e610a48565b6040518082815260200191505060405180910390f35b34801561028057600080fd5b506102ad6004803603602081101561029757600080fd5b8101908080359060200190929190505050610a91565b005b3480156102bb57600080fd5b506102c46110f1565b6040518082815260200191505060405180910390f35b3480156102e657600080fd5b50610329600480360360208110156102fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611102565b6040518082815260200191505060405180910390f35b34801561034b57600080fd5b50610354611276565b6040518082815260200191505060405180910390f35b34801561037657600080fd5b5061037f61127d565b005b34801561038d57600080fd5b506103e4600480360360608110156103a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919050505061131e565b005b3480156103f257600080fd5b506104356004803603602081101561040957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116eb565b6040518082815260200191505060405180910390f35b34801561045757600080fd5b5061049a6004803603602081101561046e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611703565b6040518082815260200191505060405180910390f35b3480156104bc57600080fd5b50610529600480360360608110156104d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061171b565b005b34801561053757600080fd5b5061054061189d565b6040518082815260200191505060405180910390f35b34801561056257600080fd5b506105a56004803603602081101561057957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118a3565b6040518082815260200191505060405180910390f35b3480156105c757600080fd5b5061060a600480360360208110156105de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118bb565b6040518082815260200191505060405180910390f35b34801561062c57600080fd5b50610635611a15565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561066d57600080fd5b50610676611a39565b005b34801561068457600080fd5b506106c76004803603602081101561069b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c2c565b6040518082815260200191505060405180910390f35b3480156106e957600080fd5b506106f2611d9b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072a57600080fd5b506107576004803603602081101561074157600080fd5b8101908080359060200190929190505050611db3565b005b34801561076557600080fd5b506107a86004803603602081101561077c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120b0565b6040518082815260200191505060405180910390f35b3480156107ca57600080fd5b506107f7600480360360208110156107e157600080fd5b81019080803590602001909291905050506120c8565b005b34801561080557600080fd5b5061080e61212a565b005b34801561081c57600080fd5b50610825612135565b6040518082815260200191505060405180910390f35b34801561084757600080fd5b5061088a6004803603602081101561085e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061213d565b6040518082815260200191505060405180910390f35b3480156108ac57600080fd5b506108b5612155565b6040518082815260200191505060405180910390f35b3480156108d757600080fd5b506108e061215b565b6040518082815260200191505060405180910390f35b34801561090257600080fd5b5061090b612161565b6040518082815260200191505060405180910390f35b610929612167565b005b34801561093757600080fd5b50610940612169565b6040518082815260200191505060405180910390f35b34801561096257600080fd5b5061096b61216f565b6040518082815260200191505060405180910390f35b34801561098d57600080fd5b506109d0600480360360208110156109a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612174565b005b3480156109de57600080fd5b50610a21600480360360208110156109f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122c3565b6040518082815260200191505060405180910390f35b6000600354905090565b6203f48081565b60006911c9a62d04ed0c80000060025410610a665760009050610a8e565b6000610a876002546911c9a62d04ed0c8000006122db90919063ffffffff16565b9050809150505b90565b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610b46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c696420616d6f756e7420746f20776974686472617700000000000081525060200191505060405180910390fd5b610b4f336122f2565b6000610b79612710610b6b60fa8561258890919063ffffffff16565b6125b790919063ffffffff16565b90506000610b9082846122db90919063ffffffff16565b9050734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c3757600080fd5b505af1158015610c4b573d6000803e3d6000fd5b505050506040513d6020811015610c6157600080fd5b8101908080519060200190929190505050610ce4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f756c64206e6f74207472616e73666572207769746864726177206665652e81525060200191505060405180910390fd5b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610d6957600080fd5b505af1158015610d7d573d6000803e3d6000fd5b505050506040513d6020811015610d9357600080fd5b8101908080519060200190929190505050610e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b610e2b816003546122db90919063ffffffff16565b600381905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610ee257610edf6002610ed1600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122db90919063ffffffff16565b6125b790919063ffffffff16565b90505b6000610f34612710610f266203f480610f1886610f0a6103e88a61258890919063ffffffff16565b61258890919063ffffffff16565b6125b790919063ffffffff16565b6125b790919063ffffffff16565b90506000610f4d600154836125b790919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f95573d6000803e3d6000fd5b5042600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061102c86600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122db90919063ffffffff16565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110833360046125d090919063ffffffff16565b80156110ce57506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156110e9576110e733600461260090919063ffffffff16565b505b505050505050565b60006110fd6004612630565b905090565b600080600090506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156111b9576111b660026111a8600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122db90919063ffffffff16565b6125b790919063ffffffff16565b90505b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600061124f6127106112416203f480611233876112256103e88961258890919063ffffffff16565b61258890919063ffffffff16565b6125b790919063ffffffff16565b6125b790919063ffffffff16565b90506000611268600154836125b790919063ffffffff16565b905080945050505050919050565b6203f48081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112d557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561131b573d6000803e3d6000fd5b50565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461137657600080fd5b600082116113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f74206465706f736974203020546f6b656e7300000000000000000081525060200191505060405180910390fd5b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561148f57600080fd5b505af11580156114a3573d6000803e3d6000fd5b505050506040513d60208110156114b957600080fd5b810190808051906020019092919050505061153c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496e73756666696369656e7420546f6b656e20416c6c6f77616e63650000000081525060200191505060405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115d98260035461264590919063ffffffff16565b60038190555061163182600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264590919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116888360046125d090919063ffffffff16565b6116e6576116a083600461266190919063ffffffff16565b5080600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60076020528060005260406000206000915090505481565b60096020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461177357600080fd5b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117eb576117c3610a48565b8111156117cf57600080fd5b6117e48160025461264590919063ffffffff16565b6002819055505b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561185c57600080fd5b505af1158015611870573d6000803e3d6000fd5b505050506040513d602081101561188657600080fd5b810190808051906020019092919050505050505050565b611f4081565b600a6020528060005260406000206000915090505481565b600080600090506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156119725761196f6002611961600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122db90919063ffffffff16565b6125b790919063ffffffff16565b90505b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611a086127106119fa6203f4806119ec876119de6103e88961258890919063ffffffff16565b61258890919063ffffffff16565b6125b790919063ffffffff16565b6125b790919063ffffffff16565b9050809350505050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611aea57611ae76002611ad9600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122db90919063ffffffff16565b6125b790919063ffffffff16565b90505b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611b80612710611b726203f480611b6487611b566103e88961258890919063ffffffff16565b61258890919063ffffffff16565b6125b790919063ffffffff16565b6125b790919063ffffffff16565b90506000611b99600154836125b790919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611be1573d6000803e3d6000fd5b5042600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b6000611c428260046125d090919063ffffffff16565b611c4f5760009050611d96565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611ca05760009050611d96565b6000611cf4600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426122db90919063ffffffff16565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611d8d612710611d7f6301e13380611d7187611d63611f408961258890919063ffffffff16565b61258890919063ffffffff16565b6125b790919063ffffffff16565b6125b790919063ffffffff16565b90508093505050505b919050565b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d81565b60008111611e29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f74206465706f736974203020546f6b656e7300000000000000000081525060200191505060405180910390fd5b734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611ecc57600080fd5b505af1158015611ee0573d6000803e3d6000fd5b505050506040513d6020811015611ef657600080fd5b8101908080519060200190929190505050611f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496e73756666696369656e7420546f6b656e20416c6c6f77616e63650000000081525060200191505060405180910390fd5b611f82336122f2565b611f8b33612691565b611fdd81600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264590919063ffffffff16565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120358160035461264590919063ffffffff16565b60038190555061204f3360046125d090919063ffffffff16565b6120ad5761206733600461266190919063ffffffff16565b5042600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50565b600b6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461212057600080fd5b8060018190555050565b612133336122f2565b565b6301e1338081565b60066020528060005260406000206000915090505481565b6103e881565b60035481565b60015481565b565b60025481565b60fa81565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121cc57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561220657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528060005260406000206000915090505481565b6000828211156122e757fe5b818303905092915050565b60006122fd82611c2c565b9050600081111561254057734e085036a1b732cbe4ffb1c12ddfdd87e7c3664d73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561238d57600080fd5b505af11580156123a1573d6000803e3d6000fd5b505050506040513d60208110156123b757600080fd5b810190808051906020019092919050505061243a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b61248c81600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264590919063ffffffff16565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124e48160025461264590919063ffffffff16565b6002819055507f586b2e63a21a7a4e1402e36f48ce10cb1ec94684fea254c186b76d1f98ecf1308282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b42600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600080828402905060008414806125a75750828482816125a457fe5b04145b6125ad57fe5b8091505092915050565b6000808284816125c357fe5b0490508091505092915050565b60006125f8836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6126d8565b905092915050565b6000612628836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6126fb565b905092915050565b600061263e826000016127e3565b9050919050565b60008082840190508381101561265757fe5b8091505092915050565b6000612689836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6127f4565b905092915050565b42600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001016000848152602001908152602001600020549050600081146127d7576000600182039050600060018660000180549050039050600086600001828154811061274657fe5b906000526020600020015490508087600001848154811061276357fe5b906000526020600020018190555060018301876001016000838152602001908152602001600020819055508660000180548061279b57fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506127dd565b60009150505b92915050565b600081600001805490509050919050565b600061280083836126d8565b61285957826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061285e565b600090505b9291505056fea2646970667358221220fa4b5faa56fce973139bf5be274feba6155566360ae7ef66551f6bdb9e95931d64736f6c634300060c0033
Deployed Bytecode Sourcemap
10100:8688:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13956:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10842:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17848:261;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15417:1448;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13847:99;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12044:628;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10610:43;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16959:105;;;;;;;;;;;;;:::i;:::-;;14709:698;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11091:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11197:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18410:375;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10462:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11254:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12683:562;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9131:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17075:681;;;;;;;;;;;;;:::i;:::-;;13263:572;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10332:81;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14069:621;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11304:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18198:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16877:74;;;;;;;;;;;;;:::i;:::-;;10557:46;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11036:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10507:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10938:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10666:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18117:69;;;:::i;:::-;;10896:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10744:43;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9750:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11142:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13956:95;14003:4;14027:16;;14020:23;;13956:95;:::o;10842:41::-;10875:8;10842:41;:::o;17848:261::-;17903:4;17812:23;17924:19;;:42;17920:83;;17990:1;17983:8;;;;17920:83;18013:14;18030:44;18054:19;;17812:23;18030;;:44;;;;:::i;:::-;18013:61;;18092:9;18085:16;;;17848:261;;:::o;15417:1448::-;15514:16;15483:15;:27;15499:10;15483:27;;;;;;;;;;;;;;;;:47;;15475:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15593:25;15607:10;15593:13;:25::i;:::-;15643:8;15654:47;15697:3;15654:38;10784:3;15654:16;:20;;:38;;;;:::i;:::-;:42;;:47;;;;:::i;:::-;15643:58;;15712:19;15734:25;15755:3;15734:16;:20;;:25;;;;:::i;:::-;15712:47;;10371:42;15788:28;;;15817:5;;;;;;;;;;15824:3;15788:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15780:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10371:42;15884:28;;;15913:10;15925:14;15884:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15876:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16001:36;16022:14;16001:16;;:20;;:36;;;;:::i;:::-;15982:16;:55;;;;16062:13;16125:1;16097:13;:25;16111:10;16097:25;;;;;;;;;;;;;;;;:29;16094:127;;;16153:41;16192:1;16153:34;16161:13;:25;16175:10;16161:25;;;;;;;;;;;;;;;;16153:3;:7;;:34;;;;:::i;:::-;:38;;:41;;;;:::i;:::-;16142:52;;16094:127;16243:10;16256:191;16443:3;16256:152;10647:6;16256:103;16350:8;16256:59;10540:4;16256:14;:48;;:59;;;;:::i;:::-;:93;;:103;;;;:::i;:::-;:137;;:152;;;;:::i;:::-;:186;;:191;;;;:::i;:::-;16243:204;;16498:8;16509:19;16519:8;;16509:5;:9;;:19;;;;:::i;:::-;16498:30;;16549:10;:19;;:24;16569:3;16549:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16617:3;16589:13;:25;16603:10;16589:25;;;;;;;;;;;;;;;:31;;;;16665:49;16697:16;16665:15;:27;16681:10;16665:27;;;;;;;;;;;;;;;;:31;;:49;;;;:::i;:::-;16635:15;:27;16651:10;16635:27;;;;;;;;;;;;;;;:79;;;;16739:28;16756:10;16739:7;:16;;:28;;;;:::i;:::-;:64;;;;;16802:1;16771:15;:27;16787:10;16771:27;;;;;;;;;;;;;;;;:32;16739:64;16735:123;;;16820:26;16835:10;16820:7;:14;;:26;;;;:::i;:::-;;16735:123;15417:1448;;;;;;:::o;13847:99::-;13898:4;13922:16;:7;:14;:16::i;:::-;13915:23;;13847:99;:::o;12044:628::-;12103:4;12123:13;12139:1;12123:17;;12183:1;12158:13;:22;12172:7;12158:22;;;;;;;;;;;;;;;;:26;12155:121;;;12211:38;12247:1;12211:31;12219:13;:22;12233:7;12219:22;;;;;;;;;;;;;;;;12211:3;:7;;:31;;;;:::i;:::-;:35;;:38;;;;:::i;:::-;12200:49;;12155:121;12292:17;12312:15;:24;12328:7;12312:24;;;;;;;;;;;;;;;;12292:44;;12369:10;12382:189;12567:3;12382:150;10647:6;12382:101;12474:8;12382:57;10540:4;12382:12;:46;;:57;;;;:::i;:::-;:91;;:101;;;;:::i;:::-;:135;;:150;;;;:::i;:::-;:184;;:189;;;;:::i;:::-;12369:202;;12591:8;12602:19;12612:8;;12602:5;:9;;:19;;;;:::i;:::-;12591:30;;12649:3;12642:10;;;;;;12044:628;;;:::o;10610:43::-;10647:6;10610:43;:::o;16959:105::-;9561:5;;;;;;;;;;9547:19;;:10;:19;;;9539:28;;;;;;17014:10:::1;:19;;:42;17034:21;17014:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;16959:105::o:0;14709:698::-;9561:5;;;;;;;;;;9547:19;;:10;:19;;;9539:28;;;;;;14834:1:::1;14818:13;:17;14810:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;10371:42;14882:32;;;14915:10;14935:4;14942:13;14882:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;14874:115;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;15037:9;15010:15;:24;15026:7;15010:24;;;;;;;;;;;;;;;:36;;;;15082:9;15057:13;:22;15071:7;15057:22;;;;;;;;;;;;;;;:34;;;;15125:35;15146:13;15125:16;;:20;;:35;;;;:::i;:::-;15106:16;:54;;;;15210:43;15239:13;15210:15;:24;15226:7;15210:24;;;;;;;;;;;;;;;;:28;;:43;;;;:::i;:::-;15183:15;:24;15199:7;15183:24;;;;;;;;;;;;;;;:70;;;;15279:25;15296:7;15279;:16;;:25;;;;:::i;:::-;15274:126;;15321:20;15333:7;15321;:11;;:20;;;;:::i;:::-;;15379:9;15356:11;:20;15368:7;15356:20;;;;;;;;;;;;;;;:32;;;;15274:126;14709:698:::0;;;:::o;11091:44::-;;;;;;;;;;;;;;;;;:::o;11197:50::-;;;;;;;;;;;;;;;;;:::o;18410:375::-;9561:5;;;;;;;;;;9547:19;;:10;:19;;;9539:28;;;;;;10371:42:::1;18521:26;;:10;:26;;;18517:210;;;18578:24;:22;:24::i;:::-;18568:7;:34;18564:83;;;18623:8;::::0;::::1;18564:83;18683:32;18707:7;18683:19;;:23;;:32;;;;:::i;:::-;18661:19;:54;;;;18517:210;18743:10;18737:26;;;18764:3;18769:7;18737:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;18410:375:::0;;;:::o;10462:38::-;10496:4;10462:38;:::o;11254:43::-;;;;;;;;;;;;;;;;;:::o;12683:562::-;12746:4;12766:13;12782:1;12766:17;;12826:1;12801:13;:22;12815:7;12801:22;;;;;;;;;;;;;;;;:26;12798:121;;;12854:38;12890:1;12854:31;12862:13;:22;12876:7;12862:22;;;;;;;;;;;;;;;;12854:3;:7;;:31;;;;:::i;:::-;:35;;:38;;;;:::i;:::-;12843:49;;12798:121;12935:17;12955:15;:24;12971:7;12955:24;;;;;;;;;;;;;;;;12935:44;;13012:10;13025:189;13210:3;13025:150;10647:6;13025:101;13117:8;13025:57;10540:4;13025:12;:46;;:57;;;;:::i;:::-;:91;;:101;;;;:::i;:::-;:135;;:150;;;;:::i;:::-;:184;;:189;;;;:::i;:::-;13012:202;;13232:5;13225:12;;;;;12683:562;;;:::o;9131:20::-;;;;;;;;;;;;:::o;17075:681::-;17119:13;17182:1;17154:13;:25;17168:10;17154:25;;;;;;;;;;;;;;;;:29;17151:127;;;17210:41;17249:1;17210:34;17218:13;:25;17232:10;17218:25;;;;;;;;;;;;;;;;17210:3;:7;;:34;;;;:::i;:::-;:38;;:41;;;;:::i;:::-;17199:52;;17151:127;17294:17;17314:15;:27;17330:10;17314:27;;;;;;;;;;;;;;;;17294:47;;17374:10;17387:189;17572:3;17387:150;10647:6;17387:101;17479:8;17387:57;10540:4;17387:12;:46;;:57;;;;:::i;:::-;:91;;:101;;;;:::i;:::-;:135;;:150;;;;:::i;:::-;:184;;:189;;;;:::i;:::-;17374:202;;17627:8;17638:19;17648:8;;17638:5;:9;;:19;;;;:::i;:::-;17627:30;;17678:10;:19;;:24;17698:3;17678:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17745:3;17717:13;:25;17731:10;17717:25;;;;;;;;;;;;;;;:31;;;;17075:681;;;;:::o;13263:572::-;13325:4;13347:25;13364:7;13347;:16;;:25;;;;:::i;:::-;13342:40;;13381:1;13374:8;;;;13342:40;13425:1;13397:15;:24;13413:7;13397:24;;;;;;;;;;;;;;;;:29;13393:43;;;13435:1;13428:8;;;;13393:43;13449:13;13465:33;13473:15;:24;13489:7;13473:24;;;;;;;;;;;;;;;;13465:3;:7;;:33;;;;:::i;:::-;13449:49;;13509:17;13529:15;:24;13545:7;13529:24;;;;;;;;;;;;;;;;13509:44;;13574:16;13593:191;13780:3;13593:152;10595:8;13593:102;13686:8;13593:58;10496:4;13593:12;:46;;:58;;;;:::i;:::-;:92;;:102;;;;:::i;:::-;:136;;:152;;;;:::i;:::-;:186;;:191;;;;:::i;:::-;13574:210;;13816:11;13809:18;;;;;13263:572;;;;:::o;10332:81::-;10371:42;10332:81;:::o;14069:621::-;14146:1;14130:13;:17;14122:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10371:42;14194:32;;;14227:10;14247:4;14254:13;14194:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14186:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14322:25;14336:10;14322:13;:25::i;:::-;14358:23;14370:10;14358:11;:23::i;:::-;14432:46;14464:13;14432:15;:27;14448:10;14432:27;;;;;;;;;;;;;;;;:31;;:46;;;;:::i;:::-;14402:15;:27;14418:10;14402:27;;;;;;;;;;;;;;;:76;;;;14508:35;14529:13;14508:16;;:20;;:35;;;;:::i;:::-;14489:16;:54;;;;14559:28;14576:10;14559:7;:16;;:28;;;;:::i;:::-;14554:129;;14604:23;14616:10;14604:7;:11;;:23;;;;:::i;:::-;;14668:3;14642:11;:23;14654:10;14642:23;;;;;;;;;;;;;;;:29;;;;14554:129;14069:621;:::o;11304:46::-;;;;;;;;;;;;;;;;;:::o;18198:97::-;9561:5;;;;;;;;;;9547:19;;:10;:19;;;9539:28;;;;;;18279:7:::1;18268:8;:18;;;;18198:97:::0;:::o;16877:74::-;16918:25;16932:10;16918:13;:25::i;:::-;16877:74::o;10557:46::-;10595:8;10557:46;:::o;11036:48::-;;;;;;;;;;;;;;;;;:::o;10507:37::-;10540:4;10507:37;:::o;10938:32::-;;;;:::o;10666:28::-;;;;:::o;18117:69::-;:::o;10896:35::-;;;;:::o;10744:43::-;10784:3;10744:43;:::o;9750:178::-;9561:5;;;;;;;;;;9547:19;;:10;:19;;;9539:28;;;;;;9847:1:::1;9827:22;;:8;:22;;;;9819:31;;;::::0;::::1;;9890:8;9862:37;;9883:5;::::0;::::1;;;;;;;;9862:37;;;;;;;;;;;;9914:8;9906:5;::::0;:16:::1;;;;;;;;;;;;;;;;;;9750:178:::0;:::o;11142:48::-;;;;;;;;;;;;;;;;;:::o;685:113::-;743:7;771:1;766;:6;;759:14;;;;791:1;787;:5;780:12;;685:113;;;;:::o;11363:517::-;11422:16;11441:23;11456:7;11441:14;:23::i;:::-;11422:42;;11493:1;11479:11;:15;11475:357;;;10371:42;11519:28;;;11548:7;11557:11;11519:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11511:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11644:43;11675:11;11644:17;:26;11662:7;11644:26;;;;;;;;;;;;;;;;:30;;:43;;;;:::i;:::-;11615:17;:26;11633:7;11615:26;;;;;;;;;;;;;;;:72;;;;11724:36;11748:11;11724:19;;:23;;:36;;;;:::i;:::-;11702:19;:58;;;;11780:40;11799:7;11808:11;11780:40;;;;;;;;;;;;;;;;;;;;;;;;;;11475:357;11869:3;11842:15;:24;11858:7;11842:24;;;;;;;;;;;;;;;:30;;;;11363:517;;:::o;256:147::-;314:7;330:9;346:1;342;:5;330:17;;366:1;361;:6;:20;;;;380:1;375;371;:5;;;;;;:10;361:20;354:28;;;;396:1;389:8;;;256:147;;;;:::o;409:270::-;467:7;558:9;574:1;570;:5;;;;;;558:17;;672:1;665:8;;;409:270;;;;:::o;6446:158::-;6526:4;6550:46;6560:3;:10;;6588:5;6580:14;;6572:23;;6550:9;:46::i;:::-;6543:53;;6446:158;;;;:::o;6211:149::-;6284:4;6308:44;6316:3;:10;;6344:5;6336:14;;6328:23;;6308:7;:44::i;:::-;6301:51;;6211:149;;;;:::o;6690:117::-;6753:7;6780:19;6788:3;:10;;6780:7;:19::i;:::-;6773:26;;6690:117;;;:::o;804:133::-;862:7;878:9;894:1;890;:5;878:17;;914:1;909;:6;;902:14;;;;930:1;923:8;;;804:133;;;;:::o;5892:143::-;5962:4;5986:41;5991:3;:10;;6019:5;6011:14;;6003:23;;5986:4;:41::i;:::-;5979:48;;5892:143;;;;:::o;11896:141::-;11998:3;11973:13;:22;11987:7;11973:22;;;;;;;;;;;;;;;:28;;;;11896:141;:::o;4766:129::-;4839:4;4886:1;4863:3;:12;;:19;4876:5;4863:19;;;;;;;;;;;;:24;;4856:31;;4766:129;;;;:::o;3136:1544::-;3202:4;3320:18;3341:3;:12;;:19;3354:5;3341:19;;;;;;;;;;;;3320:40;;3391:1;3377:10;:15;3373:1300;;3739:21;3776:1;3763:10;:14;3739:38;;3792:17;3833:1;3812:3;:11;;:18;;;;:22;3792:42;;4079:17;4099:3;:11;;4111:9;4099:22;;;;;;;;;;;;;;;;4079:42;;4245:9;4216:3;:11;;4228:13;4216:26;;;;;;;;;;;;;;;:38;;;;4364:1;4348:13;:17;4322:3;:12;;:23;4335:9;4322:23;;;;;;;;;;;:43;;;;4474:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;4569:3;:12;;:19;4582:5;4569:19;;;;;;;;;;;4562:26;;;4612:4;4605:11;;;;;;;;3373:1300;4656:5;4649:12;;;3136:1544;;;;;:::o;4981:109::-;5037:7;5064:3;:11;;:18;;;;5057:25;;4981:109;;;:::o;2546:414::-;2609:4;2631:21;2641:3;2646:5;2631:9;:21::i;:::-;2626:327;;2669:3;:11;;2686:5;2669:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2852:3;:11;;:18;;;;2830:3;:12;;:19;2843:5;2830:19;;;;;;;;;;;:40;;;;2892:4;2885:11;;;;2626:327;2936:5;2929:12;;2546:414;;;;;:::o
Swarm Source
ipfs://fa4b5faa56fce973139bf5be274feba6155566360ae7ef66551f6bdb9e95931d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.