Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 57 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 15912994 | 729 days ago | IN | 0 ETH | 0.00142279 | ||||
Withdraw | 15366280 | 809 days ago | IN | 0 ETH | 0.00299773 | ||||
Withdraw | 15341372 | 813 days ago | IN | 0 ETH | 0.00328728 | ||||
Withdraw | 15116702 | 848 days ago | IN | 0 ETH | 0.00641188 | ||||
Withdraw | 14514947 | 946 days ago | IN | 0 ETH | 0.00768505 | ||||
Withdraw | 13809129 | 1056 days ago | IN | 0 ETH | 0.00519238 | ||||
Withdraw | 13482456 | 1107 days ago | IN | 0 ETH | 0.01418941 | ||||
Deposit | 13436471 | 1115 days ago | IN | 0 ETH | 0.0079216 | ||||
Withdraw | 13436229 | 1115 days ago | IN | 0 ETH | 0.00596679 | ||||
Withdraw | 13415288 | 1118 days ago | IN | 0 ETH | 0.00818338 | ||||
Withdraw | 13355761 | 1127 days ago | IN | 0 ETH | 0.01197587 | ||||
Withdraw | 13330437 | 1131 days ago | IN | 0 ETH | 0.01137162 | ||||
Deposit | 13225668 | 1147 days ago | IN | 0 ETH | 0.00970251 | ||||
Approve | 13137641 | 1161 days ago | IN | 0 ETH | 0.00357902 | ||||
Deposit | 13014765 | 1180 days ago | IN | 0 ETH | 0.00375058 | ||||
Transfer | 13009188 | 1181 days ago | IN | 0 ETH | 0.00351336 | ||||
Withdraw | 13003574 | 1182 days ago | IN | 0 ETH | 0.00346279 | ||||
Deposit | 12954898 | 1189 days ago | IN | 0 ETH | 0.004831 | ||||
Deposit | 12946749 | 1191 days ago | IN | 0 ETH | 0.004207 | ||||
Withdraw | 12945829 | 1191 days ago | IN | 0 ETH | 0.0025031 | ||||
Deposit | 12906522 | 1197 days ago | IN | 0 ETH | 0.00139931 | ||||
Deposit | 12890286 | 1199 days ago | IN | 0 ETH | 0.0032106 | ||||
Deposit | 12885965 | 1200 days ago | IN | 0 ETH | 0.00191227 | ||||
Deposit | 12859207 | 1204 days ago | IN | 0 ETH | 0.00217219 | ||||
Withdraw | 12856509 | 1205 days ago | IN | 0 ETH | 0.00148405 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
fBTC
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-04-27 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; 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]; } // Bytes32Set struct Bytes32Set { 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(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, 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(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set 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(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, 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(uint160(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(uint160(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(uint160(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(uint160(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)); } } abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } // File: openzeppelin-solidity\contracts\token\ERC20\IERC20.sol /** * @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: openzeppelin-solidity\contracts\utils\Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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; } function ceil(uint a, uint m) internal pure returns (uint r) { return (a + m - 1) / m * m; } } contract fBTC is IERC20, ReentrancyGuard { using Address for address; using SafeMath for uint256; enum TxType { FromExcluded, ToExcluded, BothExcluded, Standard } mapping (address => uint256) private rBtcbBalance; mapping (address => uint256) private tBtcbBalance; mapping (address => mapping (address => uint256)) private _allowances; EnumerableSet.AddressSet excluded; uint256 private tBtcbSupply; uint256 private rBtcbSupply; uint256 private feesAccrued; string private _name = 'FEG Wrapped BTC'; string private _symbol = 'fBTC'; uint8 private _decimals = 8; address private op; address private op2; address public wBTC = 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599; event Deposit(address indexed dst, uint amount); event Withdrawal(address indexed src, uint amount); constructor () { op = address(0x4c9BC793716e8dC05d1F48D8cA8f84318Ec3043C); op2 = op; EnumerableSet.add(excluded, address(0)); // stablity - zen. emit Transfer(address(0), msg.sender, 0); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return tBtcbSupply; } function balanceOf(address account) public view override returns (uint256) { if (EnumerableSet.contains(excluded, account)) return tBtcbBalance[account]; (uint256 r, uint256 t) = currentSupply(); return (rBtcbBalance[account] * t) / r; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(msg.sender, spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, _allowances[sender][msg.sender] - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender] - subtractedValue); return true; } function isExcluded(address account) public view returns (bool) { return EnumerableSet.contains(excluded, account); } function totalFees() public view returns (uint256) { return feesAccrued; } function ClaimOPfee() public { require (msg.sender == op); uint256 transferToAmount = (IERC20(wBTC).balanceOf(address(this))) - (tBtcbSupply); _pushUnderlying(wBTC, op, transferToAmount); tBtcbSupply -= transferToAmount; } function deposit(uint256 _amount) public { require(_amount > 0, "can't deposit nothing"); _pullUnderlying(wBTC, msg.sender, _amount); (uint256 r, uint256 t) = currentSupply(); uint256 fee = _amount / 100; uint256 df = fee / 10; uint256 net = fee != 0 ? (_amount - (fee)) : _amount; tBtcbSupply += _amount; if(isExcluded(msg.sender)){ tBtcbBalance[msg.sender] += (_amount- fee); } feesAccrued += df; rBtcbBalance[op] += ((df * r) / t); rBtcbSupply += (((net + df) * r) / t); rBtcbBalance[msg.sender] += ((net * r) / t); emit Deposit(msg.sender, _amount); } function _pullUnderlying(address erc20, address from, uint amount) internal nonReentrant { bool xfer = IERC20(erc20).transferFrom(from, address(this), amount); require(xfer, "ERR_ERC20_FALSE"); } function withdraw(uint256 _amount) public { require(balanceOf(msg.sender) >= _amount && _amount <= totalSupply(), "invalid _amount"); (uint256 r, uint256 t) = currentSupply(); uint256 fee = _amount / 100; uint256 wf = fee / 10; uint256 net = _amount - fee; if(isExcluded(msg.sender)) { tBtcbBalance[msg.sender] -= _amount; rBtcbBalance[msg.sender] -= ((_amount * r) / t); } else { rBtcbBalance[msg.sender] -= ((_amount * r) / t); } tBtcbSupply -= (net + wf); rBtcbSupply -= (((net + wf) * r ) / t); rBtcbBalance[op] += ((wf * r) / t); feesAccrued += wf; _pushUnderlying(wBTC, msg.sender, net); emit Withdrawal(msg.sender, net); } function _pushUnderlying(address erc20, address to, uint amount) internal nonReentrant { bool xfer = IERC20(erc20).transfer(to, amount); require(xfer, "ERR_ERC20_FALSE"); } function rBtcbToEveryone(uint256 amt) public { require(!isExcluded(msg.sender), "not allowed"); (uint256 r, uint256 t) = currentSupply(); rBtcbBalance[msg.sender] -= ((amt * r) / t); rBtcbSupply -= ((amt * r) / t); feesAccrued += amt; } function excludeFromFees(address account) external { require(msg.sender == op2, "op only"); require(!EnumerableSet.contains(excluded, account), "address excluded"); if(rBtcbBalance[account] > 0) { (uint256 r, uint256 t) = currentSupply(); tBtcbBalance[account] = (rBtcbBalance[account] * (t)) / (r); } EnumerableSet.add(excluded, account); } function includeInFees(address account) external { require(msg.sender == op2, "op only"); require(EnumerableSet.contains(excluded, account), "address excluded"); tBtcbBalance[account] = 0; EnumerableSet.remove(excluded, account); } function tBtcbFromrBtcb(uint256 rBtcbAmount) external view returns (uint256) { (uint256 r, uint256 t) = currentSupply(); return (rBtcbAmount * t) / r; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function getTtype(address sender, address recipient) internal view returns (TxType t) { bool isSenderExcluded = EnumerableSet.contains(excluded, sender); bool isRecipientExcluded = EnumerableSet.contains(excluded, recipient); if (isSenderExcluded && !isRecipientExcluded) { t = TxType.FromExcluded; } else if (!isSenderExcluded && isRecipientExcluded) { t = TxType.ToExcluded; } else if (!isSenderExcluded && !isRecipientExcluded) { t = TxType.Standard; } else if (isSenderExcluded && isRecipientExcluded) { t = TxType.BothExcluded; } else { t = TxType.Standard; } return t; } function _transfer(address sender, address recipient, uint256 amt) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amt > 0, "Transfer amt must be greater than zero"); (uint256 r, uint256 t) = currentSupply(); uint256 fee = amt / 100; TxType tt = getTtype(sender, recipient); if (tt == TxType.ToExcluded) { rBtcbBalance[sender] -= ((amt * r) / t); tBtcbBalance[recipient] += (amt - fee); rBtcbBalance[recipient] += (((amt - fee) * r) / t); } else if (tt == TxType.FromExcluded) { tBtcbBalance[sender] -= (amt); rBtcbBalance[sender] -= ((amt * r) / t); rBtcbBalance[recipient] += (((amt - fee) * r) / t); } else if (tt == TxType.BothExcluded) { tBtcbBalance[sender] -= (amt); rBtcbBalance[sender] -= ((amt * r) / t); tBtcbBalance[recipient] += (amt - fee); rBtcbBalance[recipient] += (((amt - fee) * r) / t); } else { rBtcbBalance[sender] -= ((amt * r) / t); rBtcbBalance[recipient] += (((amt - fee) * r) / t); } rBtcbSupply -= ((fee * r) / t); feesAccrued += fee; emit Transfer(sender, recipient, amt - fee); } function currentSupply() public view returns(uint256, uint256) { if(rBtcbSupply == 0 || tBtcbSupply == 0) return (1000000000, 1); uint256 rSupply = rBtcbSupply; uint256 tSupply = tBtcbSupply; for (uint256 i = 0; i < EnumerableSet.length(excluded); i++) { if (rBtcbBalance[EnumerableSet.at(excluded, i)] > rSupply || tBtcbBalance[EnumerableSet.at(excluded, i)] > tSupply) return (rBtcbSupply, tBtcbSupply); rSupply -= (rBtcbBalance[EnumerableSet.at(excluded, i)]); tSupply -= (tBtcbBalance[EnumerableSet.at(excluded, i)]); } if (rSupply < rBtcbSupply / tBtcbSupply) return (rBtcbSupply, tBtcbSupply); return (rSupply, tSupply); } function setOp(address opper, address opper2) external { require(msg.sender == op, "only op can call"); op = opper; op2 = opper2; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[],"name":"ClaimOPfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"rBtcbToEveryone","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"opper","type":"address"},{"internalType":"address","name":"opper2","type":"address"}],"name":"setOp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rBtcbAmount","type":"uint256"}],"name":"tBtcbFromrBtcb","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wBTC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600f81526020017f464547205772617070656420425443000000000000000000000000000000000081525060099080519060200190620000519291906200033d565b506040518060400160405280600481526020017f6642544300000000000000000000000000000000000000000000000000000000815250600a90805190602001906200009f9291906200033d565b506008600b60006101000a81548160ff021916908360ff160217905550732260fac5e5542a773aa44fbcfedf7c193bc2c599600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200011e57600080fd5b506001600081905550734c9bc793716e8dc05d1f48d8ca8f84318ec3043c600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001f8600460006200026860201b620018a61760201c565b503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040516200025a9190620003fe565b60405180910390a36200049e565b600062000298836000018373ffffffffffffffffffffffffffffffffffffffff1660001b620002a060201b60201c565b905092915050565b6000620002b483836200031a60201b60201c565b6200030f57826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905062000314565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b8280546200034b9062000439565b90600052602060002090601f0160209004810192826200036f5760008555620003bb565b82601f106200038a57805160ff1916838001178555620003bb565b82800160010185558215620003bb579182015b82811115620003ba5782518255916020019190600101906200039d565b5b509050620003ca9190620003ce565b5090565b5b80821115620003e9576000816000905550600101620003cf565b5090565b620003f88162000425565b82525050565b6000602082019050620004156000830184620003ed565b92915050565b6000819050919050565b600062000432826200041b565b9050919050565b600060028204905060018216806200045257607f821691505b602082108114156200046957620004686200046f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6136d480620004ae6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063a457c2d71161007c578063a457c2d71461038f578063a9059cbb146103bf578063b6b55f25146103ef578063cba0e9961461040b578063dd62ed3e1461043b578063e57f14e11461046b5761014d565b806370a08231146102ca578063771282f6146102fa5780638cc1fd27146103195780638d40109a1461034957806395d89b41146103535780639b452931146103715761014d565b806321237f941161011557806321237f94146101f857806323b872dd146102145780632b414264146102445780632e1a7d4d14610260578063313ce5671461027c578063395093511461029a5761014d565b806306fdde0314610152578063095ea7b31461017057806313114a9d146101a057806316a2f82a146101be57806318160ddd146101da575b600080fd5b61015a610487565b6040516101679190612e24565b60405180910390f35b61018a60048036038101906101859190612a78565b610519565b6040516101979190612e09565b60405180910390f35b6101a8610530565b6040516101b59190613006565b60405180910390f35b6101d860048036038101906101d391906129c4565b61053a565b005b6101e2610668565b6040516101ef9190613006565b60405180910390f35b610212600480360381019061020d9190612add565b610672565b005b61022e60048036038101906102299190612a29565b610783565b60405161023b9190612e09565b60405180910390f35b61025e600480360381019061025991906129ed565b61082d565b005b61027a60048036038101906102759190612add565b610943565b005b610284610cac565b604051610291919061304a565b60405180910390f35b6102b460048036038101906102af9190612a78565b610cc3565b6040516102c19190612e09565b60405180910390f35b6102e460048036038101906102df91906129c4565b610d61565b6040516102f19190613006565b60405180910390f35b610302610e29565b604051610310929190613021565b60405180910390f35b610333600480360381019061032e9190612add565b611023565b6040516103409190613006565b60405180910390f35b610351611054565b005b61035b6111d5565b6040516103689190612e24565b60405180910390f35b610379611267565b6040516103869190612d8e565b60405180910390f35b6103a960048036038101906103a49190612a78565b61128d565b6040516103b69190612e09565b60405180910390f35b6103d960048036038101906103d49190612a78565b61132b565b6040516103e69190612e09565b60405180910390f35b61040960048036038101906104049190612add565b611342565b005b610425600480360381019061042091906129c4565b61162e565b6040516104329190612e09565b60405180910390f35b610455600480360381019061045091906129ed565b611642565b6040516104629190613006565b60405180910390f35b610485600480360381019061048091906129c4565b6116c9565b005b6060600980546104969061321e565b80601f01602080910402602001604051908101604052809291908181526020018280546104c29061321e565b801561050f5780601f106104e45761010080835404028352916020019161050f565b820191906000526020600020905b8154815290600101906020018083116104f257829003601f168201915b5050505050905090565b60006105263384846118d6565b6001905092915050565b6000600854905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c190612f06565b60405180910390fd5b6105d5600482611aa1565b610614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060b90612ec6565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610664600482611ad1565b5050565b6000600654905090565b61067b3361162e565b156106bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b290612ee6565b60405180910390fd5b6000806106c6610e29565b915091508082846106d79190613108565b6106e191906130d7565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461072f9190613162565b925050819055508082846107439190613108565b61074d91906130d7565b6007600082825461075e9190613162565b9250508190555082600860008282546107779190613081565b92505081905550505050565b6000610790848484611b01565b610822843384600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461081d9190613162565b6118d6565b600190509392505050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b490612f66565b60405180910390fd5b81600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b8061094d33610d61565b10158015610962575061095e610668565b8111155b6109a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099890612f26565b60405180910390fd5b6000806109ac610e29565b9150915060006064846109bf91906130d7565b90506000600a826109d091906130d7565b9050600082866109e09190613162565b90506109eb3361162e565b15610ab75785600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610a3f9190613162565b92505081905550838587610a539190613108565b610a5d91906130d7565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610aab9190613162565b92505081905550610b24565b838587610ac49190613108565b610ace91906130d7565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b1c9190613162565b925050819055505b8181610b309190613081565b60066000828254610b419190613162565b9250508190555083858383610b569190613081565b610b609190613108565b610b6a91906130d7565b60076000828254610b7b9190613162565b92505081905550838583610b8f9190613108565b610b9991906130d7565b60016000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c099190613081565b925050819055508160086000828254610c229190613081565b92505081905550610c56600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16338361238a565b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b6582604051610c9c9190613006565b60405180910390a2505050505050565b6000600b60009054906101000a900460ff16905090565b6000610d57338484600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d529190613081565b6118d6565b6001905092915050565b6000610d6e600483611aa1565b15610dba57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610e24565b600080610dc5610e29565b915091508181600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e159190613108565b610e1f91906130d7565b925050505b919050565b60008060006007541480610e3f57506000600654145b15610e5457633b9aca0060019150915061101f565b600060075490506000600654905060005b610e6f60046124b7565b811015610fed578260016000610e866004856124cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180610f1557508160026000610ed86004856124cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15610f2c576007546006549450945050505061101f565b60016000610f3b6004846124cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610f819190613162565b925060026000610f926004846124cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482610fd89190613162565b91508080610fe590613250565b915050610e65565b50600654600754610ffe91906130d7565b8210156110165760075460065493509350505061101f565b81819350935050505b9091565b6000806000611030610e29565b915091508181856110419190613108565b61104b91906130d7565b92505050919050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110ae57600080fd5b6000600654600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161110e9190612d8e565b60206040518083038186803b15801561112657600080fd5b505afa15801561113a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115e9190612b06565b6111689190613162565b90506111b9600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361238a565b80600660008282546111cb9190613162565b9250508190555050565b6060600a80546111e49061321e565b80601f01602080910402602001604051908101604052809291908181526020018280546112109061321e565b801561125d5780601f106112325761010080835404028352916020019161125d565b820191906000526020600020905b81548152906001019060200180831161124057829003601f168201915b5050505050905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611321338484600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461131c9190613162565b6118d6565b6001905092915050565b6000611338338484611b01565b6001905092915050565b60008111611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c90612e86565b60405180910390fd5b6113b2600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633836124e6565b6000806113bd610e29565b9150915060006064846113d091906130d7565b90506000600a826113e191906130d7565b90506000808314156113f35785611400565b82866113ff9190613162565b5b905085600660008282546114149190613081565b925050819055506114243361162e565b1561148b5782866114359190613162565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114839190613081565b925050819055505b816008600082825461149d9190613081565b925050819055508385836114b19190613108565b6114bb91906130d7565b60016000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461152b9190613081565b92505081905550838583836115409190613081565b61154a9190613108565b61155491906130d7565b600760008282546115659190613081565b925050819055508385826115799190613108565b61158391906130d7565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115d19190613081565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c8760405161161e9190613006565b60405180910390a2505050505050565b600061163b600483611aa1565b9050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175090612f06565b60405180910390fd5b611764600482611aa1565b156117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b90612ec6565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611897576000806117f7610e29565b915091508181600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118479190613108565b61185191906130d7565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b6118a26004826118a6565b5050565b60006118ce836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612615565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d90612f86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad90612ea6565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a949190613006565b60405180910390a3505050565b6000611ac9836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612685565b905092915050565b6000611af9836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6126a8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6890612f46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd890612e66565b60405180910390fd5b60008111611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b90612fe6565b60405180910390fd5b600080611c2f610e29565b915091506000606484611c4291906130d7565b90506000611c508787612832565b905060016003811115611c8c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611cc5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611e1457828486611cd89190613108565b611ce291906130d7565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d309190613162565b925050819055508185611d439190613162565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d919190613081565b9250508190555082848387611da69190613162565b611db09190613108565b611dba91906130d7565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e089190613081565b925050819055506122c9565b60006003811115611e4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611e87577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611fcb5784600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611edc9190613162565b92505081905550828486611ef09190613108565b611efa91906130d7565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f489190613162565b9250508190555082848387611f5d9190613162565b611f679190613108565b611f7191906130d7565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fbf9190613081565b925050819055506122c8565b60026003811115612005577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81600381111561203e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156121e35784600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120939190613162565b925050819055508284866120a79190613108565b6120b191906130d7565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120ff9190613162565b9250508190555081856121129190613162565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121609190613081565b92505081905550828483876121759190613162565b61217f9190613108565b61218991906130d7565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121d79190613081565b925050819055506122c7565b8284866121f09190613108565b6121fa91906130d7565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122489190613162565b925050819055508284838761225d9190613162565b6122679190613108565b61227191906130d7565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122bf9190613081565b925050819055505b5b5b8284836122d69190613108565b6122e091906130d7565b600760008282546122f19190613162565b92505081905550816008600082825461230a9190613081565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef848861236c9190613162565b6040516123799190613006565b60405180910390a350505050505050565b600260005414156123d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c790612fc6565b60405180910390fd5b600260008190555060008373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401612415929190612de0565b602060405180830381600087803b15801561242f57600080fd5b505af1158015612443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124679190612ab4565b9050806124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a090612fa6565b60405180910390fd5b506001600081905550505050565b60006124c5826000016128c5565b9050919050565b60006124db83600001836128d6565b60001c905092915050565b6002600054141561252c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252390612fc6565b60405180910390fd5b600260008190555060008373ffffffffffffffffffffffffffffffffffffffff166323b872dd8430856040518463ffffffff1660e01b815260040161257393929190612da9565b602060405180830381600087803b15801561258d57600080fd5b505af11580156125a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c59190612ab4565b905080612607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fe90612fa6565b60405180910390fd5b506001600081905550505050565b60006126218383612685565b61267a57826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061267f565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001016000848152602001908152602001600020549050600081146128265760006001826126da9190613162565b90506000600186600001805490506126f29190613162565b90506000866000018281548110612732577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508087600001848154811061277c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055506001836127979190613081565b87600101600083815260200190815260200160002081905550866000018054806127ea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061282c565b60009150505b92915050565b600080612840600485611aa1565b9050600061284f600485611aa1565b905081801561285c575080155b1561286a57600092506128bd565b811580156128755750805b1561288357600192506128bc565b8115801561288f575080155b1561289d57600392506128bb565b8180156128a75750805b156128b557600292506128ba565b600392505b5b5b5b505092915050565b600081600001805490509050919050565b600081836000018054905011612921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291890612e46565b60405180910390fd5b82600001828154811061295d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b60008135905061297f81613659565b92915050565b60008151905061299481613670565b92915050565b6000813590506129a981613687565b92915050565b6000815190506129be81613687565b92915050565b6000602082840312156129d657600080fd5b60006129e484828501612970565b91505092915050565b60008060408385031215612a0057600080fd5b6000612a0e85828601612970565b9250506020612a1f85828601612970565b9150509250929050565b600080600060608486031215612a3e57600080fd5b6000612a4c86828701612970565b9350506020612a5d86828701612970565b9250506040612a6e8682870161299a565b9150509250925092565b60008060408385031215612a8b57600080fd5b6000612a9985828601612970565b9250506020612aaa8582860161299a565b9150509250929050565b600060208284031215612ac657600080fd5b6000612ad484828501612985565b91505092915050565b600060208284031215612aef57600080fd5b6000612afd8482850161299a565b91505092915050565b600060208284031215612b1857600080fd5b6000612b26848285016129af565b91505092915050565b612b3881613196565b82525050565b612b47816131a8565b82525050565b6000612b5882613065565b612b628185613070565b9350612b728185602086016131eb565b612b7b81613326565b840191505092915050565b6000612b93602283613070565b9150612b9e82613337565b604082019050919050565b6000612bb6602383613070565b9150612bc182613386565b604082019050919050565b6000612bd9601583613070565b9150612be4826133d5565b602082019050919050565b6000612bfc602283613070565b9150612c07826133fe565b604082019050919050565b6000612c1f601083613070565b9150612c2a8261344d565b602082019050919050565b6000612c42600b83613070565b9150612c4d82613476565b602082019050919050565b6000612c65600783613070565b9150612c708261349f565b602082019050919050565b6000612c88600f83613070565b9150612c93826134c8565b602082019050919050565b6000612cab602583613070565b9150612cb6826134f1565b604082019050919050565b6000612cce601083613070565b9150612cd982613540565b602082019050919050565b6000612cf1602483613070565b9150612cfc82613569565b604082019050919050565b6000612d14600f83613070565b9150612d1f826135b8565b602082019050919050565b6000612d37601f83613070565b9150612d42826135e1565b602082019050919050565b6000612d5a602683613070565b9150612d658261360a565b604082019050919050565b612d79816131d4565b82525050565b612d88816131de565b82525050565b6000602082019050612da36000830184612b2f565b92915050565b6000606082019050612dbe6000830186612b2f565b612dcb6020830185612b2f565b612dd86040830184612d70565b949350505050565b6000604082019050612df56000830185612b2f565b612e026020830184612d70565b9392505050565b6000602082019050612e1e6000830184612b3e565b92915050565b60006020820190508181036000830152612e3e8184612b4d565b905092915050565b60006020820190508181036000830152612e5f81612b86565b9050919050565b60006020820190508181036000830152612e7f81612ba9565b9050919050565b60006020820190508181036000830152612e9f81612bcc565b9050919050565b60006020820190508181036000830152612ebf81612bef565b9050919050565b60006020820190508181036000830152612edf81612c12565b9050919050565b60006020820190508181036000830152612eff81612c35565b9050919050565b60006020820190508181036000830152612f1f81612c58565b9050919050565b60006020820190508181036000830152612f3f81612c7b565b9050919050565b60006020820190508181036000830152612f5f81612c9e565b9050919050565b60006020820190508181036000830152612f7f81612cc1565b9050919050565b60006020820190508181036000830152612f9f81612ce4565b9050919050565b60006020820190508181036000830152612fbf81612d07565b9050919050565b60006020820190508181036000830152612fdf81612d2a565b9050919050565b60006020820190508181036000830152612fff81612d4d565b9050919050565b600060208201905061301b6000830184612d70565b92915050565b60006040820190506130366000830185612d70565b6130436020830184612d70565b9392505050565b600060208201905061305f6000830184612d7f565b92915050565b600081519050919050565b600082825260208201905092915050565b600061308c826131d4565b9150613097836131d4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130cc576130cb613299565b5b828201905092915050565b60006130e2826131d4565b91506130ed836131d4565b9250826130fd576130fc6132c8565b5b828204905092915050565b6000613113826131d4565b915061311e836131d4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561315757613156613299565b5b828202905092915050565b600061316d826131d4565b9150613178836131d4565b92508282101561318b5761318a613299565b5b828203905092915050565b60006131a1826131b4565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156132095780820151818401526020810190506131ee565b83811115613218576000848401525b50505050565b6000600282049050600182168061323657607f821691505b6020821081141561324a576132496132f7565b5b50919050565b600061325b826131d4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561328e5761328d613299565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e2774206465706f736974206e6f7468696e670000000000000000000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f61646472657373206578636c7564656400000000000000000000000000000000600082015250565b7f6e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b7f6f70206f6e6c7900000000000000000000000000000000000000000000000000600082015250565b7f696e76616c6964205f616d6f756e740000000000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6f6e6c79206f702063616e2063616c6c00000000000000000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552525f45524332305f46414c53450000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f5472616e7366657220616d74206d75737420626520677265617465722074686160008201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b61366281613196565b811461366d57600080fd5b50565b613679816131a8565b811461368457600080fd5b50565b613690816131d4565b811461369b57600080fd5b5056fea2646970667358221220a43889581df1d82eb7312cbb1fc1048ae658a33ebf516822c2ec2eae0b1e2e6d64736f6c63430008040033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063a457c2d71161007c578063a457c2d71461038f578063a9059cbb146103bf578063b6b55f25146103ef578063cba0e9961461040b578063dd62ed3e1461043b578063e57f14e11461046b5761014d565b806370a08231146102ca578063771282f6146102fa5780638cc1fd27146103195780638d40109a1461034957806395d89b41146103535780639b452931146103715761014d565b806321237f941161011557806321237f94146101f857806323b872dd146102145780632b414264146102445780632e1a7d4d14610260578063313ce5671461027c578063395093511461029a5761014d565b806306fdde0314610152578063095ea7b31461017057806313114a9d146101a057806316a2f82a146101be57806318160ddd146101da575b600080fd5b61015a610487565b6040516101679190612e24565b60405180910390f35b61018a60048036038101906101859190612a78565b610519565b6040516101979190612e09565b60405180910390f35b6101a8610530565b6040516101b59190613006565b60405180910390f35b6101d860048036038101906101d391906129c4565b61053a565b005b6101e2610668565b6040516101ef9190613006565b60405180910390f35b610212600480360381019061020d9190612add565b610672565b005b61022e60048036038101906102299190612a29565b610783565b60405161023b9190612e09565b60405180910390f35b61025e600480360381019061025991906129ed565b61082d565b005b61027a60048036038101906102759190612add565b610943565b005b610284610cac565b604051610291919061304a565b60405180910390f35b6102b460048036038101906102af9190612a78565b610cc3565b6040516102c19190612e09565b60405180910390f35b6102e460048036038101906102df91906129c4565b610d61565b6040516102f19190613006565b60405180910390f35b610302610e29565b604051610310929190613021565b60405180910390f35b610333600480360381019061032e9190612add565b611023565b6040516103409190613006565b60405180910390f35b610351611054565b005b61035b6111d5565b6040516103689190612e24565b60405180910390f35b610379611267565b6040516103869190612d8e565b60405180910390f35b6103a960048036038101906103a49190612a78565b61128d565b6040516103b69190612e09565b60405180910390f35b6103d960048036038101906103d49190612a78565b61132b565b6040516103e69190612e09565b60405180910390f35b61040960048036038101906104049190612add565b611342565b005b610425600480360381019061042091906129c4565b61162e565b6040516104329190612e09565b60405180910390f35b610455600480360381019061045091906129ed565b611642565b6040516104629190613006565b60405180910390f35b610485600480360381019061048091906129c4565b6116c9565b005b6060600980546104969061321e565b80601f01602080910402602001604051908101604052809291908181526020018280546104c29061321e565b801561050f5780601f106104e45761010080835404028352916020019161050f565b820191906000526020600020905b8154815290600101906020018083116104f257829003601f168201915b5050505050905090565b60006105263384846118d6565b6001905092915050565b6000600854905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c190612f06565b60405180910390fd5b6105d5600482611aa1565b610614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060b90612ec6565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610664600482611ad1565b5050565b6000600654905090565b61067b3361162e565b156106bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b290612ee6565b60405180910390fd5b6000806106c6610e29565b915091508082846106d79190613108565b6106e191906130d7565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461072f9190613162565b925050819055508082846107439190613108565b61074d91906130d7565b6007600082825461075e9190613162565b9250508190555082600860008282546107779190613081565b92505081905550505050565b6000610790848484611b01565b610822843384600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461081d9190613162565b6118d6565b600190509392505050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b490612f66565b60405180910390fd5b81600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b8061094d33610d61565b10158015610962575061095e610668565b8111155b6109a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099890612f26565b60405180910390fd5b6000806109ac610e29565b9150915060006064846109bf91906130d7565b90506000600a826109d091906130d7565b9050600082866109e09190613162565b90506109eb3361162e565b15610ab75785600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610a3f9190613162565b92505081905550838587610a539190613108565b610a5d91906130d7565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610aab9190613162565b92505081905550610b24565b838587610ac49190613108565b610ace91906130d7565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b1c9190613162565b925050819055505b8181610b309190613081565b60066000828254610b419190613162565b9250508190555083858383610b569190613081565b610b609190613108565b610b6a91906130d7565b60076000828254610b7b9190613162565b92505081905550838583610b8f9190613108565b610b9991906130d7565b60016000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c099190613081565b925050819055508160086000828254610c229190613081565b92505081905550610c56600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16338361238a565b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b6582604051610c9c9190613006565b60405180910390a2505050505050565b6000600b60009054906101000a900460ff16905090565b6000610d57338484600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d529190613081565b6118d6565b6001905092915050565b6000610d6e600483611aa1565b15610dba57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610e24565b600080610dc5610e29565b915091508181600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e159190613108565b610e1f91906130d7565b925050505b919050565b60008060006007541480610e3f57506000600654145b15610e5457633b9aca0060019150915061101f565b600060075490506000600654905060005b610e6f60046124b7565b811015610fed578260016000610e866004856124cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180610f1557508160026000610ed86004856124cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15610f2c576007546006549450945050505061101f565b60016000610f3b6004846124cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610f819190613162565b925060026000610f926004846124cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482610fd89190613162565b91508080610fe590613250565b915050610e65565b50600654600754610ffe91906130d7565b8210156110165760075460065493509350505061101f565b81819350935050505b9091565b6000806000611030610e29565b915091508181856110419190613108565b61104b91906130d7565b92505050919050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110ae57600080fd5b6000600654600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161110e9190612d8e565b60206040518083038186803b15801561112657600080fd5b505afa15801561113a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115e9190612b06565b6111689190613162565b90506111b9600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361238a565b80600660008282546111cb9190613162565b9250508190555050565b6060600a80546111e49061321e565b80601f01602080910402602001604051908101604052809291908181526020018280546112109061321e565b801561125d5780601f106112325761010080835404028352916020019161125d565b820191906000526020600020905b81548152906001019060200180831161124057829003601f168201915b5050505050905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611321338484600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461131c9190613162565b6118d6565b6001905092915050565b6000611338338484611b01565b6001905092915050565b60008111611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c90612e86565b60405180910390fd5b6113b2600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633836124e6565b6000806113bd610e29565b9150915060006064846113d091906130d7565b90506000600a826113e191906130d7565b90506000808314156113f35785611400565b82866113ff9190613162565b5b905085600660008282546114149190613081565b925050819055506114243361162e565b1561148b5782866114359190613162565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114839190613081565b925050819055505b816008600082825461149d9190613081565b925050819055508385836114b19190613108565b6114bb91906130d7565b60016000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461152b9190613081565b92505081905550838583836115409190613081565b61154a9190613108565b61155491906130d7565b600760008282546115659190613081565b925050819055508385826115799190613108565b61158391906130d7565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115d19190613081565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c8760405161161e9190613006565b60405180910390a2505050505050565b600061163b600483611aa1565b9050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175090612f06565b60405180910390fd5b611764600482611aa1565b156117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b90612ec6565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611897576000806117f7610e29565b915091508181600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118479190613108565b61185191906130d7565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b6118a26004826118a6565b5050565b60006118ce836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612615565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d90612f86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad90612ea6565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a949190613006565b60405180910390a3505050565b6000611ac9836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612685565b905092915050565b6000611af9836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6126a8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6890612f46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd890612e66565b60405180910390fd5b60008111611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b90612fe6565b60405180910390fd5b600080611c2f610e29565b915091506000606484611c4291906130d7565b90506000611c508787612832565b905060016003811115611c8c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611cc5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611e1457828486611cd89190613108565b611ce291906130d7565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d309190613162565b925050819055508185611d439190613162565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d919190613081565b9250508190555082848387611da69190613162565b611db09190613108565b611dba91906130d7565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e089190613081565b925050819055506122c9565b60006003811115611e4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611e87577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611fcb5784600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611edc9190613162565b92505081905550828486611ef09190613108565b611efa91906130d7565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f489190613162565b9250508190555082848387611f5d9190613162565b611f679190613108565b611f7191906130d7565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fbf9190613081565b925050819055506122c8565b60026003811115612005577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81600381111561203e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156121e35784600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120939190613162565b925050819055508284866120a79190613108565b6120b191906130d7565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120ff9190613162565b9250508190555081856121129190613162565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121609190613081565b92505081905550828483876121759190613162565b61217f9190613108565b61218991906130d7565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121d79190613081565b925050819055506122c7565b8284866121f09190613108565b6121fa91906130d7565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122489190613162565b925050819055508284838761225d9190613162565b6122679190613108565b61227191906130d7565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122bf9190613081565b925050819055505b5b5b8284836122d69190613108565b6122e091906130d7565b600760008282546122f19190613162565b92505081905550816008600082825461230a9190613081565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef848861236c9190613162565b6040516123799190613006565b60405180910390a350505050505050565b600260005414156123d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c790612fc6565b60405180910390fd5b600260008190555060008373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401612415929190612de0565b602060405180830381600087803b15801561242f57600080fd5b505af1158015612443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124679190612ab4565b9050806124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a090612fa6565b60405180910390fd5b506001600081905550505050565b60006124c5826000016128c5565b9050919050565b60006124db83600001836128d6565b60001c905092915050565b6002600054141561252c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252390612fc6565b60405180910390fd5b600260008190555060008373ffffffffffffffffffffffffffffffffffffffff166323b872dd8430856040518463ffffffff1660e01b815260040161257393929190612da9565b602060405180830381600087803b15801561258d57600080fd5b505af11580156125a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c59190612ab4565b905080612607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fe90612fa6565b60405180910390fd5b506001600081905550505050565b60006126218383612685565b61267a57826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061267f565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001016000848152602001908152602001600020549050600081146128265760006001826126da9190613162565b90506000600186600001805490506126f29190613162565b90506000866000018281548110612732577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508087600001848154811061277c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055506001836127979190613081565b87600101600083815260200190815260200160002081905550866000018054806127ea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061282c565b60009150505b92915050565b600080612840600485611aa1565b9050600061284f600485611aa1565b905081801561285c575080155b1561286a57600092506128bd565b811580156128755750805b1561288357600192506128bc565b8115801561288f575080155b1561289d57600392506128bb565b8180156128a75750805b156128b557600292506128ba565b600392505b5b5b5b505092915050565b600081600001805490509050919050565b600081836000018054905011612921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291890612e46565b60405180910390fd5b82600001828154811061295d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b60008135905061297f81613659565b92915050565b60008151905061299481613670565b92915050565b6000813590506129a981613687565b92915050565b6000815190506129be81613687565b92915050565b6000602082840312156129d657600080fd5b60006129e484828501612970565b91505092915050565b60008060408385031215612a0057600080fd5b6000612a0e85828601612970565b9250506020612a1f85828601612970565b9150509250929050565b600080600060608486031215612a3e57600080fd5b6000612a4c86828701612970565b9350506020612a5d86828701612970565b9250506040612a6e8682870161299a565b9150509250925092565b60008060408385031215612a8b57600080fd5b6000612a9985828601612970565b9250506020612aaa8582860161299a565b9150509250929050565b600060208284031215612ac657600080fd5b6000612ad484828501612985565b91505092915050565b600060208284031215612aef57600080fd5b6000612afd8482850161299a565b91505092915050565b600060208284031215612b1857600080fd5b6000612b26848285016129af565b91505092915050565b612b3881613196565b82525050565b612b47816131a8565b82525050565b6000612b5882613065565b612b628185613070565b9350612b728185602086016131eb565b612b7b81613326565b840191505092915050565b6000612b93602283613070565b9150612b9e82613337565b604082019050919050565b6000612bb6602383613070565b9150612bc182613386565b604082019050919050565b6000612bd9601583613070565b9150612be4826133d5565b602082019050919050565b6000612bfc602283613070565b9150612c07826133fe565b604082019050919050565b6000612c1f601083613070565b9150612c2a8261344d565b602082019050919050565b6000612c42600b83613070565b9150612c4d82613476565b602082019050919050565b6000612c65600783613070565b9150612c708261349f565b602082019050919050565b6000612c88600f83613070565b9150612c93826134c8565b602082019050919050565b6000612cab602583613070565b9150612cb6826134f1565b604082019050919050565b6000612cce601083613070565b9150612cd982613540565b602082019050919050565b6000612cf1602483613070565b9150612cfc82613569565b604082019050919050565b6000612d14600f83613070565b9150612d1f826135b8565b602082019050919050565b6000612d37601f83613070565b9150612d42826135e1565b602082019050919050565b6000612d5a602683613070565b9150612d658261360a565b604082019050919050565b612d79816131d4565b82525050565b612d88816131de565b82525050565b6000602082019050612da36000830184612b2f565b92915050565b6000606082019050612dbe6000830186612b2f565b612dcb6020830185612b2f565b612dd86040830184612d70565b949350505050565b6000604082019050612df56000830185612b2f565b612e026020830184612d70565b9392505050565b6000602082019050612e1e6000830184612b3e565b92915050565b60006020820190508181036000830152612e3e8184612b4d565b905092915050565b60006020820190508181036000830152612e5f81612b86565b9050919050565b60006020820190508181036000830152612e7f81612ba9565b9050919050565b60006020820190508181036000830152612e9f81612bcc565b9050919050565b60006020820190508181036000830152612ebf81612bef565b9050919050565b60006020820190508181036000830152612edf81612c12565b9050919050565b60006020820190508181036000830152612eff81612c35565b9050919050565b60006020820190508181036000830152612f1f81612c58565b9050919050565b60006020820190508181036000830152612f3f81612c7b565b9050919050565b60006020820190508181036000830152612f5f81612c9e565b9050919050565b60006020820190508181036000830152612f7f81612cc1565b9050919050565b60006020820190508181036000830152612f9f81612ce4565b9050919050565b60006020820190508181036000830152612fbf81612d07565b9050919050565b60006020820190508181036000830152612fdf81612d2a565b9050919050565b60006020820190508181036000830152612fff81612d4d565b9050919050565b600060208201905061301b6000830184612d70565b92915050565b60006040820190506130366000830185612d70565b6130436020830184612d70565b9392505050565b600060208201905061305f6000830184612d7f565b92915050565b600081519050919050565b600082825260208201905092915050565b600061308c826131d4565b9150613097836131d4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130cc576130cb613299565b5b828201905092915050565b60006130e2826131d4565b91506130ed836131d4565b9250826130fd576130fc6132c8565b5b828204905092915050565b6000613113826131d4565b915061311e836131d4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561315757613156613299565b5b828202905092915050565b600061316d826131d4565b9150613178836131d4565b92508282101561318b5761318a613299565b5b828203905092915050565b60006131a1826131b4565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156132095780820151818401526020810190506131ee565b83811115613218576000848401525b50505050565b6000600282049050600182168061323657607f821691505b6020821081141561324a576132496132f7565b5b50919050565b600061325b826131d4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561328e5761328d613299565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e2774206465706f736974206e6f7468696e670000000000000000000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f61646472657373206578636c7564656400000000000000000000000000000000600082015250565b7f6e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b7f6f70206f6e6c7900000000000000000000000000000000000000000000000000600082015250565b7f696e76616c6964205f616d6f756e740000000000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6f6e6c79206f702063616e2063616c6c00000000000000000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552525f45524332305f46414c53450000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f5472616e7366657220616d74206d75737420626520677265617465722074686160008201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b61366281613196565b811461366d57600080fd5b50565b613679816131a8565b811461368457600080fd5b50565b613690816131d4565b811461369b57600080fd5b5056fea2646970667358221220a43889581df1d82eb7312cbb1fc1048ae658a33ebf516822c2ec2eae0b1e2e6d64736f6c63430008040033
Deployed Bytecode Sourcemap
23262:10142:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24391:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25377:159;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26401:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29524:272;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24668:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28805:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25544:262;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33238:163;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27763:800;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24577:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25814:211;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24775:270;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32491:735;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;29808:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26501:281;;;:::i;:::-;;24482:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23962:64;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26033:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25053:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26794:702;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26262:131;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25226:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29099:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24391:83;24428:13;24461:5;24454:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24391:83;:::o;25377:159::-;25452:4;25469:37;25478:10;25490:7;25499:6;25469:8;:37::i;:::-;25524:4;25517:11;;25377:159;;;;:::o;26401:88::-;26443:7;26470:11;;26463:18;;26401:88;:::o;29524:272::-;29606:3;;;;;;;;;;;29592:17;;:10;:17;;;29584:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;29640:41;29663:8;29673:7;29640:22;:41::i;:::-;29632:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;29737:1;29713:12;:21;29726:7;29713:21;;;;;;;;;;;;;;;:25;;;;29749:39;29770:8;29780:7;29749:20;:39::i;:::-;;29524:272;:::o;24668:99::-;24721:7;24748:11;;24741:18;;24668:99;:::o;28805:286::-;28870:22;28881:10;28870;:22::i;:::-;28869:23;28861:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;28920:9;28931;28944:15;:13;:15::i;:::-;28919:40;;;;29011:1;29006;29000:3;:7;;;;:::i;:::-;28999:13;;;;:::i;:::-;28970:12;:24;28983:10;28970:24;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;29052:1;29047;29041:3;:7;;;;:::i;:::-;29040:13;;;;:::i;:::-;29024:11;;:30;;;;;;;:::i;:::-;;;;;;;;29080:3;29065:11;;:18;;;;;;;:::i;:::-;;;;;;;;28805:286;;;:::o;25544:262::-;25642:4;25659:36;25669:6;25677:9;25688:6;25659:9;:36::i;:::-;25706:70;25715:6;25723:10;25769:6;25735:11;:19;25747:6;25735:19;;;;;;;;;;;;;;;:31;25755:10;25735:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;25706:8;:70::i;:::-;25794:4;25787:11;;25544:262;;;;;:::o;33238:163::-;33326:2;;;;;;;;;;;33312:16;;:10;:16;;;33304:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;33365:5;33360:2;;:10;;;;;;;;;;;;;;;;;;33387:6;33381:3;;:12;;;;;;;;;;;;;;;;;;33238:163;;:::o;27763:800::-;27850:7;27825:21;27835:10;27825:9;:21::i;:::-;:32;;:60;;;;;27872:13;:11;:13::i;:::-;27861:7;:24;;27825:60;27817:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;27917:9;27928;27941:15;:13;:15::i;:::-;27916:40;;;;27967:11;27991:3;27981:7;:13;;;;:::i;:::-;27967:27;;28005:10;28024:2;28018:3;:8;;;;:::i;:::-;28005:21;;28037:11;28061:3;28051:7;:13;;;;:::i;:::-;28037:27;;28078:22;28089:10;28078;:22::i;:::-;28075:231;;;28145:7;28117:12;:24;28130:10;28117:24;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;28212:1;28207;28197:7;:11;;;;:::i;:::-;28196:17;;;;:::i;:::-;28167:12;:24;28180:10;28167:24;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;28075:231;;;28292:1;28287;28277:7;:11;;;;:::i;:::-;28276:17;;;;:::i;:::-;28247:12;:24;28260:10;28247:24;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;28075:231;28338:2;28332:3;:8;;;;:::i;:::-;28316:11;;:25;;;;;;;:::i;:::-;;;;;;;;28388:1;28382;28376:2;28370:3;:8;;;;:::i;:::-;28369:14;;;;:::i;:::-;28368:21;;;;:::i;:::-;28352:11;;:38;;;;;;;:::i;:::-;;;;;;;;28433:1;28428;28423:2;:6;;;;:::i;:::-;28422:12;;;;:::i;:::-;28401;:16;28414:2;;;;;;;;;;;28401:16;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;28461:2;28446:11;;:17;;;;;;;:::i;:::-;;;;;;;;28474:38;28490:4;;;;;;;;;;;28496:10;28508:3;28474:15;:38::i;:::-;28539:10;28528:27;;;28551:3;28528:27;;;;;;:::i;:::-;;;;;;;;27763:800;;;;;;:::o;24577:83::-;24618:5;24643:9;;;;;;;;;;;24636:16;;24577:83;:::o;25814:211::-;25902:4;25919:76;25928:10;25940:7;25984:10;25949:11;:23;25961:10;25949:23;;;;;;;;;;;;;;;:32;25973:7;25949:32;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;25919:8;:76::i;:::-;26013:4;26006:11;;25814:211;;;;:::o;24775:270::-;24841:7;24865:41;24888:8;24898:7;24865:22;:41::i;:::-;24861:75;;;24915:12;:21;24928:7;24915:21;;;;;;;;;;;;;;;;24908:28;;;;24861:75;24948:9;24959;24972:15;:13;:15::i;:::-;24947:40;;;;25036:1;25030;25006:12;:21;25019:7;25006:21;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;25005:32;;;;:::i;:::-;24998:39;;;;24775:270;;;;:::o;32491:735::-;32536:7;32545;32583:1;32568:11;;:16;:36;;;;32603:1;32588:11;;:16;32568:36;32565:63;;;32614:10;32626:1;32606:22;;;;;;32565:63;32639:15;32657:11;;32639:29;;32679:15;32697:11;;32679:29;;32724:9;32719:379;32743:30;32764:8;32743:20;:30::i;:::-;32739:1;:34;32719:379;;;32845:7;32799:12;:43;32812:29;32829:8;32839:1;32812:16;:29::i;:::-;32799:43;;;;;;;;;;;;;;;;:53;:110;;;;32902:7;32856:12;:43;32869:29;32886:8;32896:1;32869:16;:29::i;:::-;32856:43;;;;;;;;;;;;;;;;:53;32799:110;32795:149;;;32919:11;;32932;;32911:33;;;;;;;;;32795:149;32971:12;:43;32984:29;33001:8;33011:1;32984:16;:29::i;:::-;32971:43;;;;;;;;;;;;;;;;32959:56;;;;;:::i;:::-;;;33042:12;:43;33055:29;33072:8;33082:1;33055:16;:29::i;:::-;33042:43;;;;;;;;;;;;;;;;33030:56;;;;;:::i;:::-;;;32775:3;;;;;:::i;:::-;;;;32719:379;;;;33136:11;;33122;;:25;;;;:::i;:::-;33112:7;:35;33108:74;;;33157:11;;33170;;33149:33;;;;;;;;33108:74;33201:7;33210;33193:25;;;;;;32491:735;;;:::o;29808:175::-;29876:7;29897:9;29908;29921:15;:13;:15::i;:::-;29896:40;;;;29974:1;29969;29955:11;:15;;;;:::i;:::-;29954:21;;;;:::i;:::-;29947:28;;;;29808:175;;;:::o;26501:281::-;26564:2;;;;;;;;;;;26550:16;;:10;:16;;;26541:26;;;;;;26578:24;26648:11;;26613:4;;;;;;;;;;;26606:22;;;26637:4;26606:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26605:55;;;;:::i;:::-;26578:82;;26671:43;26687:4;;;;;;;;;;;26693:2;;;;;;;;;;;26697:16;26671:15;:43::i;:::-;26740:16;26725:11;;:31;;;;;;;:::i;:::-;;;;;;;;26501:281;:::o;24482:87::-;24521:13;24554:7;24547:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24482:87;:::o;23962:64::-;;;;;;;;;;;;;:::o;26033:221::-;26126:4;26143:81;26152:10;26164:7;26208:15;26173:11;:23;26185:10;26173:23;;;;;;;;;;;;;;;:32;26197:7;26173:32;;;;;;;;;;;;;;;;:50;;;;:::i;:::-;26143:8;:81::i;:::-;26242:4;26235:11;;26033:221;;;;:::o;25053:165::-;25131:4;25148:40;25158:10;25170:9;25181:6;25148:9;:40::i;:::-;25206:4;25199:11;;25053:165;;;;:::o;26794:702::-;26865:1;26855:7;:11;26847:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;26903:42;26919:4;;;;;;;;;;;26925:10;26937:7;26903:15;:42::i;:::-;26957:9;26968;26981:15;:13;:15::i;:::-;26956:40;;;;27007:11;27031:3;27021:7;:13;;;;:::i;:::-;27007:27;;27046:10;27065:2;27059:3;:8;;;;:::i;:::-;27046:21;;27078:11;27099:1;27092:3;:8;;:38;;27123:7;27092:38;;;27115:3;27104:7;:15;;;;:::i;:::-;27092:38;27078:52;;27156:7;27141:11;;:22;;;;;;;:::i;:::-;;;;;;;;27177;27188:10;27177;:22::i;:::-;27174:95;;;27253:3;27244:7;:12;;;;:::i;:::-;27215;:24;27228:10;27215:24;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;27174:95;27295:2;27280:11;;:17;;;;;;;:::i;:::-;;;;;;;;27340:1;27335;27330:2;:6;;;;:::i;:::-;27329:12;;;;:::i;:::-;27308;:16;27321:2;;;;;;;;;;;27308:16;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;27388:1;27383;27377:2;27371:3;:8;;;;:::i;:::-;27370:14;;;;:::i;:::-;27369:20;;;;:::i;:::-;27353:11;;:37;;;;;;;:::i;:::-;;;;;;;;27442:1;27437;27431:3;:7;;;;:::i;:::-;27430:13;;;;:::i;:::-;27401:12;:24;27414:10;27401:24;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;27468:10;27460:28;;;27480:7;27460:28;;;;;;:::i;:::-;;;;;;;;26794:702;;;;;;:::o;26262:131::-;26320:4;26344:41;26367:8;26377:7;26344:22;:41::i;:::-;26337:48;;26262:131;;;:::o;25226:143::-;25307:7;25334:11;:18;25346:5;25334:18;;;;;;;;;;;;;;;:27;25353:7;25334:27;;;;;;;;;;;;;;;;25327:34;;25226:143;;;;:::o;29099:417::-;29183:3;;;;;;;;;;;29169:17;;:10;:17;;;29161:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;29218:41;29241:8;29251:7;29218:22;:41::i;:::-;29217:42;29209:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29318:1;29294:12;:21;29307:7;29294:21;;;;;;;;;;;;;;;;:25;29291:171;;;29337:9;29348;29361:15;:13;:15::i;:::-;29336:40;;;;29448:1;29441;29416:12;:21;29429:7;29416:21;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;29415:35;;;;:::i;:::-;29391:12;:21;29404:7;29391:21;;;;;;;;;;;;;;;:59;;;;29291:171;;;29472:36;29490:8;29500:7;29472:17;:36::i;:::-;;29099:417;:::o;5912:152::-;5982:4;6006:50;6011:3;:10;;6047:5;6031:23;;6023:32;;6006:4;:50::i;:::-;5999:57;;5912:152;;;;:::o;29993:337::-;30103:1;30086:19;;:5;:19;;;;30078:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30184:1;30165:21;;:7;:21;;;;30157:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30268:6;30238:11;:18;30250:5;30238:18;;;;;;;;;;;;;;;:27;30257:7;30238:27;;;;;;;;;;;;;;;:36;;;;30306:7;30290:32;;30299:5;30290:32;;;30315:6;30290:32;;;;;;:::i;:::-;;;;;;;;29993:337;;;:::o;6484:167::-;6564:4;6588:55;6598:3;:10;;6634:5;6618:23;;6610:32;;6588:9;:55::i;:::-;6581:62;;6484:167;;;;:::o;6240:158::-;6313:4;6337:53;6345:3;:10;;6381:5;6365:23;;6357:32;;6337:7;:53::i;:::-;6330:60;;6240:158;;;;:::o;31071:1412::-;31183:1;31165:20;;:6;:20;;;;31157:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;31267:1;31246:23;;:9;:23;;;;31238:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31334:1;31328:3;:7;31320:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31390:9;31401;31414:15;:13;:15::i;:::-;31389:40;;;;31440:11;31460:3;31454;:9;;;;:::i;:::-;31440:23;;31474:9;31486:27;31495:6;31503:9;31486:8;:27::i;:::-;31474:39;;31534:17;31528:23;;;;;;;;;;;;;;;;:2;:23;;;;;;;;;;;;;;;;;31524:827;;;31605:1;31600;31594:3;:7;;;;:::i;:::-;31593:13;;;;:::i;:::-;31568:12;:20;31581:6;31568:20;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;31656:3;31650;:9;;;;:::i;:::-;31622:12;:23;31635:9;31622:23;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;31723:1;31718;31711:3;31705;:9;;;;:::i;:::-;31704:15;;;;:::i;:::-;31703:21;;;;:::i;:::-;31675:12;:23;31688:9;31675:23;;;;;;;;;;;;;;;;:50;;;;;;;:::i;:::-;;;;;;;;31524:827;;;31753:19;31747:25;;;;;;;;;;;;;;;;:2;:25;;;;;;;;;;;;;;;;;31743:608;;;31814:3;31789:12;:20;31802:6;31789:20;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;31870:1;31865;31859:3;:7;;;;:::i;:::-;31858:13;;;;:::i;:::-;31833:12;:20;31846:6;31833:20;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;31935:1;31930;31923:3;31917;:9;;;;:::i;:::-;31916:15;;;;:::i;:::-;31915:21;;;;:::i;:::-;31887:12;:23;31900:9;31887:23;;;;;;;;;;;;;;;;:50;;;;;;;:::i;:::-;;;;;;;;31743:608;;;31965:19;31959:25;;;;;;;;;;;;;;;;:2;:25;;;;;;;;;;;;;;;;;31955:396;;;32026:3;32001:12;:20;32014:6;32001:20;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;32082:1;32077;32071:3;:7;;;;:::i;:::-;32070:13;;;;:::i;:::-;32045:12;:20;32058:6;32045:20;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;32133:3;32127;:9;;;;:::i;:::-;32099:12;:23;32112:9;32099:23;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;32200:1;32195;32188:3;32182;:9;;;;:::i;:::-;32181:15;;;;:::i;:::-;32180:21;;;;:::i;:::-;32152:12;:23;32165:9;32152:23;;;;;;;;;;;;;;;;:50;;;;;;;:::i;:::-;;;;;;;;31955:396;;;32272:1;32267;32261:3;:7;;;;:::i;:::-;32260:13;;;;:::i;:::-;32235:12;:20;32248:6;32235:20;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;32337:1;32332;32325:3;32319;:9;;;;:::i;:::-;32318:15;;;;:::i;:::-;32317:21;;;;:::i;:::-;32289:12;:23;32302:9;32289:23;;;;;;;;;;;;;;;;:50;;;;;;;:::i;:::-;;;;;;;;31955:396;31743:608;31524:827;32390:1;32385;32379:3;:7;;;;:::i;:::-;32378:13;;;;:::i;:::-;32361:11;;:31;;;;;;;:::i;:::-;;;;;;;;32418:3;32403:11;;:18;;;;;;;:::i;:::-;;;;;;;;32454:9;32437:38;;32446:6;32437:38;;;32471:3;32465;:9;;;;:::i;:::-;32437:38;;;;;;:::i;:::-;;;;;;;;31071:1412;;;;;;;:::o;28575:218::-;9105:1;9256:7;;:19;;9248:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;9105:1;9324:7;:18;;;;28696:9:::1;28715:5;28708:22;;;28731:2;28735:6;28708:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28696:46;;28761:4;28753:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;9355:1;9061::::0;9369:7;:22;;;;28575:218;;;:::o;6737:117::-;6800:7;6827:19;6835:3;:10;;6827:7;:19::i;:::-;6820:26;;6737:117;;;:::o;7198:158::-;7272:7;7323:22;7327:3;:10;;7339:5;7323:3;:22::i;:::-;7315:31;;7292:56;;7198:158;;;;:::o;27504:241::-;9105:1;9256:7;;:19;;9248:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;9105:1;9324:7;:18;;;;27627:9:::1;27646:5;27639:26;;;27666:4;27680;27687:6;27639:55;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27627:67;;27713:4;27705:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;9355:1;9061::::0;9369:7;:22;;;;27504:241;;;:::o;976:414::-;1039:4;1061:21;1071:3;1076:5;1061:9;:21::i;:::-;1056:327;;1099:3;:11;;1116:5;1099:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1282:3;:11;;:18;;;;1260:3;:12;;:19;1273:5;1260:19;;;;;;;;;;;:40;;;;1322:4;1315:11;;;;1056:327;1366:5;1359:12;;976:414;;;;;:::o;3196:129::-;3269:4;3316:1;3293:3;:12;;:19;3306:5;3293:19;;;;;;;;;;;;:24;;3286:31;;3196:129;;;;:::o;1566:1544::-;1632:4;1750:18;1771:3;:12;;:19;1784:5;1771:19;;;;;;;;;;;;1750:40;;1821:1;1807:10;:15;1803:1300;;2169:21;2206:1;2193:10;:14;;;;:::i;:::-;2169:38;;2222:17;2263:1;2242:3;:11;;:18;;;;:22;;;;:::i;:::-;2222:42;;2509:17;2529:3;:11;;2541:9;2529:22;;;;;;;;;;;;;;;;;;;;;;;;2509:42;;2675:9;2646:3;:11;;2658:13;2646:26;;;;;;;;;;;;;;;;;;;;;;;:38;;;;2794:1;2778:13;:17;;;;:::i;:::-;2752:3;:12;;:23;2765:9;2752:23;;;;;;;;;;;:43;;;;2904:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2999:3;:12;;:19;3012:5;2999:19;;;;;;;;;;;2992:26;;;3042:4;3035:11;;;;;;;;1803:1300;3086:5;3079:12;;;1566:1544;;;;;:::o;30338:727::-;30414:8;30435:21;30459:40;30482:8;30492:6;30459:22;:40::i;:::-;30435:64;;30510:24;30537:43;30560:8;30570:9;30537:22;:43::i;:::-;30510:70;;30595:16;:40;;;;;30616:19;30615:20;30595:40;30591:448;;;30656:19;30652:23;;30591:448;;;30698:16;30697:17;:40;;;;;30718:19;30697:40;30693:346;;;30758:17;30754:21;;30693:346;;;30798:16;30797:17;:41;;;;;30819:19;30818:20;30797:41;30793:246;;;30859:15;30855:19;;30793:246;;;30896:16;:39;;;;;30916:19;30896:39;30892:147;;;30956:19;30952:23;;30892:147;;;31012:15;31008:19;;30892:147;30793:246;30693:346;30591:448;31049:8;;30338:727;;;;:::o;3411:109::-;3467:7;3494:3;:11;;:18;;;;3487:25;;3411:109;;;:::o;3864:204::-;3931:7;3980:5;3959:3;:11;;:18;;;;:26;3951:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4042:3;:11;;4054:5;4042:18;;;;;;;;;;;;;;;;;;;;;;;;4035:25;;3864:204;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:137::-;206:5;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;212:77;;;;:::o;295:139::-;341:5;379:6;366:20;357:29;;395:33;422:5;395:33;:::i;:::-;347:87;;;;:::o;440:143::-;497:5;528:6;522:13;513:22;;544:33;571:5;544:33;:::i;:::-;503:80;;;;:::o;589:262::-;648:6;697:2;685:9;676:7;672:23;668:32;665:2;;;713:1;710;703:12;665:2;756:1;781:53;826:7;817:6;806:9;802:22;781:53;:::i;:::-;771:63;;727:117;655:196;;;;:::o;857:407::-;925:6;933;982:2;970:9;961:7;957:23;953:32;950:2;;;998:1;995;988:12;950:2;1041:1;1066:53;1111:7;1102:6;1091:9;1087:22;1066:53;:::i;:::-;1056:63;;1012:117;1168:2;1194:53;1239:7;1230:6;1219:9;1215:22;1194:53;:::i;:::-;1184:63;;1139:118;940:324;;;;;:::o;1270:552::-;1347:6;1355;1363;1412:2;1400:9;1391:7;1387:23;1383:32;1380:2;;;1428:1;1425;1418:12;1380:2;1471:1;1496:53;1541:7;1532:6;1521:9;1517:22;1496:53;:::i;:::-;1486:63;;1442:117;1598:2;1624:53;1669:7;1660:6;1649:9;1645:22;1624:53;:::i;:::-;1614:63;;1569:118;1726:2;1752:53;1797:7;1788:6;1777:9;1773:22;1752:53;:::i;:::-;1742:63;;1697:118;1370:452;;;;;:::o;1828:407::-;1896:6;1904;1953:2;1941:9;1932:7;1928:23;1924:32;1921:2;;;1969:1;1966;1959:12;1921:2;2012:1;2037:53;2082:7;2073:6;2062:9;2058:22;2037:53;:::i;:::-;2027:63;;1983:117;2139:2;2165:53;2210:7;2201:6;2190:9;2186:22;2165:53;:::i;:::-;2155:63;;2110:118;1911:324;;;;;:::o;2241:278::-;2308:6;2357:2;2345:9;2336:7;2332:23;2328:32;2325:2;;;2373:1;2370;2363:12;2325:2;2416:1;2441:61;2494:7;2485:6;2474:9;2470:22;2441:61;:::i;:::-;2431:71;;2387:125;2315:204;;;;:::o;2525:262::-;2584:6;2633:2;2621:9;2612:7;2608:23;2604:32;2601:2;;;2649:1;2646;2639:12;2601:2;2692:1;2717:53;2762:7;2753:6;2742:9;2738:22;2717:53;:::i;:::-;2707:63;;2663:117;2591:196;;;;:::o;2793:284::-;2863:6;2912:2;2900:9;2891:7;2887:23;2883:32;2880:2;;;2928:1;2925;2918:12;2880:2;2971:1;2996:64;3052:7;3043:6;3032:9;3028:22;2996:64;:::i;:::-;2986:74;;2942:128;2870:207;;;;:::o;3083:118::-;3170:24;3188:5;3170:24;:::i;:::-;3165:3;3158:37;3148:53;;:::o;3207:109::-;3288:21;3303:5;3288:21;:::i;:::-;3283:3;3276:34;3266:50;;:::o;3322:364::-;3410:3;3438:39;3471:5;3438:39;:::i;:::-;3493:71;3557:6;3552:3;3493:71;:::i;:::-;3486:78;;3573:52;3618:6;3613:3;3606:4;3599:5;3595:16;3573:52;:::i;:::-;3650:29;3672:6;3650:29;:::i;:::-;3645:3;3641:39;3634:46;;3414:272;;;;;:::o;3692:366::-;3834:3;3855:67;3919:2;3914:3;3855:67;:::i;:::-;3848:74;;3931:93;4020:3;3931:93;:::i;:::-;4049:2;4044:3;4040:12;4033:19;;3838:220;;;:::o;4064:366::-;4206:3;4227:67;4291:2;4286:3;4227:67;:::i;:::-;4220:74;;4303:93;4392:3;4303:93;:::i;:::-;4421:2;4416:3;4412:12;4405:19;;4210:220;;;:::o;4436:366::-;4578:3;4599:67;4663:2;4658:3;4599:67;:::i;:::-;4592:74;;4675:93;4764:3;4675:93;:::i;:::-;4793:2;4788:3;4784:12;4777:19;;4582:220;;;:::o;4808:366::-;4950:3;4971:67;5035:2;5030:3;4971:67;:::i;:::-;4964:74;;5047:93;5136:3;5047:93;:::i;:::-;5165:2;5160:3;5156:12;5149:19;;4954:220;;;:::o;5180:366::-;5322:3;5343:67;5407:2;5402:3;5343:67;:::i;:::-;5336:74;;5419:93;5508:3;5419:93;:::i;:::-;5537:2;5532:3;5528:12;5521:19;;5326:220;;;:::o;5552:366::-;5694:3;5715:67;5779:2;5774:3;5715:67;:::i;:::-;5708:74;;5791:93;5880:3;5791:93;:::i;:::-;5909:2;5904:3;5900:12;5893:19;;5698:220;;;:::o;5924:365::-;6066:3;6087:66;6151:1;6146:3;6087:66;:::i;:::-;6080:73;;6162:93;6251:3;6162:93;:::i;:::-;6280:2;6275:3;6271:12;6264:19;;6070:219;;;:::o;6295:366::-;6437:3;6458:67;6522:2;6517:3;6458:67;:::i;:::-;6451:74;;6534:93;6623:3;6534:93;:::i;:::-;6652:2;6647:3;6643:12;6636:19;;6441:220;;;:::o;6667:366::-;6809:3;6830:67;6894:2;6889:3;6830:67;:::i;:::-;6823:74;;6906:93;6995:3;6906:93;:::i;:::-;7024:2;7019:3;7015:12;7008:19;;6813:220;;;:::o;7039:366::-;7181:3;7202:67;7266:2;7261:3;7202:67;:::i;:::-;7195:74;;7278:93;7367:3;7278:93;:::i;:::-;7396:2;7391:3;7387:12;7380:19;;7185:220;;;:::o;7411:366::-;7553:3;7574:67;7638:2;7633:3;7574:67;:::i;:::-;7567:74;;7650:93;7739:3;7650:93;:::i;:::-;7768:2;7763:3;7759:12;7752:19;;7557:220;;;:::o;7783:366::-;7925:3;7946:67;8010:2;8005:3;7946:67;:::i;:::-;7939:74;;8022:93;8111:3;8022:93;:::i;:::-;8140:2;8135:3;8131:12;8124:19;;7929:220;;;:::o;8155:366::-;8297:3;8318:67;8382:2;8377:3;8318:67;:::i;:::-;8311:74;;8394:93;8483:3;8394:93;:::i;:::-;8512:2;8507:3;8503:12;8496:19;;8301:220;;;:::o;8527:366::-;8669:3;8690:67;8754:2;8749:3;8690:67;:::i;:::-;8683:74;;8766:93;8855:3;8766:93;:::i;:::-;8884:2;8879:3;8875:12;8868:19;;8673:220;;;:::o;8899:118::-;8986:24;9004:5;8986:24;:::i;:::-;8981:3;8974:37;8964:53;;:::o;9023:112::-;9106:22;9122:5;9106:22;:::i;:::-;9101:3;9094:35;9084:51;;:::o;9141:222::-;9234:4;9272:2;9261:9;9257:18;9249:26;;9285:71;9353:1;9342:9;9338:17;9329:6;9285:71;:::i;:::-;9239:124;;;;:::o;9369:442::-;9518:4;9556:2;9545:9;9541:18;9533:26;;9569:71;9637:1;9626:9;9622:17;9613:6;9569:71;:::i;:::-;9650:72;9718:2;9707:9;9703:18;9694:6;9650:72;:::i;:::-;9732;9800:2;9789:9;9785:18;9776:6;9732:72;:::i;:::-;9523:288;;;;;;:::o;9817:332::-;9938:4;9976:2;9965:9;9961:18;9953:26;;9989:71;10057:1;10046:9;10042:17;10033:6;9989:71;:::i;:::-;10070:72;10138:2;10127:9;10123:18;10114:6;10070:72;:::i;:::-;9943:206;;;;;:::o;10155:210::-;10242:4;10280:2;10269:9;10265:18;10257:26;;10293:65;10355:1;10344:9;10340:17;10331:6;10293:65;:::i;:::-;10247:118;;;;:::o;10371:313::-;10484:4;10522:2;10511:9;10507:18;10499:26;;10571:9;10565:4;10561:20;10557:1;10546:9;10542:17;10535:47;10599:78;10672:4;10663:6;10599:78;:::i;:::-;10591:86;;10489:195;;;;:::o;10690:419::-;10856:4;10894:2;10883:9;10879:18;10871:26;;10943:9;10937:4;10933:20;10929:1;10918:9;10914:17;10907:47;10971:131;11097:4;10971:131;:::i;:::-;10963:139;;10861:248;;;:::o;11115:419::-;11281:4;11319:2;11308:9;11304:18;11296:26;;11368:9;11362:4;11358:20;11354:1;11343:9;11339:17;11332:47;11396:131;11522:4;11396:131;:::i;:::-;11388:139;;11286:248;;;:::o;11540:419::-;11706:4;11744:2;11733:9;11729:18;11721:26;;11793:9;11787:4;11783:20;11779:1;11768:9;11764:17;11757:47;11821:131;11947:4;11821:131;:::i;:::-;11813:139;;11711:248;;;:::o;11965:419::-;12131:4;12169:2;12158:9;12154:18;12146:26;;12218:9;12212:4;12208:20;12204:1;12193:9;12189:17;12182:47;12246:131;12372:4;12246:131;:::i;:::-;12238:139;;12136:248;;;:::o;12390:419::-;12556:4;12594:2;12583:9;12579:18;12571:26;;12643:9;12637:4;12633:20;12629:1;12618:9;12614:17;12607:47;12671:131;12797:4;12671:131;:::i;:::-;12663:139;;12561:248;;;:::o;12815:419::-;12981:4;13019:2;13008:9;13004:18;12996:26;;13068:9;13062:4;13058:20;13054:1;13043:9;13039:17;13032:47;13096:131;13222:4;13096:131;:::i;:::-;13088:139;;12986:248;;;:::o;13240:419::-;13406:4;13444:2;13433:9;13429:18;13421:26;;13493:9;13487:4;13483:20;13479:1;13468:9;13464:17;13457:47;13521:131;13647:4;13521:131;:::i;:::-;13513:139;;13411:248;;;:::o;13665:419::-;13831:4;13869:2;13858:9;13854:18;13846:26;;13918:9;13912:4;13908:20;13904:1;13893:9;13889:17;13882:47;13946:131;14072:4;13946:131;:::i;:::-;13938:139;;13836:248;;;:::o;14090:419::-;14256:4;14294:2;14283:9;14279:18;14271:26;;14343:9;14337:4;14333:20;14329:1;14318:9;14314:17;14307:47;14371:131;14497:4;14371:131;:::i;:::-;14363:139;;14261:248;;;:::o;14515:419::-;14681:4;14719:2;14708:9;14704:18;14696:26;;14768:9;14762:4;14758:20;14754:1;14743:9;14739:17;14732:47;14796:131;14922:4;14796:131;:::i;:::-;14788:139;;14686:248;;;:::o;14940:419::-;15106:4;15144:2;15133:9;15129:18;15121:26;;15193:9;15187:4;15183:20;15179:1;15168:9;15164:17;15157:47;15221:131;15347:4;15221:131;:::i;:::-;15213:139;;15111:248;;;:::o;15365:419::-;15531:4;15569:2;15558:9;15554:18;15546:26;;15618:9;15612:4;15608:20;15604:1;15593:9;15589:17;15582:47;15646:131;15772:4;15646:131;:::i;:::-;15638:139;;15536:248;;;:::o;15790:419::-;15956:4;15994:2;15983:9;15979:18;15971:26;;16043:9;16037:4;16033:20;16029:1;16018:9;16014:17;16007:47;16071:131;16197:4;16071:131;:::i;:::-;16063:139;;15961:248;;;:::o;16215:419::-;16381:4;16419:2;16408:9;16404:18;16396:26;;16468:9;16462:4;16458:20;16454:1;16443:9;16439:17;16432:47;16496:131;16622:4;16496:131;:::i;:::-;16488:139;;16386:248;;;:::o;16640:222::-;16733:4;16771:2;16760:9;16756:18;16748:26;;16784:71;16852:1;16841:9;16837:17;16828:6;16784:71;:::i;:::-;16738:124;;;;:::o;16868:332::-;16989:4;17027:2;17016:9;17012:18;17004:26;;17040:71;17108:1;17097:9;17093:17;17084:6;17040:71;:::i;:::-;17121:72;17189:2;17178:9;17174:18;17165:6;17121:72;:::i;:::-;16994:206;;;;;:::o;17206:214::-;17295:4;17333:2;17322:9;17318:18;17310:26;;17346:67;17410:1;17399:9;17395:17;17386:6;17346:67;:::i;:::-;17300:120;;;;:::o;17426:99::-;17478:6;17512:5;17506:12;17496:22;;17485:40;;;:::o;17531:169::-;17615:11;17649:6;17644:3;17637:19;17689:4;17684:3;17680:14;17665:29;;17627:73;;;;:::o;17706:305::-;17746:3;17765:20;17783:1;17765:20;:::i;:::-;17760:25;;17799:20;17817:1;17799:20;:::i;:::-;17794:25;;17953:1;17885:66;17881:74;17878:1;17875:81;17872:2;;;17959:18;;:::i;:::-;17872:2;18003:1;18000;17996:9;17989:16;;17750:261;;;;:::o;18017:185::-;18057:1;18074:20;18092:1;18074:20;:::i;:::-;18069:25;;18108:20;18126:1;18108:20;:::i;:::-;18103:25;;18147:1;18137:2;;18152:18;;:::i;:::-;18137:2;18194:1;18191;18187:9;18182:14;;18059:143;;;;:::o;18208:348::-;18248:7;18271:20;18289:1;18271:20;:::i;:::-;18266:25;;18305:20;18323:1;18305:20;:::i;:::-;18300:25;;18493:1;18425:66;18421:74;18418:1;18415:81;18410:1;18403:9;18396:17;18392:105;18389:2;;;18500:18;;:::i;:::-;18389:2;18548:1;18545;18541:9;18530:20;;18256:300;;;;:::o;18562:191::-;18602:4;18622:20;18640:1;18622:20;:::i;:::-;18617:25;;18656:20;18674:1;18656:20;:::i;:::-;18651:25;;18695:1;18692;18689:8;18686:2;;;18700:18;;:::i;:::-;18686:2;18745:1;18742;18738:9;18730:17;;18607:146;;;;:::o;18759:96::-;18796:7;18825:24;18843:5;18825:24;:::i;:::-;18814:35;;18804:51;;;:::o;18861:90::-;18895:7;18938:5;18931:13;18924:21;18913:32;;18903:48;;;:::o;18957:126::-;18994:7;19034:42;19027:5;19023:54;19012:65;;19002:81;;;:::o;19089:77::-;19126:7;19155:5;19144:16;;19134:32;;;:::o;19172:86::-;19207:7;19247:4;19240:5;19236:16;19225:27;;19215:43;;;:::o;19264:307::-;19332:1;19342:113;19356:6;19353:1;19350:13;19342:113;;;19441:1;19436:3;19432:11;19426:18;19422:1;19417:3;19413:11;19406:39;19378:2;19375:1;19371:10;19366:15;;19342:113;;;19473:6;19470:1;19467:13;19464:2;;;19553:1;19544:6;19539:3;19535:16;19528:27;19464:2;19313:258;;;;:::o;19577:320::-;19621:6;19658:1;19652:4;19648:12;19638:22;;19705:1;19699:4;19695:12;19726:18;19716:2;;19782:4;19774:6;19770:17;19760:27;;19716:2;19844;19836:6;19833:14;19813:18;19810:38;19807:2;;;19863:18;;:::i;:::-;19807:2;19628:269;;;;:::o;19903:233::-;19942:3;19965:24;19983:5;19965:24;:::i;:::-;19956:33;;20011:66;20004:5;20001:77;19998:2;;;20081:18;;:::i;:::-;19998:2;20128:1;20121:5;20117:13;20110:20;;19946:190;;;:::o;20142:180::-;20190:77;20187:1;20180:88;20287:4;20284:1;20277:15;20311:4;20308:1;20301:15;20328:180;20376:77;20373:1;20366:88;20473:4;20470:1;20463:15;20497:4;20494:1;20487:15;20514:180;20562:77;20559:1;20552:88;20659:4;20656:1;20649:15;20683:4;20680:1;20673:15;20700:102;20741:6;20792:2;20788:7;20783:2;20776:5;20772:14;20768:28;20758:38;;20748:54;;;:::o;20808:221::-;20948:34;20944:1;20936:6;20932:14;20925:58;21017:4;21012:2;21004:6;21000:15;20993:29;20914:115;:::o;21035:222::-;21175:34;21171:1;21163:6;21159:14;21152:58;21244:5;21239:2;21231:6;21227:15;21220:30;21141:116;:::o;21263:171::-;21403:23;21399:1;21391:6;21387:14;21380:47;21369:65;:::o;21440:221::-;21580:34;21576:1;21568:6;21564:14;21557:58;21649:4;21644:2;21636:6;21632:15;21625:29;21546:115;:::o;21667:166::-;21807:18;21803:1;21795:6;21791:14;21784:42;21773:60;:::o;21839:161::-;21979:13;21975:1;21967:6;21963:14;21956:37;21945:55;:::o;22006:157::-;22146:9;22142:1;22134:6;22130:14;22123:33;22112:51;:::o;22169:165::-;22309:17;22305:1;22297:6;22293:14;22286:41;22275:59;:::o;22340:224::-;22480:34;22476:1;22468:6;22464:14;22457:58;22549:7;22544:2;22536:6;22532:15;22525:32;22446:118;:::o;22570:166::-;22710:18;22706:1;22698:6;22694:14;22687:42;22676:60;:::o;22742:223::-;22882:34;22878:1;22870:6;22866:14;22859:58;22951:6;22946:2;22938:6;22934:15;22927:31;22848:117;:::o;22971:165::-;23111:17;23107:1;23099:6;23095:14;23088:41;23077:59;:::o;23142:181::-;23282:33;23278:1;23270:6;23266:14;23259:57;23248:75;:::o;23329:225::-;23469:34;23465:1;23457:6;23453:14;23446:58;23538:8;23533:2;23525:6;23521:15;23514:33;23435:119;:::o;23560:122::-;23633:24;23651:5;23633:24;:::i;:::-;23626:5;23623:35;23613:2;;23672:1;23669;23662:12;23613:2;23603:79;:::o;23688:116::-;23758:21;23773:5;23758:21;:::i;:::-;23751:5;23748:32;23738:2;;23794:1;23791;23784:12;23738:2;23728:76;:::o;23810:122::-;23883:24;23901:5;23883:24;:::i;:::-;23876:5;23873:35;23863:2;;23922:1;23919;23912:12;23863:2;23853:79;:::o
Swarm Source
ipfs://a43889581df1d82eb7312cbb1fc1048ae658a33ebf516822c2ec2eae0b1e2e6d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $70,055 | 0.2586 | $18,115.52 |
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.