Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
ProjectVoting
Compiler Version
v0.6.2+commit.bacdbe57
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-11 */ // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: @openzeppelin/upgrades/contracts/Initializable.sol pragma solidity >=0.4.24 <0.7.0; /** * @title Initializable * * @dev Helper contract to support initializer functions. To use it, replace * the constructor with a function that has the `initializer` modifier. * WARNING: Unlike constructors, initializer functions must be manually * invoked. This applies both to deploying an Initializable contract, as well * as extending an Initializable contract via inheritance. * WARNING: When used with inheritance, manual care must be taken to not invoke * a parent initializer twice, or ensure that all initializers are idempotent, * because this is not dealt with automatically as with constructors. */ contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private initializing; /** * @dev Modifier to use in the initializer function of a contract. */ modifier initializer() { require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized"); bool isTopLevelCall = !initializing; if (isTopLevelCall) { initializing = true; initialized = true; } _; if (isTopLevelCall) { initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; assembly { cs := extcodesize(self) } return cs == 0; } // Reserved storage space to allow for layout changes in the future. uint256[50] private ______gap; } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/utils/EnumerableSet.sol pragma solidity ^0.6.0; /** * @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)); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File: contracts/ProjectVoting.sol pragma solidity >=0.6.2; pragma experimental ABIEncoderV2; contract ProjectVoting is Ownable, Initializable { using SafeMath for uint256; using EnumerableSet for EnumerableSet.AddressSet; uint256 internal constant CONTRACT_FEE_1000 = 12; // to cover manual transaction costs uint256 internal constant MAX_DEPOSIT = 10 ether; bool public _isOpen = false; bool public _allowRefund = false; struct Project { address _address; uint256 _balance; string _link; } EnumerableSet.AddressSet private _participants; mapping (address => uint256) private _balances; Project[] public _projects; uint256 public _estimatedTimestamp; IUniswapV2Router02 private uniswapRouter; /* Modifiers */ modifier whenOpen { require(_isOpen, "The voting phase is not currently running"); _; } /* Initializer */ function initialize(address uniswapV2Router02) public initializer { uniswapRouter = IUniswapV2Router02(uniswapV2Router02); } /* Public */ function deposit(uint8 index) payable external whenOpen { uint256 newBalance = _balances[msg.sender] + msg.value; require(newBalance <= MAX_DEPOSIT, "Deposit exceeds maximum limit"); _balances[msg.sender] = newBalance; _projects[index]._balance = _projects[index]._balance.add(msg.value); _participants.add(msg.sender); } function reset(address[] calldata addresses, string[] calldata links, uint256 estimatedTimestamp) external onlyOwner { delete _projects; _isOpen = false; _allowRefund = false; _estimatedTimestamp = estimatedTimestamp; for (uint8 i = 0; i < addresses.length; ++i) { _projects.push(Project({ _address: addresses[i], _balance: 0, _link: links[i] })); } _isOpen = true; } function execute(uint256 deadline) external onlyOwner { _isOpen = false; // Select best project uint8 bestProjectIndex; for (uint8 i = 0; i < _projects.length; ++i) { if (_projects[i]._balance >= _projects[bestProjectIndex]._balance) { bestProjectIndex = i; } } // Keep original balance in memory uint256 balance = address(this).balance; // Transfer contract fee uint256 contractFee = balance.mul(CONTRACT_FEE_1000).div(uint256(1000)); (bool success, ) = owner().call.value(contractFee)(""); require(success, "Fee transfer failed"); // Execute swap through Uniswap address tokenAddress = _projects[bestProjectIndex]._address; uint256 amount = address(this).balance; address[] memory path = new address[](2); path[0] = uniswapRouter.WETH(); path[1] = tokenAddress; uniswapRouter.swapExactETHForTokens.value(amount)(0, path, address(this), deadline); IERC20 token = IERC20(tokenAddress); uint256 amountBought = token.balanceOf(address(this)); require(amountBought > 0, "Couldn't buy tokens"); // Send proportional amount of tokens to each participant while (_participants.length() > 0) { address participant = _participants.at(0); // take first element uint256 tokenShare = amountBought.mul(_balances[participant]).div(balance); _participants.remove(participant); // removing from the set shifts the indices delete _balances[participant]; require(token.transfer(participant, tokenShare), "Token transfer failed"); } } /* Emergency refund mechanism */ function allowRefund() external onlyOwner { _allowRefund = true; delete _projects; } function refundAll() external { for (uint256 i = 0; i < _participants.length(); ++i) { refund(_participants.at(i)); } } function refund(address account) public { require(_allowRefund, "Emergency refund isn't enabled"); uint256 balance = _balances[account]; require(balance > 0, "Nothing to refund"); _balances[account] = 0; _participants.remove(account); (bool success, ) = account.call.value(balance)(""); require(success, "Refund failed"); } /* Receive leftover ETH */ receive() payable external { (bool success, ) = owner().call.value(msg.value)(""); require(success, "Receive refund to owner failed"); } /* Views */ function balanceOf(address account) external view returns (uint256) { return _balances[account]; } function projectsCount() external view returns (uint256) { return _projects.length; } function participantsCount() external view returns (uint256) { return _participants.length(); } }
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"},{"inputs":[],"name":"_allowRefund","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_estimatedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_projects","outputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_balance","type":"uint256"},{"internalType":"string","name":"_link","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowRefund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"index","type":"uint8"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"uniswapV2Router02","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"participantsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"refund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refundAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"string[]","name":"links","type":"string[]"},{"internalType":"uint256","name":"estimatedTimestamp","type":"uint256"}],"name":"reset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000603360006101000a81548160ff0219169083151502179055506000603360016101000a81548160ff021916908315150217905550600061004a6100ed60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506100f5565b600033905090565b612cbe806101046000396000f3fe6080604052600436106101025760003560e01c8063c4d66de811610095578063f2fde38b11610064578063f2fde38b146103b1578063fa89401a146103da578063fe0d94c114610403578063fed42f401461042c578063ffb2d35d14610457576101bd565b8063c4d66de814610316578063c73b302e1461033f578063dd60c8981461036a578063ebe41b7314610395576101bd565b806370a08231116100d157806370a0823114610258578063715018a614610295578063821f9dc9146102ac5780638da5cb5b146102eb576101bd565b80631aef3936146101c257806338e771ab146101ed5780634d91969f146102045780636d3563e41461022d576101bd565b366101bd57600061011161046e565b73ffffffffffffffffffffffffffffffffffffffff163460405161013490612755565b60006040518083038185875af1925050503d8060008114610171576040519150601f19603f3d011682016040523d82523d6000602084013e610176565b606091505b50509050806101ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101b190612a30565b60405180910390fd5b50005b600080fd5b3480156101ce57600080fd5b506101d7610497565b6040516101e49190612807565b60405180910390f35b3480156101f957600080fd5b506102026104aa565b005b34801561021057600080fd5b5061022b6004803603610226919081019061200d565b6104eb565b005b34801561023957600080fd5b506102426107a3565b60405161024f9190612a70565b60405180910390f35b34801561026457600080fd5b5061027f600480360361027a9190810190611fbb565b6107a9565b60405161028c9190612a70565b60405180910390f35b3480156102a157600080fd5b506102aa6107f2565b005b3480156102b857600080fd5b506102d360048036036102ce9190810190612100565b610947565b6040516102e2939291906127c9565b60405180910390f35b3480156102f757600080fd5b5061030061046e565b60405161030d919061276a565b60405180910390f35b34801561032257600080fd5b5061033d60048036036103389190810190611fbb565b610a36565b005b34801561034b57600080fd5b50610354610b63565b6040516103619190612a70565b60405180910390f35b34801561037657600080fd5b5061037f610b70565b60405161038c9190612a70565b60405180910390f35b6103af60048036036103aa9190810190612152565b610b81565b005b3480156103bd57600080fd5b506103d860048036036103d39190810190611fbb565b610d17565b005b3480156103e657600080fd5b5061040160048036036103fc9190810190611fbb565b610edb565b005b34801561040f57600080fd5b5061042a60048036036104259190810190612100565b6110bc565b005b34801561043857600080fd5b506104416117cc565b60405161044e9190612807565b60405180910390f35b34801561046357600080fd5b5061046c6117df565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b603360019054906101000a900460ff1681565b60008090505b6104ba60346118a0565b8110156104e8576104dd6104d88260346118b590919063ffffffff16565b610edb565b8060010190506104b0565b50565b6104f36118cf565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610581576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610578906129f0565b60405180910390fd5b6037600061058f9190611cb7565b6000603360006101000a81548160ff0219169083151502179055506000603360016101000a81548160ff0219169083151502179055508060388190555060008090505b858590508160ff161015610780576037604051806060016040528088888560ff168181106105fc57fe5b90506020020160206106119190810190611fbb565b73ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200186868560ff1681811061064257fe5b905060200281018035600160200383360303811261065f57600080fd5b8083019250508135905060208201915067ffffffffffffffff81111561068457600080fd5b60018102360382131561069657600080fd5b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002019080519060200190610772929190611cdb565b5050508060010190506105d2565b506001603360006101000a81548160ff0219169083151502179055505050505050565b60385481565b6000603660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107fa6118cf565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f906129f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6037818154811061095457fe5b90600052602060002090600302016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a2c5780601f10610a0157610100808354040283529160200191610a2c565b820191906000526020600020905b815481529060010190602001808311610a0f57829003601f168201915b5050505050905083565b600060159054906101000a900460ff1680610a555750610a546118d7565b5b80610a6d5750600060149054906101000a900460ff16155b610aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa390612a10565b60405180910390fd5b60008060159054906101000a900460ff161590508015610afd576001600060156101000a81548160ff0219169083151502179055506001600060146101000a81548160ff0219169083151502179055505b81603960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610b5f5760008060156101000a81548160ff0219169083151502179055505b5050565b6000603780549050905090565b6000610b7c60346118a0565b905090565b603360009054906101000a900460ff16610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc790612a50565b60405180910390fd5b600034603660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054019050678ac7230489e80000811115610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5890612910565b60405180910390fd5b80603660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cd93460378460ff1681548110610cb957fe5b9060005260206000209060030201600101546118ee90919063ffffffff16565b60378360ff1681548110610ce957fe5b906000526020600020906003020160010181905550610d1233603461194390919063ffffffff16565b505050565b610d1f6118cf565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da4906129f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e14906128d0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b603360019054906101000a900460ff16610f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f21906128b0565b60405180910390fd5b6000603660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa8906129d0565b60405180910390fd5b6000603660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061100a82603461197390919063ffffffff16565b5060008273ffffffffffffffffffffffffffffffffffffffff168260405161103190612755565b60006040518083038185875af1925050503d806000811461106e576040519150601f19603f3d011682016040523d82523d6000602084013e611073565b606091505b50509050806110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae906129b0565b60405180910390fd5b505050565b6110c46118cf565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611152576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611149906129f0565b60405180910390fd5b6000603360006101000a81548160ff021916908315150217905550600080600090505b6037805490508160ff1610156111dd5760378260ff168154811061119557fe5b90600052602060002090600302016001015460378260ff16815481106111b757fe5b906000526020600020906003020160010154106111d2578091505b806001019050611175565b506000479050600061120d6103e86111ff600c856119a390919063ffffffff16565b611a1390919063ffffffff16565b9050600061121961046e565b73ffffffffffffffffffffffffffffffffffffffff168260405161123c90612755565b60006040518083038185875af1925050503d8060008114611279576040519150601f19603f3d011682016040523d82523d6000602084013e61127e565b606091505b50509050806112c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b990612930565b60405180910390fd5b600060378560ff16815481106112d457fe5b906000526020600020906003020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060004790506060600260405190808252806020026020018201604052801561133f5781602001602082028038833980820191505090505b509050603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156113aa57600080fd5b505afa1580156113be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113e29190810190611fe4565b816000815181106113ef57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050828160018151811061143757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ff36ab583600084308d6040518663ffffffff1660e01b81526004016114d49493929190612822565b6000604051808303818588803b1580156114ed57600080fd5b505af1158015611501573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f8201168201806040525061152b9190810190612096565b50600083905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161156c9190612785565b60206040518083038186803b15801561158457600080fd5b505afa158015611598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115bc9190810190612129565b905060008111611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f890612970565b60405180910390fd5b5b600061160e60346118a0565b11156117c057600061162b600060346118b590919063ffffffff16565b905060006116938a611685603660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054866119a390919063ffffffff16565b611a1390919063ffffffff16565b90506116a982603461197390919063ffffffff16565b50603660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016117289291906127a0565b602060405180830381600087803b15801561174257600080fd5b505af1158015611756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061177a91908101906120d7565b6117b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b090612950565b60405180910390fd5b5050611602565b50505050505050505050565b603360009054906101000a900460ff1681565b6117e76118cf565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c906129f0565b60405180910390fd5b6001603360016101000a81548160ff0219169083151502179055506037600061189e9190611cb7565b565b60006118ae82600001611a5d565b9050919050565b60006118c48360000183611a6e565b60001c905092915050565b600033905090565b6000803090506000813b9050600081149250505090565b600080828401905083811015611939576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611930906128f0565b60405180910390fd5b8091505092915050565b600061196b836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611adb565b905092915050565b600061199b836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611b4b565b905092915050565b6000808314156119b65760009050611a0d565b60008284029050828482816119c757fe5b0414611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff90612990565b60405180910390fd5b809150505b92915050565b6000611a5583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c33565b905092915050565b600081600001805490509050919050565b600081836000018054905011611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab090612890565b60405180910390fd5b826000018281548110611ac857fe5b9060005260206000200154905092915050565b6000611ae78383611c94565b611b40578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611b45565b600090505b92915050565b60008083600101600084815260200190815260200160002054905060008114611c275760006001820390506000600186600001805490500390506000866000018281548110611b9657fe5b9060005260206000200154905080876000018481548110611bb357fe5b9060005260206000200181905550600183018760010160008381526020019081526020016000208190555086600001805480611beb57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611c2d565b60009150505b92915050565b60008083118290611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c71919061286e565b60405180910390fd5b506000838581611c8657fe5b049050809150509392505050565b600080836001016000848152602001908152602001600020541415905092915050565b5080546000825560030290600052602060002090810190611cd89190611d5b565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611d1c57805160ff1916838001178555611d4a565b82800160010185558215611d4a579182015b82811115611d49578251825591602001919060010190611d2e565b5b509050611d579190611db9565b5090565b611db691905b80821115611db257600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160009055600282016000611da99190611dde565b50600301611d61565b5090565b90565b611ddb91905b80821115611dd7576000816000905550600101611dbf565b5090565b90565b50805460018160011615610100020316600290046000825580601f10611e045750611e23565b601f016020900490600052602060002090810190611e229190611db9565b5b50565b600081359050611e3581612c2c565b92915050565b600081519050611e4a81612c2c565b92915050565b60008083601f840112611e6257600080fd5b8235905067ffffffffffffffff811115611e7b57600080fd5b602083019150836020820283011115611e9357600080fd5b9250929050565b60008083601f840112611eac57600080fd5b8235905067ffffffffffffffff811115611ec557600080fd5b602083019150836020820283011115611edd57600080fd5b9250929050565b600082601f830112611ef557600080fd5b8151611f08611f0382612ab8565b612a8b565b91508181835260208401935060208101905083856020840282011115611f2d57600080fd5b60005b83811015611f5d5781611f438882611f91565b845260208401935060208301925050600181019050611f30565b5050505092915050565b600081519050611f7681612c43565b92915050565b600081359050611f8b81612c5a565b92915050565b600081519050611fa081612c5a565b92915050565b600081359050611fb581612c71565b92915050565b600060208284031215611fcd57600080fd5b6000611fdb84828501611e26565b91505092915050565b600060208284031215611ff657600080fd5b600061200484828501611e3b565b91505092915050565b60008060008060006060868803121561202557600080fd5b600086013567ffffffffffffffff81111561203f57600080fd5b61204b88828901611e50565b9550955050602086013567ffffffffffffffff81111561206a57600080fd5b61207688828901611e9a565b9350935050604061208988828901611f7c565b9150509295509295909350565b6000602082840312156120a857600080fd5b600082015167ffffffffffffffff8111156120c257600080fd5b6120ce84828501611ee4565b91505092915050565b6000602082840312156120e957600080fd5b60006120f784828501611f67565b91505092915050565b60006020828403121561211257600080fd5b600061212084828501611f7c565b91505092915050565b60006020828403121561213b57600080fd5b600061214984828501611f91565b91505092915050565b60006020828403121561216457600080fd5b600061217284828501611fa6565b91505092915050565b600061218783836121a2565b60208301905092915050565b61219c81612ba0565b82525050565b6121ab81612b4b565b82525050565b6121ba81612b4b565b82525050565b60006121cb82612af0565b6121d58185612b1e565b93506121e083612ae0565b8060005b838110156122115781516121f8888261217b565b975061220383612b11565b9250506001810190506121e4565b5085935050505092915050565b61222781612b5d565b82525050565b61223681612bb2565b82525050565b600061224782612b06565b6122518185612b3a565b9350612261818560208601612be8565b61226a81612c1b565b840191505092915050565b600061228082612afb565b61228a8185612b3a565b935061229a818560208601612be8565b6122a381612c1b565b840191505092915050565b60006122bb602283612b3a565b91507f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612321601e83612b3a565b91507f456d657267656e637920726566756e642069736e277420656e61626c656400006000830152602082019050919050565b6000612361602683612b3a565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006123c7601b83612b3a565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000612407601d83612b3a565b91507f4465706f7369742065786365656473206d6178696d756d206c696d69740000006000830152602082019050919050565b6000612447601383612b3a565b91507f466565207472616e73666572206661696c6564000000000000000000000000006000830152602082019050919050565b6000612487601583612b3a565b91507f546f6b656e207472616e73666572206661696c656400000000000000000000006000830152602082019050919050565b60006124c7601383612b3a565b91507f436f756c646e27742062757920746f6b656e73000000000000000000000000006000830152602082019050919050565b6000612507602183612b3a565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061256d600d83612b3a565b91507f526566756e64206661696c6564000000000000000000000000000000000000006000830152602082019050919050565b60006125ad601183612b3a565b91507f4e6f7468696e6720746f20726566756e640000000000000000000000000000006000830152602082019050919050565b60006125ed602083612b3a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061262d602e83612b3a565b91507f436f6e747261637420696e7374616e63652068617320616c726561647920626560008301527f656e20696e697469616c697a65640000000000000000000000000000000000006020830152604082019050919050565b6000612693601e83612b3a565b91507f5265636569766520726566756e6420746f206f776e6572206661696c656400006000830152602082019050919050565b60006126d3602983612b3a565b91507f54686520766f74696e67207068617365206973206e6f742063757272656e746c60008301527f792072756e6e696e6700000000000000000000000000000000000000000000006020830152604082019050919050565b6000612739600083612b2f565b9150600082019050919050565b61274f81612b89565b82525050565b60006127608261272c565b9150819050919050565b600060208201905061277f60008301846121b1565b92915050565b600060208201905061279a6000830184612193565b92915050565b60006040820190506127b560008301856121b1565b6127c26020830184612746565b9392505050565b60006060820190506127de60008301866121b1565b6127eb6020830185612746565b81810360408301526127fd8184612275565b9050949350505050565b600060208201905061281c600083018461221e565b92915050565b6000608082019050612837600083018761222d565b818103602083015261284981866121c0565b90506128586040830185612193565b6128656060830184612746565b95945050505050565b60006020820190508181036000830152612888818461223c565b905092915050565b600060208201905081810360008301526128a9816122ae565b9050919050565b600060208201905081810360008301526128c981612314565b9050919050565b600060208201905081810360008301526128e981612354565b9050919050565b60006020820190508181036000830152612909816123ba565b9050919050565b60006020820190508181036000830152612929816123fa565b9050919050565b600060208201905081810360008301526129498161243a565b9050919050565b600060208201905081810360008301526129698161247a565b9050919050565b60006020820190508181036000830152612989816124ba565b9050919050565b600060208201905081810360008301526129a9816124fa565b9050919050565b600060208201905081810360008301526129c981612560565b9050919050565b600060208201905081810360008301526129e9816125a0565b9050919050565b60006020820190508181036000830152612a09816125e0565b9050919050565b60006020820190508181036000830152612a2981612620565b9050919050565b60006020820190508181036000830152612a4981612686565b9050919050565b60006020820190508181036000830152612a69816126c6565b9050919050565b6000602082019050612a856000830184612746565b92915050565b6000604051905081810181811067ffffffffffffffff82111715612aae57600080fd5b8060405250919050565b600067ffffffffffffffff821115612acf57600080fd5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612b5682612b69565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612bab82612bc4565b9050919050565b6000612bbd82612b89565b9050919050565b6000612bcf82612bd6565b9050919050565b6000612be182612b69565b9050919050565b60005b83811015612c06578082015181840152602081019050612beb565b83811115612c15576000848401525b50505050565b6000601f19601f8301169050919050565b612c3581612b4b565b8114612c4057600080fd5b50565b612c4c81612b5d565b8114612c5757600080fd5b50565b612c6381612b89565b8114612c6e57600080fd5b50565b612c7a81612b93565b8114612c8557600080fd5b5056fea2646970667358221220f2a88d251c31c8d167fb384da08c9389158d21898e9809defd91de7af4d76e4964736f6c63430006020033
Deployed Bytecode
0x6080604052600436106101025760003560e01c8063c4d66de811610095578063f2fde38b11610064578063f2fde38b146103b1578063fa89401a146103da578063fe0d94c114610403578063fed42f401461042c578063ffb2d35d14610457576101bd565b8063c4d66de814610316578063c73b302e1461033f578063dd60c8981461036a578063ebe41b7314610395576101bd565b806370a08231116100d157806370a0823114610258578063715018a614610295578063821f9dc9146102ac5780638da5cb5b146102eb576101bd565b80631aef3936146101c257806338e771ab146101ed5780634d91969f146102045780636d3563e41461022d576101bd565b366101bd57600061011161046e565b73ffffffffffffffffffffffffffffffffffffffff163460405161013490612755565b60006040518083038185875af1925050503d8060008114610171576040519150601f19603f3d011682016040523d82523d6000602084013e610176565b606091505b50509050806101ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101b190612a30565b60405180910390fd5b50005b600080fd5b3480156101ce57600080fd5b506101d7610497565b6040516101e49190612807565b60405180910390f35b3480156101f957600080fd5b506102026104aa565b005b34801561021057600080fd5b5061022b6004803603610226919081019061200d565b6104eb565b005b34801561023957600080fd5b506102426107a3565b60405161024f9190612a70565b60405180910390f35b34801561026457600080fd5b5061027f600480360361027a9190810190611fbb565b6107a9565b60405161028c9190612a70565b60405180910390f35b3480156102a157600080fd5b506102aa6107f2565b005b3480156102b857600080fd5b506102d360048036036102ce9190810190612100565b610947565b6040516102e2939291906127c9565b60405180910390f35b3480156102f757600080fd5b5061030061046e565b60405161030d919061276a565b60405180910390f35b34801561032257600080fd5b5061033d60048036036103389190810190611fbb565b610a36565b005b34801561034b57600080fd5b50610354610b63565b6040516103619190612a70565b60405180910390f35b34801561037657600080fd5b5061037f610b70565b60405161038c9190612a70565b60405180910390f35b6103af60048036036103aa9190810190612152565b610b81565b005b3480156103bd57600080fd5b506103d860048036036103d39190810190611fbb565b610d17565b005b3480156103e657600080fd5b5061040160048036036103fc9190810190611fbb565b610edb565b005b34801561040f57600080fd5b5061042a60048036036104259190810190612100565b6110bc565b005b34801561043857600080fd5b506104416117cc565b60405161044e9190612807565b60405180910390f35b34801561046357600080fd5b5061046c6117df565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b603360019054906101000a900460ff1681565b60008090505b6104ba60346118a0565b8110156104e8576104dd6104d88260346118b590919063ffffffff16565b610edb565b8060010190506104b0565b50565b6104f36118cf565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610581576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610578906129f0565b60405180910390fd5b6037600061058f9190611cb7565b6000603360006101000a81548160ff0219169083151502179055506000603360016101000a81548160ff0219169083151502179055508060388190555060008090505b858590508160ff161015610780576037604051806060016040528088888560ff168181106105fc57fe5b90506020020160206106119190810190611fbb565b73ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200186868560ff1681811061064257fe5b905060200281018035600160200383360303811261065f57600080fd5b8083019250508135905060208201915067ffffffffffffffff81111561068457600080fd5b60018102360382131561069657600080fd5b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002019080519060200190610772929190611cdb565b5050508060010190506105d2565b506001603360006101000a81548160ff0219169083151502179055505050505050565b60385481565b6000603660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107fa6118cf565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f906129f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6037818154811061095457fe5b90600052602060002090600302016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a2c5780601f10610a0157610100808354040283529160200191610a2c565b820191906000526020600020905b815481529060010190602001808311610a0f57829003601f168201915b5050505050905083565b600060159054906101000a900460ff1680610a555750610a546118d7565b5b80610a6d5750600060149054906101000a900460ff16155b610aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa390612a10565b60405180910390fd5b60008060159054906101000a900460ff161590508015610afd576001600060156101000a81548160ff0219169083151502179055506001600060146101000a81548160ff0219169083151502179055505b81603960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610b5f5760008060156101000a81548160ff0219169083151502179055505b5050565b6000603780549050905090565b6000610b7c60346118a0565b905090565b603360009054906101000a900460ff16610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc790612a50565b60405180910390fd5b600034603660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054019050678ac7230489e80000811115610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5890612910565b60405180910390fd5b80603660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cd93460378460ff1681548110610cb957fe5b9060005260206000209060030201600101546118ee90919063ffffffff16565b60378360ff1681548110610ce957fe5b906000526020600020906003020160010181905550610d1233603461194390919063ffffffff16565b505050565b610d1f6118cf565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da4906129f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e14906128d0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b603360019054906101000a900460ff16610f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f21906128b0565b60405180910390fd5b6000603660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa8906129d0565b60405180910390fd5b6000603660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061100a82603461197390919063ffffffff16565b5060008273ffffffffffffffffffffffffffffffffffffffff168260405161103190612755565b60006040518083038185875af1925050503d806000811461106e576040519150601f19603f3d011682016040523d82523d6000602084013e611073565b606091505b50509050806110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae906129b0565b60405180910390fd5b505050565b6110c46118cf565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611152576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611149906129f0565b60405180910390fd5b6000603360006101000a81548160ff021916908315150217905550600080600090505b6037805490508160ff1610156111dd5760378260ff168154811061119557fe5b90600052602060002090600302016001015460378260ff16815481106111b757fe5b906000526020600020906003020160010154106111d2578091505b806001019050611175565b506000479050600061120d6103e86111ff600c856119a390919063ffffffff16565b611a1390919063ffffffff16565b9050600061121961046e565b73ffffffffffffffffffffffffffffffffffffffff168260405161123c90612755565b60006040518083038185875af1925050503d8060008114611279576040519150601f19603f3d011682016040523d82523d6000602084013e61127e565b606091505b50509050806112c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b990612930565b60405180910390fd5b600060378560ff16815481106112d457fe5b906000526020600020906003020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060004790506060600260405190808252806020026020018201604052801561133f5781602001602082028038833980820191505090505b509050603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156113aa57600080fd5b505afa1580156113be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113e29190810190611fe4565b816000815181106113ef57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050828160018151811061143757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ff36ab583600084308d6040518663ffffffff1660e01b81526004016114d49493929190612822565b6000604051808303818588803b1580156114ed57600080fd5b505af1158015611501573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f8201168201806040525061152b9190810190612096565b50600083905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161156c9190612785565b60206040518083038186803b15801561158457600080fd5b505afa158015611598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115bc9190810190612129565b905060008111611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f890612970565b60405180910390fd5b5b600061160e60346118a0565b11156117c057600061162b600060346118b590919063ffffffff16565b905060006116938a611685603660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054866119a390919063ffffffff16565b611a1390919063ffffffff16565b90506116a982603461197390919063ffffffff16565b50603660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090558373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016117289291906127a0565b602060405180830381600087803b15801561174257600080fd5b505af1158015611756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061177a91908101906120d7565b6117b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b090612950565b60405180910390fd5b5050611602565b50505050505050505050565b603360009054906101000a900460ff1681565b6117e76118cf565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c906129f0565b60405180910390fd5b6001603360016101000a81548160ff0219169083151502179055506037600061189e9190611cb7565b565b60006118ae82600001611a5d565b9050919050565b60006118c48360000183611a6e565b60001c905092915050565b600033905090565b6000803090506000813b9050600081149250505090565b600080828401905083811015611939576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611930906128f0565b60405180910390fd5b8091505092915050565b600061196b836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611adb565b905092915050565b600061199b836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611b4b565b905092915050565b6000808314156119b65760009050611a0d565b60008284029050828482816119c757fe5b0414611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff90612990565b60405180910390fd5b809150505b92915050565b6000611a5583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c33565b905092915050565b600081600001805490509050919050565b600081836000018054905011611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab090612890565b60405180910390fd5b826000018281548110611ac857fe5b9060005260206000200154905092915050565b6000611ae78383611c94565b611b40578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611b45565b600090505b92915050565b60008083600101600084815260200190815260200160002054905060008114611c275760006001820390506000600186600001805490500390506000866000018281548110611b9657fe5b9060005260206000200154905080876000018481548110611bb357fe5b9060005260206000200181905550600183018760010160008381526020019081526020016000208190555086600001805480611beb57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611c2d565b60009150505b92915050565b60008083118290611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c71919061286e565b60405180910390fd5b506000838581611c8657fe5b049050809150509392505050565b600080836001016000848152602001908152602001600020541415905092915050565b5080546000825560030290600052602060002090810190611cd89190611d5b565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611d1c57805160ff1916838001178555611d4a565b82800160010185558215611d4a579182015b82811115611d49578251825591602001919060010190611d2e565b5b509050611d579190611db9565b5090565b611db691905b80821115611db257600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160009055600282016000611da99190611dde565b50600301611d61565b5090565b90565b611ddb91905b80821115611dd7576000816000905550600101611dbf565b5090565b90565b50805460018160011615610100020316600290046000825580601f10611e045750611e23565b601f016020900490600052602060002090810190611e229190611db9565b5b50565b600081359050611e3581612c2c565b92915050565b600081519050611e4a81612c2c565b92915050565b60008083601f840112611e6257600080fd5b8235905067ffffffffffffffff811115611e7b57600080fd5b602083019150836020820283011115611e9357600080fd5b9250929050565b60008083601f840112611eac57600080fd5b8235905067ffffffffffffffff811115611ec557600080fd5b602083019150836020820283011115611edd57600080fd5b9250929050565b600082601f830112611ef557600080fd5b8151611f08611f0382612ab8565b612a8b565b91508181835260208401935060208101905083856020840282011115611f2d57600080fd5b60005b83811015611f5d5781611f438882611f91565b845260208401935060208301925050600181019050611f30565b5050505092915050565b600081519050611f7681612c43565b92915050565b600081359050611f8b81612c5a565b92915050565b600081519050611fa081612c5a565b92915050565b600081359050611fb581612c71565b92915050565b600060208284031215611fcd57600080fd5b6000611fdb84828501611e26565b91505092915050565b600060208284031215611ff657600080fd5b600061200484828501611e3b565b91505092915050565b60008060008060006060868803121561202557600080fd5b600086013567ffffffffffffffff81111561203f57600080fd5b61204b88828901611e50565b9550955050602086013567ffffffffffffffff81111561206a57600080fd5b61207688828901611e9a565b9350935050604061208988828901611f7c565b9150509295509295909350565b6000602082840312156120a857600080fd5b600082015167ffffffffffffffff8111156120c257600080fd5b6120ce84828501611ee4565b91505092915050565b6000602082840312156120e957600080fd5b60006120f784828501611f67565b91505092915050565b60006020828403121561211257600080fd5b600061212084828501611f7c565b91505092915050565b60006020828403121561213b57600080fd5b600061214984828501611f91565b91505092915050565b60006020828403121561216457600080fd5b600061217284828501611fa6565b91505092915050565b600061218783836121a2565b60208301905092915050565b61219c81612ba0565b82525050565b6121ab81612b4b565b82525050565b6121ba81612b4b565b82525050565b60006121cb82612af0565b6121d58185612b1e565b93506121e083612ae0565b8060005b838110156122115781516121f8888261217b565b975061220383612b11565b9250506001810190506121e4565b5085935050505092915050565b61222781612b5d565b82525050565b61223681612bb2565b82525050565b600061224782612b06565b6122518185612b3a565b9350612261818560208601612be8565b61226a81612c1b565b840191505092915050565b600061228082612afb565b61228a8185612b3a565b935061229a818560208601612be8565b6122a381612c1b565b840191505092915050565b60006122bb602283612b3a565b91507f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612321601e83612b3a565b91507f456d657267656e637920726566756e642069736e277420656e61626c656400006000830152602082019050919050565b6000612361602683612b3a565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006123c7601b83612b3a565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000612407601d83612b3a565b91507f4465706f7369742065786365656473206d6178696d756d206c696d69740000006000830152602082019050919050565b6000612447601383612b3a565b91507f466565207472616e73666572206661696c6564000000000000000000000000006000830152602082019050919050565b6000612487601583612b3a565b91507f546f6b656e207472616e73666572206661696c656400000000000000000000006000830152602082019050919050565b60006124c7601383612b3a565b91507f436f756c646e27742062757920746f6b656e73000000000000000000000000006000830152602082019050919050565b6000612507602183612b3a565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061256d600d83612b3a565b91507f526566756e64206661696c6564000000000000000000000000000000000000006000830152602082019050919050565b60006125ad601183612b3a565b91507f4e6f7468696e6720746f20726566756e640000000000000000000000000000006000830152602082019050919050565b60006125ed602083612b3a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061262d602e83612b3a565b91507f436f6e747261637420696e7374616e63652068617320616c726561647920626560008301527f656e20696e697469616c697a65640000000000000000000000000000000000006020830152604082019050919050565b6000612693601e83612b3a565b91507f5265636569766520726566756e6420746f206f776e6572206661696c656400006000830152602082019050919050565b60006126d3602983612b3a565b91507f54686520766f74696e67207068617365206973206e6f742063757272656e746c60008301527f792072756e6e696e6700000000000000000000000000000000000000000000006020830152604082019050919050565b6000612739600083612b2f565b9150600082019050919050565b61274f81612b89565b82525050565b60006127608261272c565b9150819050919050565b600060208201905061277f60008301846121b1565b92915050565b600060208201905061279a6000830184612193565b92915050565b60006040820190506127b560008301856121b1565b6127c26020830184612746565b9392505050565b60006060820190506127de60008301866121b1565b6127eb6020830185612746565b81810360408301526127fd8184612275565b9050949350505050565b600060208201905061281c600083018461221e565b92915050565b6000608082019050612837600083018761222d565b818103602083015261284981866121c0565b90506128586040830185612193565b6128656060830184612746565b95945050505050565b60006020820190508181036000830152612888818461223c565b905092915050565b600060208201905081810360008301526128a9816122ae565b9050919050565b600060208201905081810360008301526128c981612314565b9050919050565b600060208201905081810360008301526128e981612354565b9050919050565b60006020820190508181036000830152612909816123ba565b9050919050565b60006020820190508181036000830152612929816123fa565b9050919050565b600060208201905081810360008301526129498161243a565b9050919050565b600060208201905081810360008301526129698161247a565b9050919050565b60006020820190508181036000830152612989816124ba565b9050919050565b600060208201905081810360008301526129a9816124fa565b9050919050565b600060208201905081810360008301526129c981612560565b9050919050565b600060208201905081810360008301526129e9816125a0565b9050919050565b60006020820190508181036000830152612a09816125e0565b9050919050565b60006020820190508181036000830152612a2981612620565b9050919050565b60006020820190508181036000830152612a4981612686565b9050919050565b60006020820190508181036000830152612a69816126c6565b9050919050565b6000602082019050612a856000830184612746565b92915050565b6000604051905081810181811067ffffffffffffffff82111715612aae57600080fd5b8060405250919050565b600067ffffffffffffffff821115612acf57600080fd5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612b5682612b69565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612bab82612bc4565b9050919050565b6000612bbd82612b89565b9050919050565b6000612bcf82612bd6565b9050919050565b6000612be182612b69565b9050919050565b60005b83811015612c06578082015181840152602081019050612beb565b83811115612c15576000848401525b50505050565b6000601f19601f8301169050919050565b612c3581612b4b565b8114612c4057600080fd5b50565b612c4c81612b5d565b8114612c5757600080fd5b50565b612c6381612b89565b8114612c6e57600080fd5b50565b612c7a81612b93565b8114612c8557600080fd5b5056fea2646970667358221220f2a88d251c31c8d167fb384da08c9389158d21898e9809defd91de7af4d76e4964736f6c63430006020033
Deployed Bytecode Sourcemap
26815:4929:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31256:12;31274:7;:5;:7::i;:::-;:12;;31293:9;31274:33;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;31255:52:0;;;31326:7;31318:50;;;;;;;;;;;;;;;;;;;;;;31217:159;26815:4929;;;;;27150:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27150:32:0;;;:::i;:::-;;;;;;;;;;;;;;;;30621:155;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30621:155:0;;;:::i;:::-;;28240:450;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28240:450:0;;;;;;;;;;;;;;;;:::i;:::-;;27437:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27437:34:0;;;:::i;:::-;;;;;;;;;;;;;;;;31403:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31403:112:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2708:148;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2708:148:0;;;:::i;:::-;;27404:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27404:26:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2066:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2066:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;27695:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27695:138:0;;;;;;;;;;;;;;;;:::i;:::-;;31523:99;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31523:99:0;;;:::i;:::-;;;;;;;;;;;;;;;;31630:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31630:109:0;;;:::i;:::-;;;;;;;;;;;;;;;;27861:371;;;;;;;;;;;;;;;;:::i;:::-;;3011:244;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3011:244:0;;;;;;;;;;;;;;;;:::i;:::-;;30784:391;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30784:391:0;;;;;;;;;;;;;;;;:::i;:::-;;28698:1760;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28698:1760:0;;;;;;;;;;;;;;;;:::i;:::-;;27116:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27116:27:0;;;:::i;:::-;;;;;;;;;;;;;;;;30506:107;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30506:107:0;;;:::i;:::-;;2066:79;2104:7;2131:6;;;;;;;;;;;2124:13;;2066:79;:::o;27150:32::-;;;;;;;;;;;;;:::o;30621:155::-;30667:9;30679:1;30667:13;;30662:107;30686:22;:13;:20;:22::i;:::-;30682:1;:26;30662:107;;;30730:27;30737:19;30754:1;30737:13;:16;;:19;;;;:::i;:::-;30730:6;:27::i;:::-;30710:3;;;;;30662:107;;;;30621:155::o;28240:450::-;2288:12;:10;:12::i;:::-;2278:22;;:6;;;;;;;;;;;:22;;;2270:67;;;;;;;;;;;;;;;;;;;;;;28375:9:::1;;28368:16;;;;:::i;:::-;28405:5;28395:7;;:15;;;;;;;;;;;;;;;;;;28436:5;28421:12;;:20;;;;;;;;;;;;;;;;;;28474:18;28452:19;:40;;;;28510:7;28520:1:::0;28510:11:::1;;28505:153;28527:9;;:16;;28523:1;:20;;;28505:153;;;28565:9;28580:65;;;;;;;;28600:9;;28610:1;28600:12;;;;;;;;;;;;;;;;;;;;;;;;28580:65;;;;;;28624:1;28580:65;;;;28634:5;;28640:1;28634:8;;;;;;;;;;;;;;;43:11:-1;30:25;137:1;131:4;127:12;116:8;100:14;96:29;92:48;72:18;68:73;58:2;;155:1;152::::0;145:12:::1;58:2;188:18;178:8;174:33;162:45;;0:210;29:8;16:22;6:32;;69:4;59:8;55:19;43:31;;93:18;85:6;82:30;79:2;;;125:1;122::::0;115:12:::1;79:2;183:4;175:6;171:17;155:14;151:38;141:8;137:53;134:2;;;203:1;200::::0;193:12:::1;134:2;28580:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;28580:65:0;;;;;;;;::::0;28565:81:::1;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;28565:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28545:3;;;;;28505:153;;;;28678:4;28668:7;;:14;;;;;;;;;;;;;;;;;;28240:450:::0;;;;;:::o;27437:34::-;;;;:::o;31403:112::-;31462:7;31489:9;:18;31499:7;31489:18;;;;;;;;;;;;;;;;31482:25;;31403:112;;;:::o;2708:148::-;2288:12;:10;:12::i;:::-;2278:22;;:6;;;;;;;;;;;:22;;;2270:67;;;;;;;;;;;;;;;;;;;;;;2815:1:::1;2778:40;;2799:6;::::0;::::1;;;;;;;;;2778:40;;;;;;;;;;;;2846:1;2829:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2708:148::o:0;27404:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27695:138::-;4378:12;;;;;;;;;;;:31;;;;4394:15;:13;:15::i;:::-;4378:31;:47;;;;4414:11;;;;;;;;;;;4413:12;4378:47;4370:106;;;;;;;;;;;;;;;;;;;;;;4485:19;4508:12;;;;;;;;;;;4507:13;4485:35;;4531:14;4527:83;;;4571:4;4556:12;;:19;;;;;;;;;;;;;;;;;;4598:4;4584:11;;:18;;;;;;;;;;;;;;;;;;4527:83;27807:17:::1;27772:13;;:53;;;;;;;;;;;;;;;;;;4632:14:::0;4628:57;;;4672:5;4657:12;;:20;;;;;;;;;;;;;;;;;;4628:57;27695:138;;:::o;31523:99::-;31571:7;31598:9;:16;;;;31591:23;;31523:99;:::o;31630:109::-;31682:7;31709:22;:13;:20;:22::i;:::-;31702:29;;31630:109;:::o;27861:371::-;27589:7;;;;;;;;;;;27581:61;;;;;;;;;;;;;;;;;;;;;;27928:18:::1;27973:9;27949;:21;27959:10;27949:21;;;;;;;;;;;;;;;;:33;27928:54;;27099:8;28001:10;:25;;27993:67;;;;;;;;;;;;;;;;;;;;;;28095:10;28071:9;:21;28081:10;28071:21;;;;;;;;;;;;;;;:34;;;;28144:40;28174:9;28144;28154:5;28144:16;;;;;;;;;;;;;;;;;;;;:25;;;:29;;:40;;;;:::i;:::-;28116:9;28126:5;28116:16;;;;;;;;;;;;;;;;;;;;:25;;:68;;;;28195:29;28213:10;28195:13;:17;;:29;;;;:::i;:::-;;27653:1;27861:371:::0;:::o;3011:244::-;2288:12;:10;:12::i;:::-;2278:22;;:6;;;;;;;;;;;:22;;;2270:67;;;;;;;;;;;;;;;;;;;;;;3120:1:::1;3100:22;;:8;:22;;;;3092:73;;;;;;;;;;;;;;;;;;;;;;3210:8;3181:38;;3202:6;::::0;::::1;;;;;;;;;3181:38;;;;;;;;;;;;3239:8;3230:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;3011:244:::0;:::o;30784:391::-;30843:12;;;;;;;;;;;30835:55;;;;;;;;;;;;;;;;;;;;;;30901:15;30919:9;:18;30929:7;30919:18;;;;;;;;;;;;;;;;30901:36;;30966:1;30956:7;:11;30948:41;;;;;;;;;;;;;;;;;;;;;;31021:1;31000:9;:18;31010:7;31000:18;;;;;;;;;;;;;;;:22;;;;31033:29;31054:7;31033:13;:20;;:29;;;;:::i;:::-;;31074:12;31092:7;:12;;31111:7;31092:31;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;31073:50:0;;;31142:7;31134:33;;;;;;;;;;;;;;;;;;;;;;30784:391;;;:::o;28698:1760::-;2288:12;:10;:12::i;:::-;2278:22;;:6;;;;;;;;;;;:22;;;2270:67;;;;;;;;;;;;;;;;;;;;;;28773:5:::1;28763:7;;:15;;;;;;;;;;;;;;;;;;28823:22;28861:7:::0;28871:1:::1;28861:11;;28856:193;28878:9;:16;;;;28874:1;:20;;;28856:193;;;28945:9;28955:16;28945:27;;;;;;;;;;;;;;;;;;;;:36;;;28920:9;28930:1;28920:12;;;;;;;;;;;;;;;;;;;;:21;;;:61;28916:122;;29021:1;29002:20;;28916:122;28896:3;;;;;28856:193;;;;29105:15;29123:21;29105:39;;29191:19;29213:49;29256:4;29213:30;27013:2;29213:7;:11;;:30;;;;:::i;:::-;:34;;:49;;;;:::i;:::-;29191:71;;29274:12;29292:7;:5;:7::i;:::-;:12;;29311:11;29292:35;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;29273:54:0;;;29346:7;29338:39;;;;;;;;;;;;;;;;;;;;;;29431:20;29454:9;29464:16;29454:27;;;;;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;29431:59;;29501:14;29518:21;29501:38;;29552:21;29590:1;29576:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;29576:16:0;;;;29552:40;;29613:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;29613:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29613:20:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29613:20:0;;;;;;;;;29603:4;29608:1;29603:7;;;;;;;;;;;;;:30;;;;;;;;;::::0;::::1;29654:12;29644:4;29649:1;29644:7;;;;;;;;;;;;;:22;;;;;;;;;::::0;::::1;29677:13;;;;;;;;;;;:35;;;29719:6;29727:1;29730:4;29744;29751:8;29677:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;29677:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29677:83:0;;;;;;;39:16:-1;36:1;17:17;2:54;29677:83:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29677:83:0;;;;;;;;;;29771:12;29793;29771:35;;29819:20;29842:5;:15;;;29866:4;29842:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;29842:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29842:30:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29842:30:0;;;;;;;;;29819:53;;29906:1;29891:12;:16;29883:48;;;;;;;;;;;;;;;;;;;;;;30011:438;30043:1;30018:22;:13;:20;:22::i;:::-;:26;30011:438;;;30061:19;30083;30100:1;30083:13;:16;;:19;;;;:::i;:::-;30061:41;;30139:18;30160:53;30205:7;30160:40;30177:9;:22;30187:11;30177:22;;;;;;;;;;;;;;;;30160:12;:16;;:40;;;;:::i;:::-;:44;;:53;;;;:::i;:::-;30139:74;;30228:33;30249:11;30228:13;:20;;:33;;;;:::i;:::-;;30327:9;:22;30337:11;30327:22;;;;;;;;;;;;;;;30320:29;;;30372:5;:14;;;30387:11;30400:10;30372:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;30372:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30372:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30372:39:0;;;;;;;;;30364:73;;;;;;;;;;;;;;;;;;;;;;30011:438;;;;;2348:1;;;;;;;;;28698:1760:::0;:::o;27116:27::-;;;;;;;;;;;;;:::o;30506:107::-;2288:12;:10;:12::i;:::-;2278:22;;:6;;;;;;;;;;;:22;;;2270:67;;;;;;;;;;;;;;;;;;;;;;30574:4:::1;30559:12;;:19;;;;;;;;;;;;;;;;;;30596:9;;30589:16;;;;:::i;:::-;30506:107::o:0;16616:117::-;16679:7;16706:19;16714:3;:10;;16706:7;:19::i;:::-;16699:26;;16616:117;;;:::o;17077:149::-;17151:7;17194:22;17198:3;:10;;17210:5;17194:3;:22::i;:::-;17186:31;;17171:47;;17077:149;;;;:::o;622:106::-;675:15;710:10;703:17;;622:106;:::o;4779:508::-;4826:4;5173:12;5196:4;5173:28;;5208:10;5254:4;5242:17;5236:23;;5280:1;5274:2;:7;5267:14;;;;4779:508;:::o;6323:181::-;6381:7;6401:9;6417:1;6413;:5;6401:17;;6442:1;6437;:6;;6429:46;;;;;;;;;;;;;;;;;;;;;;6495:1;6488:8;;;6323:181;;;;:::o;15818:143::-;15888:4;15912:41;15917:3;:10;;15945:5;15937:14;;15929:23;;15912:4;:41::i;:::-;15905:48;;15818:143;;;;:::o;16137:149::-;16210:4;16234:44;16242:3;:10;;16270:5;16262:14;;16254:23;;16234:7;:44::i;:::-;16227:51;;16137:149;;;;:::o;7677:471::-;7735:7;7985:1;7980;:6;7976:47;;;8010:1;8003:8;;;;7976:47;8035:9;8051:1;8047;:5;8035:17;;8080:1;8075;8071;:5;;;;;;:10;8063:56;;;;;;;;;;;;;;;;;;;;;;8139:1;8132:8;;;7677:471;;;;;:::o;8624:132::-;8682:7;8709:39;8713:1;8716;8709:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8702:46;;8624:132;;;;:::o;14907:109::-;14963:7;14990:3;:11;;:18;;;;14983:25;;14907:109;;;:::o;15360:204::-;15427:7;15476:5;15455:3;:11;;:18;;;;:26;15447:73;;;;;;;;;;;;;;;;;;;;;;15538:3;:11;;15550:5;15538:18;;;;;;;;;;;;;;;;15531:25;;15360:204;;;;:::o;12472:414::-;12535:4;12557:21;12567:3;12572:5;12557:9;:21::i;:::-;12552:327;;12595:3;:11;;12612:5;12595:23;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;12595:23:0;;;;;;;;;;;;;;;;;;;12778:3;:11;;:18;;;;12756:3;:12;;:19;12769:5;12756:19;;;;;;;;;;;:40;;;;12818:4;12811:11;;;;12552:327;12862:5;12855:12;;12472:414;;;;;:::o;13062:1544::-;13128:4;13246:18;13267:3;:12;;:19;13280:5;13267:19;;;;;;;;;;;;13246:40;;13317:1;13303:10;:15;13299:1300;;13665:21;13702:1;13689:10;:14;13665:38;;13718:17;13759:1;13738:3;:11;;:18;;;;:22;13718:42;;14005:17;14025:3;:11;;14037:9;14025:22;;;;;;;;;;;;;;;;14005:42;;14171:9;14142:3;:11;;14154:13;14142:26;;;;;;;;;;;;;;;:38;;;;14290:1;14274:13;:17;14248:3;:12;;:23;14261:9;14248:23;;;;;;;;;;;:43;;;;14400:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;14495:3;:12;;:19;14508:5;14495:19;;;;;;;;;;;14488:26;;;14538:4;14531:11;;;;;;;;13299:1300;14582:5;14575:12;;;13062:1544;;;;;:::o;9252:278::-;9338:7;9370:1;9366;:5;9373:12;9358:28;;;;;;;;;;;;;;;;;;;;;;;;;9397:9;9413:1;9409;:5;;;;;;9397:17;;9521:1;9514:8;;;9252:278;;;;;:::o;14692:129::-;14765:4;14812:1;14789:3;:12;;:19;14802:5;14789:19;;;;;;;;;;;;:24;;14782:31;;14692:129;;;;:::o;26815:4929::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;301:352;;;431:3;424:4;416:6;412:17;408:27;398:2;;449:1;446;439:12;398:2;482:6;469:20;459:30;;509:18;501:6;498:30;495:2;;;541:1;538;531:12;495:2;575:4;567:6;563:17;551:29;;626:3;618:4;610:6;606:17;596:8;592:32;589:41;586:2;;;643:1;640;633:12;586:2;391:262;;;;;;678:360;;;816:3;809:4;801:6;797:17;793:27;783:2;;834:1;831;824:12;783:2;867:6;854:20;844:30;;894:18;886:6;883:30;880:2;;;926:1;923;916:12;880:2;960:4;952:6;948:17;936:29;;1011:3;1003:4;995:6;991:17;981:8;977:32;974:41;971:2;;;1028:1;1025;1018:12;971:2;776:262;;;;;;1064:722;;1192:3;1185:4;1177:6;1173:17;1169:27;1159:2;;1210:1;1207;1200:12;1159:2;1240:6;1234:13;1262:80;1277:64;1334:6;1277:64;;;1262:80;;;1253:89;;1359:5;1384:6;1377:5;1370:21;1414:4;1406:6;1402:17;1392:27;;1436:4;1431:3;1427:14;1420:21;;1489:6;1536:3;1528:4;1520:6;1516:17;1511:3;1507:27;1504:36;1501:2;;;1553:1;1550;1543:12;1501:2;1578:1;1563:217;1588:6;1585:1;1582:13;1563:217;;;1646:3;1668:48;1712:3;1700:10;1668:48;;;1663:3;1656:61;1740:4;1735:3;1731:14;1724:21;;1768:4;1763:3;1759:14;1752:21;;1620:160;1610:1;1607;1603:9;1598:14;;1563:217;;;1567:14;1152:634;;;;;;;;1794:128;;1875:6;1869:13;1860:22;;1887:30;1911:5;1887:30;;;1854:68;;;;;1929:130;;2009:6;1996:20;1987:29;;2021:33;2048:5;2021:33;;;1981:78;;;;;2066:134;;2150:6;2144:13;2135:22;;2162:33;2189:5;2162:33;;;2129:71;;;;;2207:126;;2285:6;2272:20;2263:29;;2297:31;2322:5;2297:31;;;2257:76;;;;;2340:241;;2444:2;2432:9;2423:7;2419:23;2415:32;2412:2;;;2460:1;2457;2450:12;2412:2;2495:1;2512:53;2557:7;2548:6;2537:9;2533:22;2512:53;;;2502:63;;2474:97;2406:175;;;;;2588:263;;2703:2;2691:9;2682:7;2678:23;2674:32;2671:2;;;2719:1;2716;2709:12;2671:2;2754:1;2771:64;2827:7;2818:6;2807:9;2803:22;2771:64;;;2761:74;;2733:108;2665:186;;;;;2858:819;;;;;;3074:2;3062:9;3053:7;3049:23;3045:32;3042:2;;;3090:1;3087;3080:12;3042:2;3153:1;3142:9;3138:17;3125:31;3176:18;3168:6;3165:30;3162:2;;;3208:1;3205;3198:12;3162:2;3236:80;3308:7;3299:6;3288:9;3284:22;3236:80;;;3226:90;;;;3104:218;3381:2;3370:9;3366:18;3353:32;3405:18;3397:6;3394:30;3391:2;;;3437:1;3434;3427:12;3391:2;3465:88;3545:7;3536:6;3525:9;3521:22;3465:88;;;3455:98;;;;3332:227;3590:2;3608:53;3653:7;3644:6;3633:9;3629:22;3608:53;;;3598:63;;3569:98;3036:641;;;;;;;;;3684:392;;3824:2;3812:9;3803:7;3799:23;3795:32;3792:2;;;3840:1;3837;3830:12;3792:2;3896:1;3885:9;3881:17;3875:24;3919:18;3911:6;3908:30;3905:2;;;3951:1;3948;3941:12;3905:2;3971:89;4052:7;4043:6;4032:9;4028:22;3971:89;;;3961:99;;3854:212;3786:290;;;;;4083:257;;4195:2;4183:9;4174:7;4170:23;4166:32;4163:2;;;4211:1;4208;4201:12;4163:2;4246:1;4263:61;4316:7;4307:6;4296:9;4292:22;4263:61;;;4253:71;;4225:105;4157:183;;;;;4347:241;;4451:2;4439:9;4430:7;4426:23;4422:32;4419:2;;;4467:1;4464;4457:12;4419:2;4502:1;4519:53;4564:7;4555:6;4544:9;4540:22;4519:53;;;4509:63;;4481:97;4413:175;;;;;4595:263;;4710:2;4698:9;4689:7;4685:23;4681:32;4678:2;;;4726:1;4723;4716:12;4678:2;4761:1;4778:64;4834:7;4825:6;4814:9;4810:22;4778:64;;;4768:74;;4740:108;4672:186;;;;;4865:237;;4967:2;4955:9;4946:7;4942:23;4938:32;4935:2;;;4983:1;4980;4973:12;4935:2;5018:1;5035:51;5078:7;5069:6;5058:9;5054:22;5035:51;;;5025:61;;4997:95;4929:173;;;;;5110;;5197:46;5239:3;5231:6;5197:46;;;5272:4;5267:3;5263:14;5249:28;;5190:93;;;;;5291:142;5382:45;5421:5;5382:45;;;5377:3;5370:58;5364:69;;;5440:103;5513:24;5531:5;5513:24;;;5508:3;5501:37;5495:48;;;5550:113;5633:24;5651:5;5633:24;;;5628:3;5621:37;5615:48;;;5701:690;;5846:54;5894:5;5846:54;;;5913:86;5992:6;5987:3;5913:86;;;5906:93;;6020:56;6070:5;6020:56;;;6096:7;6124:1;6109:260;6134:6;6131:1;6128:13;6109:260;;;6201:6;6195:13;6222:63;6281:3;6266:13;6222:63;;;6215:70;;6302:60;6355:6;6302:60;;;6292:70;;6166:203;6156:1;6153;6149:9;6144:14;;6109:260;;;6113:14;6382:3;6375:10;;5825:566;;;;;;;;6399:104;6476:21;6491:5;6476:21;;;6471:3;6464:34;6458:45;;;6510:142;6601:45;6640:5;6601:45;;;6596:3;6589:58;6583:69;;;6659:347;;6771:39;6804:5;6771:39;;;6822:71;6886:6;6881:3;6822:71;;;6815:78;;6898:52;6943:6;6938:3;6931:4;6924:5;6920:16;6898:52;;;6971:29;6993:6;6971:29;;;6966:3;6962:39;6955:46;;6751:255;;;;;;7013:339;;7121:35;7150:5;7121:35;;;7168:71;7232:6;7227:3;7168:71;;;7161:78;;7244:52;7289:6;7284:3;7277:4;7270:5;7266:16;7244:52;;;7317:29;7339:6;7317:29;;;7312:3;7308:39;7301:46;;7101:251;;;;;;7360:371;;7520:67;7584:2;7579:3;7520:67;;;7513:74;;7620:34;7616:1;7611:3;7607:11;7600:55;7689:4;7684:2;7679:3;7675:12;7668:26;7722:2;7717:3;7713:12;7706:19;;7506:225;;;;7740:330;;7900:67;7964:2;7959:3;7900:67;;;7893:74;;8000:32;7996:1;7991:3;7987:11;7980:53;8061:2;8056:3;8052:12;8045:19;;7886:184;;;;8079:375;;8239:67;8303:2;8298:3;8239:67;;;8232:74;;8339:34;8335:1;8330:3;8326:11;8319:55;8408:8;8403:2;8398:3;8394:12;8387:30;8445:2;8440:3;8436:12;8429:19;;8225:229;;;;8463:327;;8623:67;8687:2;8682:3;8623:67;;;8616:74;;8723:29;8719:1;8714:3;8710:11;8703:50;8781:2;8776:3;8772:12;8765:19;;8609:181;;;;8799:329;;8959:67;9023:2;9018:3;8959:67;;;8952:74;;9059:31;9055:1;9050:3;9046:11;9039:52;9119:2;9114:3;9110:12;9103:19;;8945:183;;;;9137:319;;9297:67;9361:2;9356:3;9297:67;;;9290:74;;9397:21;9393:1;9388:3;9384:11;9377:42;9447:2;9442:3;9438:12;9431:19;;9283:173;;;;9465:321;;9625:67;9689:2;9684:3;9625:67;;;9618:74;;9725:23;9721:1;9716:3;9712:11;9705:44;9777:2;9772:3;9768:12;9761:19;;9611:175;;;;9795:319;;9955:67;10019:2;10014:3;9955:67;;;9948:74;;10055:21;10051:1;10046:3;10042:11;10035:42;10105:2;10100:3;10096:12;10089:19;;9941:173;;;;10123:370;;10283:67;10347:2;10342:3;10283:67;;;10276:74;;10383:34;10379:1;10374:3;10370:11;10363:55;10452:3;10447:2;10442:3;10438:12;10431:25;10484:2;10479:3;10475:12;10468:19;;10269:224;;;;10502:313;;10662:67;10726:2;10721:3;10662:67;;;10655:74;;10762:15;10758:1;10753:3;10749:11;10742:36;10806:2;10801:3;10797:12;10790:19;;10648:167;;;;10824:317;;10984:67;11048:2;11043:3;10984:67;;;10977:74;;11084:19;11080:1;11075:3;11071:11;11064:40;11132:2;11127:3;11123:12;11116:19;;10970:171;;;;11150:332;;11310:67;11374:2;11369:3;11310:67;;;11303:74;;11410:34;11406:1;11401:3;11397:11;11390:55;11473:2;11468:3;11464:12;11457:19;;11296:186;;;;11491:383;;11651:67;11715:2;11710:3;11651:67;;;11644:74;;11751:34;11747:1;11742:3;11738:11;11731:55;11820:16;11815:2;11810:3;11806:12;11799:38;11865:2;11860:3;11856:12;11849:19;;11637:237;;;;11883:330;;12043:67;12107:2;12102:3;12043:67;;;12036:74;;12143:32;12139:1;12134:3;12130:11;12123:53;12204:2;12199:3;12195:12;12188:19;;12029:184;;;;12222:378;;12382:67;12446:2;12441:3;12382:67;;;12375:74;;12482:34;12478:1;12473:3;12469:11;12462:55;12551:11;12546:2;12541:3;12537:12;12530:33;12591:2;12586:3;12582:12;12575:19;;12368:232;;;;12609:296;;12786:83;12867:1;12862:3;12786:83;;;12779:90;;12897:1;12892:3;12888:11;12881:18;;12772:133;;;;12913:113;12996:24;13014:5;12996:24;;;12991:3;12984:37;12978:48;;;13033:370;;13231:147;13374:3;13231:147;;;13224:154;;13395:3;13388:10;;13212:191;;;;13410:213;;13528:2;13517:9;13513:18;13505:26;;13542:71;13610:1;13599:9;13595:17;13586:6;13542:71;;;13499:124;;;;;13630:229;;13756:2;13745:9;13741:18;13733:26;;13770:79;13846:1;13835:9;13831:17;13822:6;13770:79;;;13727:132;;;;;13866:324;;14012:2;14001:9;13997:18;13989:26;;14026:71;14094:1;14083:9;14079:17;14070:6;14026:71;;;14108:72;14176:2;14165:9;14161:18;14152:6;14108:72;;;13983:207;;;;;;14197:515;;14387:2;14376:9;14372:18;14364:26;;14401:71;14469:1;14458:9;14454:17;14445:6;14401:71;;;14483:72;14551:2;14540:9;14536:18;14527:6;14483:72;;;14603:9;14597:4;14593:20;14588:2;14577:9;14573:18;14566:48;14628:74;14697:4;14688:6;14628:74;;;14620:82;;14358:354;;;;;;;14719:201;;14831:2;14820:9;14816:18;14808:26;;14845:65;14907:1;14896:9;14892:17;14883:6;14845:65;;;14802:118;;;;;14927:727;;15195:3;15184:9;15180:19;15172:27;;15210:79;15286:1;15275:9;15271:17;15262:6;15210:79;;;15337:9;15331:4;15327:20;15322:2;15311:9;15307:18;15300:48;15362:108;15465:4;15456:6;15362:108;;;15354:116;;15481:80;15557:2;15546:9;15542:18;15533:6;15481:80;;;15572:72;15640:2;15629:9;15625:18;15616:6;15572:72;;;15166:488;;;;;;;;15661:301;;15799:2;15788:9;15784:18;15776:26;;15849:9;15843:4;15839:20;15835:1;15824:9;15820:17;15813:47;15874:78;15947:4;15938:6;15874:78;;;15866:86;;15770:192;;;;;15969:407;;16160:2;16149:9;16145:18;16137:26;;16210:9;16204:4;16200:20;16196:1;16185:9;16181:17;16174:47;16235:131;16361:4;16235:131;;;16227:139;;16131:245;;;;16383:407;;16574:2;16563:9;16559:18;16551:26;;16624:9;16618:4;16614:20;16610:1;16599:9;16595:17;16588:47;16649:131;16775:4;16649:131;;;16641:139;;16545:245;;;;16797:407;;16988:2;16977:9;16973:18;16965:26;;17038:9;17032:4;17028:20;17024:1;17013:9;17009:17;17002:47;17063:131;17189:4;17063:131;;;17055:139;;16959:245;;;;17211:407;;17402:2;17391:9;17387:18;17379:26;;17452:9;17446:4;17442:20;17438:1;17427:9;17423:17;17416:47;17477:131;17603:4;17477:131;;;17469:139;;17373:245;;;;17625:407;;17816:2;17805:9;17801:18;17793:26;;17866:9;17860:4;17856:20;17852:1;17841:9;17837:17;17830:47;17891:131;18017:4;17891:131;;;17883:139;;17787:245;;;;18039:407;;18230:2;18219:9;18215:18;18207:26;;18280:9;18274:4;18270:20;18266:1;18255:9;18251:17;18244:47;18305:131;18431:4;18305:131;;;18297:139;;18201:245;;;;18453:407;;18644:2;18633:9;18629:18;18621:26;;18694:9;18688:4;18684:20;18680:1;18669:9;18665:17;18658:47;18719:131;18845:4;18719:131;;;18711:139;;18615:245;;;;18867:407;;19058:2;19047:9;19043:18;19035:26;;19108:9;19102:4;19098:20;19094:1;19083:9;19079:17;19072:47;19133:131;19259:4;19133:131;;;19125:139;;19029:245;;;;19281:407;;19472:2;19461:9;19457:18;19449:26;;19522:9;19516:4;19512:20;19508:1;19497:9;19493:17;19486:47;19547:131;19673:4;19547:131;;;19539:139;;19443:245;;;;19695:407;;19886:2;19875:9;19871:18;19863:26;;19936:9;19930:4;19926:20;19922:1;19911:9;19907:17;19900:47;19961:131;20087:4;19961:131;;;19953:139;;19857:245;;;;20109:407;;20300:2;20289:9;20285:18;20277:26;;20350:9;20344:4;20340:20;20336:1;20325:9;20321:17;20314:47;20375:131;20501:4;20375:131;;;20367:139;;20271:245;;;;20523:407;;20714:2;20703:9;20699:18;20691:26;;20764:9;20758:4;20754:20;20750:1;20739:9;20735:17;20728:47;20789:131;20915:4;20789:131;;;20781:139;;20685:245;;;;20937:407;;21128:2;21117:9;21113:18;21105:26;;21178:9;21172:4;21168:20;21164:1;21153:9;21149:17;21142:47;21203:131;21329:4;21203:131;;;21195:139;;21099:245;;;;21351:407;;21542:2;21531:9;21527:18;21519:26;;21592:9;21586:4;21582:20;21578:1;21567:9;21563:17;21556:47;21617:131;21743:4;21617:131;;;21609:139;;21513:245;;;;21765:407;;21956:2;21945:9;21941:18;21933:26;;22006:9;22000:4;21996:20;21992:1;21981:9;21977:17;21970:47;22031:131;22157:4;22031:131;;;22023:139;;21927:245;;;;22179:213;;22297:2;22286:9;22282:18;22274:26;;22311:71;22379:1;22368:9;22364:17;22355:6;22311:71;;;22268:124;;;;;22399:256;;22461:2;22455:9;22445:19;;22499:4;22491:6;22487:17;22598:6;22586:10;22583:22;22562:18;22550:10;22547:34;22544:62;22541:2;;;22619:1;22616;22609:12;22541:2;22639:10;22635:2;22628:22;22439:216;;;;;22662:304;;22821:18;22813:6;22810:30;22807:2;;;22853:1;22850;22843:12;22807:2;22888:4;22880:6;22876:17;22868:25;;22951:4;22945;22941:15;22933:23;;22744:222;;;;22973:151;;23059:3;23051:11;;23097:4;23092:3;23088:14;23080:22;;23045:79;;;;23131:137;;23240:5;23234:12;23224:22;;23205:63;;;;23275:118;;23365:5;23359:12;23349:22;;23330:63;;;;23400:122;;23494:5;23488:12;23478:22;;23459:63;;;;23529:108;;23627:4;23622:3;23618:14;23610:22;;23604:33;;;;23645:178;;23775:6;23770:3;23763:19;23812:4;23807:3;23803:14;23788:29;;23756:67;;;;;23832:144;;23967:3;23952:18;;23945:31;;;;;23985:163;;24100:6;24095:3;24088:19;24137:4;24132:3;24128:14;24113:29;;24081:67;;;;;24156:91;;24218:24;24236:5;24218:24;;;24207:35;;24201:46;;;;24254:85;;24327:5;24320:13;24313:21;24302:32;;24296:43;;;;24346:121;;24419:42;24412:5;24408:54;24397:65;;24391:76;;;;24474:72;;24536:5;24525:16;;24519:27;;;;24553:81;;24624:4;24617:5;24613:16;24602:27;;24596:38;;;;24641:129;;24728:37;24759:5;24728:37;;;24715:50;;24709:61;;;;24777:116;;24864:24;24882:5;24864:24;;;24851:37;;24845:48;;;;24900:121;;24979:37;25010:5;24979:37;;;24966:50;;24960:61;;;;25028:108;;25107:24;25125:5;25107:24;;;25094:37;;25088:48;;;;25144:268;25209:1;25216:101;25230:6;25227:1;25224:13;25216:101;;;25306:1;25301:3;25297:11;25291:18;25287:1;25282:3;25278:11;25271:39;25252:2;25249:1;25245:10;25240:15;;25216:101;;;25332:6;25329:1;25326:13;25323:2;;;25397:1;25388:6;25383:3;25379:16;25372:27;25323:2;25193:219;;;;;25420:97;;25508:2;25504:7;25499:2;25492:5;25488:14;25484:28;25474:38;;25468:49;;;;25525:117;25594:24;25612:5;25594:24;;;25587:5;25584:35;25574:2;;25633:1;25630;25623:12;25574:2;25568:74;;25649:111;25715:21;25730:5;25715:21;;;25708:5;25705:32;25695:2;;25751:1;25748;25741:12;25695:2;25689:71;;25767:117;25836:24;25854:5;25836:24;;;25829:5;25826:35;25816:2;;25875:1;25872;25865:12;25816:2;25810:74;;25891:113;25958:22;25974:5;25958:22;;;25951:5;25948:33;25938:2;;25995:1;25992;25985:12;25938:2;25932:72;
Swarm Source
ipfs://f2a88d251c31c8d167fb384da08c9389158d21898e9809defd91de7af4d76e49
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 28 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.