Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 378 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake | 21522676 | 20 days ago | IN | 0 ETH | 0.00075074 | ||||
Claim | 21522566 | 20 days ago | IN | 0 ETH | 0.00062781 | ||||
Unstake | 21488257 | 25 days ago | IN | 0 ETH | 0.00076413 | ||||
Unstake | 21488177 | 25 days ago | IN | 0 ETH | 0.00104641 | ||||
Claim | 21488159 | 25 days ago | IN | 0 ETH | 0.00080785 | ||||
Unstake | 21363318 | 42 days ago | IN | 0 ETH | 0.00068773 | ||||
Claim | 21363302 | 42 days ago | IN | 0 ETH | 0.00081202 | ||||
Unstake | 21352979 | 44 days ago | IN | 0 ETH | 0.00152773 | ||||
Claim | 21352975 | 44 days ago | IN | 0 ETH | 0.00113822 | ||||
Unstake | 21324317 | 48 days ago | IN | 0 ETH | 0.00257469 | ||||
Claim | 21324314 | 48 days ago | IN | 0 ETH | 0.00233739 | ||||
Unstake | 21290805 | 52 days ago | IN | 0 ETH | 0.00049949 | ||||
Claim | 21290800 | 52 days ago | IN | 0 ETH | 0.00052219 | ||||
Unstake | 21257240 | 57 days ago | IN | 0 ETH | 0.00139715 | ||||
Claim | 21146906 | 72 days ago | IN | 0 ETH | 0.00038653 | ||||
Unstake | 21146894 | 72 days ago | IN | 0 ETH | 0.00110186 | ||||
Claim | 21143990 | 73 days ago | IN | 0 ETH | 0.00125372 | ||||
Unstake | 21143960 | 73 days ago | IN | 0 ETH | 0.00356219 | ||||
Claim | 21134626 | 74 days ago | IN | 0 ETH | 0.00069283 | ||||
Claim | 21131320 | 75 days ago | IN | 0 ETH | 0.00118334 | ||||
Unstake | 21131302 | 75 days ago | IN | 0 ETH | 0.00449253 | ||||
Claim | 21123988 | 76 days ago | IN | 0 ETH | 0.00064 | ||||
Unstake | 21115138 | 77 days ago | IN | 0 ETH | 0.00085164 | ||||
Claim | 21115134 | 77 days ago | IN | 0 ETH | 0.00045103 | ||||
Claim | 21095904 | 80 days ago | IN | 0 ETH | 0.00016023 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ConstantReturnStaking
Compiler Version
v0.6.11+commit.5ef660b1
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-09 */ /** *Submitted for verification at BscScan.com on 2023-03-14 */ // SPDX-License-Identifier: BSD-3-Clause pragma solidity 0.6.11; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @dev 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) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @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"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { 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); } } } } /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.0.0, only sets of type `address` (`AddressSet`) and `uint256` * (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(value))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(value))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(value))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint256(_at(set._inner, index))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } interface Token { function transferFrom(address, address, uint) external returns (bool); function transfer(address, uint) external returns (bool); } interface LegacyToken { function transfer(address, uint) external; } contract ConstantReturnStaking is Ownable { using Address for address; using SafeMath for uint; using EnumerableSet for EnumerableSet.AddressSet; event RewardsTransferred(address indexed holder, uint amount); event ReferralFeeTransferred(address indexed referrer, uint amount); event Reinvest(address indexed holder, uint amount); event EmergencyDeclared(address owner); event StakingFeeChanged(uint fee); event UnstakingFeeChanged(uint fee); event RewardRateChanged(uint rewardRate); event MaxPoolSizeChanged(uint maxPoolSize); // ============================= CONTRACT VARIABLES ============================== // stake token contract address address public constant TRUSTED_TOKEN_ADDRESS = 0x39b46B212bDF15b42B166779b9d1787A68b9D0c3; // earnings reward rate uint public REWARD_RATE_X_100 = 1250; uint public constant REWARD_INTERVAL = 365 days; // staking fee uint public STAKING_FEE_RATE_X_100 = 0; // unstaking fee uint public UNSTAKING_FEE_RATE_X_100 = 0; // this % of earned rewards go to referrer uint public constant REFERRAL_FEE_RATE_X_100 = 500; // unstaking possible after 72 hours uint public LOCKUP_TIME = 0; uint public constant ADMIN_CAN_CLAIM_AFTER = 395 days; uint public constant EMERGENCY_WAIT_TIME = 3 days; // max pool size uint public maxPoolSize = 5000000e18; // ========================= END CONTRACT VARIABLES ============================== uint public totalClaimedRewards = 0; uint public totalClaimedReferralFee = 0; uint public totalDeposited = 0; uint public immutable contractStartTime; uint public adminClaimableTime; bool public isEmergency = false; // Contracts are not allowed to deposit, claim or withdraw modifier noContractsAllowed() { require(!(address(msg.sender).isContract()) && tx.origin == msg.sender, "No Contracts Allowed!"); _; } modifier notDuringEmergency() { require(!isEmergency, "Cannot execute during emergency!"); _; } function declareEmergency() external onlyOwner notDuringEmergency { isEmergency = true; adminClaimableTime = now.add(EMERGENCY_WAIT_TIME); LOCKUP_TIME = 0; emit EmergencyDeclared(owner); } EnumerableSet.AddressSet private holders; mapping (address => uint) public depositedTokens; mapping (address => uint) public stakingTime; mapping (address => uint) public lastClaimedTime; mapping (address => uint) public totalEarnedTokens; mapping (address => uint) public rewardsPendingClaim; mapping (address => address) public referrals; mapping (address => uint) public totalReferralFeeEarned; mapping (address => EnumerableSet.AddressSet) private activeReferredAddressesOfUser; mapping (address => EnumerableSet.AddressSet) private totalReferredAddressesOfUser; constructor() public { contractStartTime = now; adminClaimableTime = now.add(ADMIN_CAN_CLAIM_AFTER); } function updateAccount(address account) private { uint pendingDivs = getPendingDivs(account); if (pendingDivs > 0) { uint referralFee = pendingDivs.mul(REFERRAL_FEE_RATE_X_100).div(100e2); uint pendingDivsAfterFee = pendingDivs.sub(referralFee); bool success = transferReferralFeeIfPossible(referrals[account], referralFee); uint amount = pendingDivs; if (success) { amount = pendingDivsAfterFee; } rewardsPendingClaim[account] = rewardsPendingClaim[account].add(amount); totalEarnedTokens[account] = totalEarnedTokens[account].add(amount); totalClaimedRewards = totalClaimedRewards.add(amount); } lastClaimedTime[account] = now; } function transferReferralFeeIfPossible(address account, uint amount) private returns (bool) { if (account != address(0) && amount > 0) { totalReferralFeeEarned[account] = totalReferralFeeEarned[account].add(amount); require(Token(TRUSTED_TOKEN_ADDRESS).transfer(account, amount), "Could not transfer referral fee!"); totalClaimedReferralFee = totalClaimedReferralFee.add(amount); emit ReferralFeeTransferred(account, amount); return true; } return false; } function getPendingDivs(address _holder) public view returns (uint) { if (!holders.contains(_holder)) return 0; if (depositedTokens[_holder] == 0) return 0; uint timeDiff; uint stakingEndTime = contractStartTime.add(REWARD_INTERVAL); uint _now = now; if (_now > stakingEndTime) { _now = stakingEndTime; } if (lastClaimedTime[_holder] >= _now) { timeDiff = 0; } else { timeDiff = _now.sub(lastClaimedTime[_holder]); } uint stakedAmount = depositedTokens[_holder]; uint pendingDivs = stakedAmount .mul(REWARD_RATE_X_100) .mul(timeDiff) .div(REWARD_INTERVAL) .div(1e4); return pendingDivs; } function getTotalPendingDivs(address _holder) external view returns (uint) { uint pending = getPendingDivs(_holder); uint awaitingClaim = rewardsPendingClaim[_holder]; return pending.add(awaitingClaim); } function getNumberOfHolders() external view returns (uint) { return holders.length(); } function getNumberOfReferredStakers(address referrer) external view returns (uint _activeStakers, uint _totalStakers) { _activeStakers = activeReferredAddressesOfUser[referrer].length(); _totalStakers = totalReferredAddressesOfUser[referrer].length(); } function getReferredStaker(address account, uint i) external view returns (address _staker, uint _totalEarned) { _staker = totalReferredAddressesOfUser[account].at(i); _totalEarned = totalEarnedTokens[_staker]; } function getActiveReferredStaker(address account, uint i) external view returns (address _staker, uint _totalEarned) { _staker = activeReferredAddressesOfUser[account].at(i); _totalEarned = totalEarnedTokens[_staker]; } function stake(uint amountToStake, address referrer) external noContractsAllowed notDuringEmergency { require(amountToStake > 0, "Cannot deposit 0 Tokens"); require(Token(TRUSTED_TOKEN_ADDRESS).transferFrom(msg.sender, address(this), amountToStake), "Insufficient Token Allowance"); require(totalDeposited.add(amountToStake) <= maxPoolSize, "Max Pool Size Has Reached"); updateAccount(msg.sender); uint fee = amountToStake.mul(STAKING_FEE_RATE_X_100).div(1e4); uint amountAfterFee = amountToStake.sub(fee); require(Token(TRUSTED_TOKEN_ADDRESS).transfer(owner, fee), "Could not transfer deposit fee."); depositedTokens[msg.sender] = depositedTokens[msg.sender].add(amountAfterFee); holders.add(msg.sender); if (referrals[msg.sender] == address(0)) { referrals[msg.sender] = referrer; } totalReferredAddressesOfUser[referrals[msg.sender]].add(msg.sender); activeReferredAddressesOfUser[referrals[msg.sender]].add(msg.sender); stakingTime[msg.sender] = now; totalDeposited = totalDeposited.add(amountToStake); } function unstake(uint amountToWithdraw) external noContractsAllowed { require(depositedTokens[msg.sender] >= amountToWithdraw, "Invalid amount to withdraw"); require(now.sub(stakingTime[msg.sender]) > LOCKUP_TIME, "You recently staked, please wait before withdrawing."); updateAccount(msg.sender); uint fee = amountToWithdraw.mul(UNSTAKING_FEE_RATE_X_100).div(1e4); uint amountAfterFee = amountToWithdraw.sub(fee); require(Token(TRUSTED_TOKEN_ADDRESS).transfer(owner, fee), "Could not transfer withdraw fee."); require(Token(TRUSTED_TOKEN_ADDRESS).transfer(msg.sender, amountAfterFee), "Could not transfer tokens."); depositedTokens[msg.sender] = depositedTokens[msg.sender].sub(amountToWithdraw); if (holders.contains(msg.sender) && depositedTokens[msg.sender] == 0) { holders.remove(msg.sender); activeReferredAddressesOfUser[referrals[msg.sender]].remove(msg.sender); } } // emergency unstake without caring about pending earnings // pending earnings will be lost / set to 0 if used emergency unstake function emergencyUnstake(uint amountToWithdraw) external noContractsAllowed { require(depositedTokens[msg.sender] >= amountToWithdraw, "Invalid amount to withdraw"); require(now.sub(stakingTime[msg.sender]) > LOCKUP_TIME, "You recently staked, please wait before withdrawing."); // set pending earnings to 0 here lastClaimedTime[msg.sender] = now; uint fee = amountToWithdraw.mul(UNSTAKING_FEE_RATE_X_100).div(1e4); uint amountAfterFee = amountToWithdraw.sub(fee); require(Token(TRUSTED_TOKEN_ADDRESS).transfer(owner, fee), "Could not transfer withdraw fee."); require(Token(TRUSTED_TOKEN_ADDRESS).transfer(msg.sender, amountAfterFee), "Could not transfer tokens."); depositedTokens[msg.sender] = depositedTokens[msg.sender].sub(amountToWithdraw); if (holders.contains(msg.sender) && depositedTokens[msg.sender] == 0) { holders.remove(msg.sender); } } function claim() external noContractsAllowed notDuringEmergency { updateAccount(msg.sender); uint amount = rewardsPendingClaim[msg.sender]; if (amount > 0) { rewardsPendingClaim[msg.sender] = 0; require(Token(TRUSTED_TOKEN_ADDRESS).transfer(msg.sender, amount), "Could not transfer earned tokens."); emit RewardsTransferred(msg.sender, amount); } } function reInvest() external noContractsAllowed notDuringEmergency { updateAccount(msg.sender); uint amount = rewardsPendingClaim[msg.sender]; if (amount > 0) { rewardsPendingClaim[msg.sender] = 0; // re-invest here depositedTokens[msg.sender] = depositedTokens[msg.sender].add(amount); // stakingTime[msg.sender] = now; emit Reinvest(msg.sender, amount); } } function getStakersList(uint startIndex, uint endIndex) public view returns (address[] memory stakers, uint[] memory stakingTimestamps, uint[] memory lastClaimedTimeStamps, uint[] memory stakedTokens) { require (startIndex < endIndex); uint length = endIndex.sub(startIndex); address[] memory _stakers = new address[](length); uint[] memory _stakingTimestamps = new uint[](length); uint[] memory _lastClaimedTimeStamps = new uint[](length); uint[] memory _stakedTokens = new uint[](length); for (uint i = startIndex; i < endIndex; i = i.add(1)) { address staker = holders.at(i); uint listIndex = i.sub(startIndex); _stakers[listIndex] = staker; _stakingTimestamps[listIndex] = stakingTime[staker]; _lastClaimedTimeStamps[listIndex] = lastClaimedTime[staker]; _stakedTokens[listIndex] = depositedTokens[staker]; } return (_stakers, _stakingTimestamps, _lastClaimedTimeStamps, _stakedTokens); } // function to allow admin to set new Max Pool Size function setMaxPoolSize(uint newPoolSize) public onlyOwner { maxPoolSize = newPoolSize; emit MaxPoolSizeChanged(maxPoolSize); } // function to allow admin to set new Staking Fee function setRewardRateX100(uint newRewardRate) public onlyOwner { REWARD_RATE_X_100 = newRewardRate; emit RewardRateChanged(REWARD_RATE_X_100); } // function to allow admin to set new Staking Fee function setStakingFeeRateX100(uint newStakingFeeRateX100) public onlyOwner { require(newStakingFeeRateX100 < 100e2, "Invalid fee!"); STAKING_FEE_RATE_X_100 = newStakingFeeRateX100; emit StakingFeeChanged(STAKING_FEE_RATE_X_100); } // function to allow admin to set new Unstaking Fee function setUnstakingFeeRateX100(uint newUnstakingFeeRateX100) public onlyOwner { require(newUnstakingFeeRateX100 < 100e2, "Invalid fee!"); UNSTAKING_FEE_RATE_X_100 = newUnstakingFeeRateX100; emit UnstakingFeeChanged(UNSTAKING_FEE_RATE_X_100); } // function to allow admin to claim *other* ERC20 tokens sent to this contract (by mistake) function transferAnyERC20Token(address tokenAddress, address recipient, uint amount) external onlyOwner { require (now > adminClaimableTime, "Contract not expired yet!"); require (Token(tokenAddress).transfer(recipient, amount), "Transfer failed!"); } // function to allow admin to claim *other* ERC20 tokens sent to this contract (by mistake) function transferAnyLegacyERC20Token(address tokenAddress, address recipient, uint amount) external onlyOwner { require (now > adminClaimableTime, "Contract not expired yet!"); LegacyToken(tokenAddress).transfer(recipient, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"EmergencyDeclared","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxPoolSize","type":"uint256"}],"name":"MaxPoolSizeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReferralFeeTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Reinvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewardRate","type":"uint256"}],"name":"RewardRateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"StakingFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"UnstakingFeeChanged","type":"event"},{"inputs":[],"name":"ADMIN_CAN_CLAIM_AFTER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMERGENCY_WAIT_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOCKUP_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REFERRAL_FEE_RATE_X_100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_RATE_X_100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_FEE_RATE_X_100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRUSTED_TOKEN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNSTAKING_FEE_RATE_X_100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminClaimableTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"declareEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToWithdraw","type":"uint256"}],"name":"emergencyUnstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"i","type":"uint256"}],"name":"getActiveReferredStaker","outputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_totalEarned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"getNumberOfReferredStakers","outputs":[{"internalType":"uint256","name":"_activeStakers","type":"uint256"},{"internalType":"uint256","name":"_totalStakers","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getPendingDivs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"i","type":"uint256"}],"name":"getReferredStaker","outputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_totalEarned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"startIndex","type":"uint256"},{"internalType":"uint256","name":"endIndex","type":"uint256"}],"name":"getStakersList","outputs":[{"internalType":"address[]","name":"stakers","type":"address[]"},{"internalType":"uint256[]","name":"stakingTimestamps","type":"uint256[]"},{"internalType":"uint256[]","name":"lastClaimedTimeStamps","type":"uint256[]"},{"internalType":"uint256[]","name":"stakedTokens","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getTotalPendingDivs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isEmergency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPoolSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reInvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrals","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardsPendingClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPoolSize","type":"uint256"}],"name":"setMaxPoolSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRewardRate","type":"uint256"}],"name":"setRewardRateX100","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newStakingFeeRateX100","type":"uint256"}],"name":"setStakingFeeRateX100","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newUnstakingFeeRateX100","type":"uint256"}],"name":"setUnstakingFeeRateX100","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToStake","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimedReferralFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDeposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalEarnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalReferralFeeEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferAnyLegacyERC20Token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToWithdraw","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040526104e26001556000600255600060035560006004556a0422ca8b0a00a4250000006005556000600655600060075560006008556000600a60006101000a81548160ff0219169083151502179055503480156200005f57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260808181525050620000c6630208c08042620000d260201b62003d2e1790919060201c565b600981905550620000ef565b600080828401905083811015620000e557fe5b8091505092915050565b60805161463c6200010f6000398061143b5280613233525061463c6000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c8063a35f7c7b11610151578063df4b70ba116100c3578063f2fde38b11610087578063f2fde38b14610c6e578063f3f91fa014610cb2578063f5326ada14610d0a578063f6af4dff14610d28578063f749229e14610d46578063ff50abdc14610da557610274565b8063df4b70ba14610b3e578063e3081bb314610b5c578063e7b62f5814610b8a578063ebe6cad114610be2578063f25b836414610c0057610274565b8063c636389211610115578063c636389214610a00578063ca7e083514610a58578063ca9a213214610a76578063d079490f14610a94578063d493b9ac14610ab2578063d578ceab14610b2057610274565b8063a35f7c7b146108f4578063b7d3786e1461093e578063c1665f401461096c578063c326bf4f1461098a578063c5579dc0146109e257610274565b806350be99ad116101ea5780637acb7757116101ae5780637acb7757146107345780637e44b933146107825780638da5cb5b146107a057806398896d10146107ea5780639ca423b314610842578063a1ccb813146108c657610274565b806350be99ad1461063a578063583d42fd146106445780635dbdda691461069c5780635f9e8f82146106ba5780636270cd18146106dc57610274565b80632e17de781161023c5780632e17de7814610554578063308feec31461058257806331e244e5146105a057806348a4565d146105aa57806348f554d3146105d85780634e71d92d1461063057610274565b8063012ce501146102795780630c3d5157146102a75780631808fdb8146102c55780631911cf4a1461035a5780632a6b9bfd146104bf575b600080fd5b6102a56004803603602081101561028f57600080fd5b8101908080359060200190929190505050610dc3565b005b6102af611439565b6040518082815260200191505060405180910390f35b610311600480360360408110156102db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061145d565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6103906004803603604081101561037057600080fd5b8101908080359060200190929190803590602001909291905050506114fc565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156103df5780820151818401526020810190506103c4565b50505050905001858103845288818151815260200191508051906020019060200280838360005b83811015610421578082015181840152602081019050610406565b50505050905001858103835287818151815260200191508051906020019060200280838360005b83811015610463578082015181840152602081019050610448565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156104a557808201518184015260208101905061048a565b505050509050019850505050505050505060405180910390f35b61050b600480360360408110156104d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611815565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6105806004803603602081101561056a57600080fd5b81019080803590602001909291905050506118b4565b005b61058a611fa0565b6040518082815260200191505060405180910390f35b6105a8611fb1565b005b6105d6600480360360208110156105c057600080fd5b8101908080359060200190929190505050612152565b005b61061a600480360360208110156105ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121ee565b6040518082815260200191505060405180910390f35b610638612206565b005b61064261256a565b005b6106866004803603602081101561065a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612838565b6040518082815260200191505060405180910390f35b6106a4612850565b6040518082815260200191505060405180910390f35b6106c2612858565b604051808215151515815260200191505060405180910390f35b61071e600480360360208110156106f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061286b565b6040518082815260200191505060405180910390f35b6107806004803603604081101561074a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612883565b005b61078a613187565b6040518082815260200191505060405180910390f35b6107a861318d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61082c6004803603602081101561080057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131b2565b6040518082815260200191505060405180910390f35b6108846004803603602081101561085857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506133be565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108f2600480360360208110156108dc57600080fd5b81019080803590602001909291905050506133f1565b005b6108fc613504565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61096a6004803603602081101561095457600080fd5b810190808035906020019092919050505061351c565b005b61097461362f565b6040518082815260200191505060405180910390f35b6109cc600480360360208110156109a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613635565b6040518082815260200191505060405180910390f35b6109ea61364d565b6040518082815260200191505060405180910390f35b610a4260048036036020811015610a1657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613653565b6040518082815260200191505060405180910390f35b610a6061366b565b6040518082815260200191505060405180910390f35b610a7e613671565b6040518082815260200191505060405180910390f35b610a9c613678565b6040518082815260200191505060405180910390f35b610b1e60048036036060811015610ac857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061367e565b005b610b28613887565b6040518082815260200191505060405180910390f35b610b4661388d565b6040518082815260200191505060405180910390f35b610b8860048036036020811015610b7257600080fd5b8101908080359060200190929190505050613893565b005b610bcc60048036036020811015610ba057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061392f565b6040518082815260200191505060405180910390f35b610bea61399d565b6040518082815260200191505060405180910390f35b610c6c60048036036060811015610c1657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506139a3565b005b610cb060048036036020811015610c8457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b17565b005b610cf460048036036020811015610cc857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c68565b6040518082815260200191505060405180910390f35b610d12613c80565b6040518082815260200191505060405180910390f35b610d30613c86565b6040518082815260200191505060405180910390f35b610d8860048036036020811015610d5c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c8e565b604051808381526020018281526020019250505060405180910390f35b610dad613d28565b6040518082815260200191505060405180910390f35b610de23373ffffffffffffffffffffffffffffffffffffffff16613d4a565b158015610e1a57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b610e8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610f41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c696420616d6f756e7420746f20776974686472617700000000000081525060200191505060405180910390fd5b600454610f96600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442613d5d90919063ffffffff16565b11610fec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806145b26034913960400191505060405180910390fd5b42600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061105b61271061104d60035485613d7490919063ffffffff16565b613da390919063ffffffff16565b905060006110728284613d5d90919063ffffffff16565b90507339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561113057600080fd5b505af1158015611144573d6000803e3d6000fd5b505050506040513d602081101561115a57600080fd5b81019080805190602001909291905050506111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f756c64206e6f74207472616e73666572207769746864726177206665652e81525060200191505060405180910390fd5b7339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561127857600080fd5b505af115801561128c573d6000803e3d6000fd5b505050506040513d60208110156112a257600080fd5b8101908080519060200190929190505050611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b61137783600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d5d90919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113ce33600b613dbc90919063ffffffff16565b801561141957506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156114345761143233600b613dec90919063ffffffff16565b505b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806114b183601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613e1c90919063ffffffff16565b9150601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490509250929050565b60608060608084861061150e57600080fd5b60006115238787613d5d90919063ffffffff16565b905060608167ffffffffffffffff8111801561153e57600080fd5b5060405190808252806020026020018201604052801561156d5781602001602082028036833780820191505090505b50905060608267ffffffffffffffff8111801561158957600080fd5b506040519080825280602002602001820160405280156115b85781602001602082028036833780820191505090505b50905060608367ffffffffffffffff811180156115d457600080fd5b506040519080825280602002602001820160405280156116035781602001602082028036833780820191505090505b50905060608467ffffffffffffffff8111801561161f57600080fd5b5060405190808252806020026020018201604052801561164e5781602001602082028036833780820191505090505b50905060008b90505b8a8110156117fa57600061167582600b613e1c90919063ffffffff16565b9050600061168c8e84613d5d90919063ffffffff16565b90508187828151811061169b57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205486828151811061172157fe5b602002602001018181525050600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485828151811061177957fe5b602002602001018181525050600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548482815181106117d157fe5b60200260200101818152505050506117f3600182613d2e90919063ffffffff16565b9050611657565b50838383839850985098509850505050505092959194509250565b60008061186983601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613e1c90919063ffffffff16565b9150601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490509250929050565b6118d33373ffffffffffffffffffffffffffffffffffffffff16613d4a565b15801561190b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b61197d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611a32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c696420616d6f756e7420746f20776974686472617700000000000081525060200191505060405180910390fd5b600454611a87600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442613d5d90919063ffffffff16565b11611add576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806145b26034913960400191505060405180910390fd5b611ae633613e36565b6000611b11612710611b0360035485613d7490919063ffffffff16565b613da390919063ffffffff16565b90506000611b288284613d5d90919063ffffffff16565b90507339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611be657600080fd5b505af1158015611bfa573d6000803e3d6000fd5b505050506040513d6020811015611c1057600080fd5b8101908080519060200190929190505050611c93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f756c64206e6f74207472616e73666572207769746864726177206665652e81525060200191505060405180910390fd5b7339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d2e57600080fd5b505af1158015611d42573d6000803e3d6000fd5b505050506040513d6020811015611d5857600080fd5b8101908080519060200190929190505050611ddb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b611e2d83600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d5d90919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e8433600b613dbc90919063ffffffff16565b8015611ecf57506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b15611f9b57611ee833600b613dec90919063ffffffff16565b50611f993360146000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613dec90919063ffffffff16565b505b505050565b6000611fac600b61409e565b905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461200a57600080fd5b600a60009054906101000a900460ff161561208d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f43616e6e6f74206578656375746520647572696e6720656d657267656e63792181525060200191505060405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506120be6203f48042613d2e90919063ffffffff16565b60098190555060006004819055507fe465b068e033879ed58088ba05882c35e2a52240ea1432b95753d6aebdd0814a6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121ab57600080fd5b806005819055507f783ff1b4ad1ecf9d8596d3538ba68fd4d4c303a10850ff65556071b239669ef56005546040518082815260200191505060405180910390a150565b60116020528060005260406000206000915090505481565b6122253373ffffffffffffffffffffffffffffffffffffffff16613d4a565b15801561225d57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b6122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b600a60009054906101000a900460ff1615612352576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f43616e6e6f74206578656375746520647572696e6720656d657267656e63792181525060200191505060405180910390fd5b61235b33613e36565b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115612567576000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561248857600080fd5b505af115801561249c573d6000803e3d6000fd5b505050506040513d60208110156124b257600080fd5b8101908080519060200190929190505050612518576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806145e66021913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f586b2e63a21a7a4e1402e36f48ce10cb1ec94684fea254c186b76d1f98ecf130826040518082815260200191505060405180910390a25b50565b6125893373ffffffffffffffffffffffffffffffffffffffff16613d4a565b1580156125c157503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b612633576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b600a60009054906101000a900460ff16156126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f43616e6e6f74206578656375746520647572696e6720656d657267656e63792181525060200191505060405180910390fd5b6126bf33613e36565b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115612835576000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127a381600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d2e90919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fbd654390d0d973e8c8376ed6053be8658870df892687852cc5c914d700291b87826040518082815260200191505060405180910390a25b50565b600e6020528060005260406000206000915090505481565b6301e1338081565b600a60009054906101000a900460ff1681565b60106020528060005260406000206000915090505481565b6128a23373ffffffffffffffffffffffffffffffffffffffff16613d4a565b1580156128da57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b61294c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b600a60009054906101000a900460ff16156129cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f43616e6e6f74206578656375746520647572696e6720656d657267656e63792181525060200191505060405180910390fd5b60008211612a45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f74206465706f736974203020546f6b656e7300000000000000000081525060200191505060405180910390fd5b7339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015612b1457600080fd5b505af1158015612b28573d6000803e3d6000fd5b505050506040513d6020811015612b3e57600080fd5b8101908080519060200190929190505050612bc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496e73756666696369656e7420546f6b656e20416c6c6f77616e63650000000081525060200191505060405180910390fd5b600554612bd983600854613d2e90919063ffffffff16565b1115612c4d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4d617820506f6f6c2053697a652048617320526561636865640000000000000081525060200191505060405180910390fd5b612c5633613e36565b6000612c81612710612c7360025486613d7490919063ffffffff16565b613da390919063ffffffff16565b90506000612c988285613d5d90919063ffffffff16565b90507339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612d5657600080fd5b505af1158015612d6a573d6000803e3d6000fd5b505050506040513d6020811015612d8057600080fd5b8101908080519060200190929190505050612e03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f756c64206e6f74207472616e73666572206465706f736974206665652e0081525060200191505060405180910390fd5b612e5581600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d2e90919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612eac33600b6140b390919063ffffffff16565b50600073ffffffffffffffffffffffffffffffffffffffff16601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612fc05782601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6130703360156000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206140b390919063ffffffff16565b506131213360146000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206140b390919063ffffffff16565b5042600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061317b84600854613d2e90919063ffffffff16565b60088190555050505050565b60025481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006131c882600b613dbc90919063ffffffff16565b6131d557600090506133b9565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561322657600090506133b9565b6000806132606301e133807f0000000000000000000000000000000000000000000000000000000000000000613d2e90919063ffffffff16565b9050600042905081811115613273578190505b80600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106132c25760009250613317565b613314600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613d5d90919063ffffffff16565b92505b6000600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006133ae6127106133a06301e133806133928961338460015489613d7490919063ffffffff16565b613d7490919063ffffffff16565b613da390919063ffffffff16565b613da390919063ffffffff16565b905080955050505050505b919050565b60126020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461344a57600080fd5b61271081106134c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f496e76616c69642066656521000000000000000000000000000000000000000081525060200191505060405180910390fd5b806003819055507f0a9e89cff3f9f01bd1c6aeb9b71324bb138123c40d02eb478613fb3427b231006003546040518082815260200191505060405180910390a150565b7339b46b212bdf15b42b166779b9d1787a68b9d0c381565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461357557600080fd5b61271081106135ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f496e76616c69642066656521000000000000000000000000000000000000000081525060200191505060405180910390fd5b806002819055507f327680b8ba8221210809b2aae37f88a529ae9eec9a3a3fe952fe0a3a262b487f6002546040518082815260200191505060405180910390a150565b60035481565b600d6020528060005260406000206000915090505481565b60055481565b60136020528060005260406000206000915090505481565b60095481565b6203f48081565b60075481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146136d757600080fd5b600954421161374e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f436f6e7472616374206e6f74206578706972656420796574210000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156137d557600080fd5b505af11580156137e9573d6000803e3d6000fd5b505050506040513d60208110156137ff57600080fd5b8101908080519060200190929190505050613882576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5472616e73666572206661696c6564210000000000000000000000000000000081525060200191505060405180910390fd5b505050565b60065481565b6101f481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146138ec57600080fd5b806001819055507f1e3be2efa25bca5bff2215c7b30b31086e703d6aa7d9b9a1f8ba62c5291219ad6001546040518082815260200191505060405180910390a150565b60008061393b836131b2565b90506000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506139948183613d2e90919063ffffffff16565b92505050919050565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146139fc57600080fd5b6009544211613a73576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f436f6e7472616374206e6f74206578706972656420796574210000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613afa57600080fd5b505af1158015613b0e573d6000803e3d6000fd5b50505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613b7057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613baa57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f6020528060005260406000206000915090505481565b60045481565b630208c08081565b600080613cd8601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061409e565b9150613d21601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061409e565b9050915091565b60085481565b600080828401905083811015613d4057fe5b8091505092915050565b600080823b905060008111915050919050565b600082821115613d6957fe5b818303905092915050565b60008082840290506000841480613d93575082848281613d9057fe5b04145b613d9957fe5b8091505092915050565b600080828481613daf57fe5b0490508091505092915050565b6000613de4836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6140e3565b905092915050565b6000613e14836000018373ffffffffffffffffffffffffffffffffffffffff1660001b614106565b905092915050565b6000613e2b83600001836141ee565b60001c905092915050565b6000613e41826131b2565b90506000811115614056576000613e77612710613e696101f485613d7490919063ffffffff16565b613da390919063ffffffff16565b90506000613e8e8284613d5d90919063ffffffff16565b90506000613efb601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684614271565b905060008490508115613f0c578290505b613f5e81601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d2e90919063ffffffff16565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ff381601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d2e90919063ffffffff16565b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061404b81600654613d2e90919063ffffffff16565b600681905550505050505b42600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60006140ac8260000161450e565b9050919050565b60006140db836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61451f565b905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001016000848152602001908152602001600020549050600081146141e2576000600182039050600060018660000180549050039050600086600001828154811061415157fe5b906000526020600020015490508087600001848154811061416e57fe5b90600052602060002001819055506001830187600101600083815260200190815260200160002081905550866000018054806141a657fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506141e8565b60009150505b92915050565b60008183600001805490501161424f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806145906022913960400191505060405180910390fd5b82600001828154811061425e57fe5b9060005260206000200154905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156142af5750600082115b156145035761430682601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d2e90919063ffffffff16565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156143e457600080fd5b505af11580156143f8573d6000803e3d6000fd5b505050506040513d602081101561440e57600080fd5b8101908080519060200190929190505050614491576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f756c64206e6f74207472616e7366657220726566657272616c206665652181525060200191505060405180910390fd5b6144a682600754613d2e90919063ffffffff16565b6007819055508273ffffffffffffffffffffffffffffffffffffffff167fefdcb1f2ee8323554150b9eca5209dcd6a164266e8d1f04b95cbcecd0cad5219836040518082815260200191505060405180910390a260019050614508565b600090505b92915050565b600081600001805490509050919050565b600061452b83836140e3565b614584578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050614589565b600090505b9291505056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473596f7520726563656e746c79207374616b65642c20706c656173652077616974206265666f7265207769746864726177696e672e436f756c64206e6f74207472616e73666572206561726e656420746f6b656e732ea2646970667358221220c197be7def3d3d6903fe737253a5b12eaf5ef2e4d8d879779f91f970ac56e68764736f6c634300060b0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102745760003560e01c8063a35f7c7b11610151578063df4b70ba116100c3578063f2fde38b11610087578063f2fde38b14610c6e578063f3f91fa014610cb2578063f5326ada14610d0a578063f6af4dff14610d28578063f749229e14610d46578063ff50abdc14610da557610274565b8063df4b70ba14610b3e578063e3081bb314610b5c578063e7b62f5814610b8a578063ebe6cad114610be2578063f25b836414610c0057610274565b8063c636389211610115578063c636389214610a00578063ca7e083514610a58578063ca9a213214610a76578063d079490f14610a94578063d493b9ac14610ab2578063d578ceab14610b2057610274565b8063a35f7c7b146108f4578063b7d3786e1461093e578063c1665f401461096c578063c326bf4f1461098a578063c5579dc0146109e257610274565b806350be99ad116101ea5780637acb7757116101ae5780637acb7757146107345780637e44b933146107825780638da5cb5b146107a057806398896d10146107ea5780639ca423b314610842578063a1ccb813146108c657610274565b806350be99ad1461063a578063583d42fd146106445780635dbdda691461069c5780635f9e8f82146106ba5780636270cd18146106dc57610274565b80632e17de781161023c5780632e17de7814610554578063308feec31461058257806331e244e5146105a057806348a4565d146105aa57806348f554d3146105d85780634e71d92d1461063057610274565b8063012ce501146102795780630c3d5157146102a75780631808fdb8146102c55780631911cf4a1461035a5780632a6b9bfd146104bf575b600080fd5b6102a56004803603602081101561028f57600080fd5b8101908080359060200190929190505050610dc3565b005b6102af611439565b6040518082815260200191505060405180910390f35b610311600480360360408110156102db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061145d565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6103906004803603604081101561037057600080fd5b8101908080359060200190929190803590602001909291905050506114fc565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156103df5780820151818401526020810190506103c4565b50505050905001858103845288818151815260200191508051906020019060200280838360005b83811015610421578082015181840152602081019050610406565b50505050905001858103835287818151815260200191508051906020019060200280838360005b83811015610463578082015181840152602081019050610448565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156104a557808201518184015260208101905061048a565b505050509050019850505050505050505060405180910390f35b61050b600480360360408110156104d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611815565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6105806004803603602081101561056a57600080fd5b81019080803590602001909291905050506118b4565b005b61058a611fa0565b6040518082815260200191505060405180910390f35b6105a8611fb1565b005b6105d6600480360360208110156105c057600080fd5b8101908080359060200190929190505050612152565b005b61061a600480360360208110156105ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121ee565b6040518082815260200191505060405180910390f35b610638612206565b005b61064261256a565b005b6106866004803603602081101561065a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612838565b6040518082815260200191505060405180910390f35b6106a4612850565b6040518082815260200191505060405180910390f35b6106c2612858565b604051808215151515815260200191505060405180910390f35b61071e600480360360208110156106f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061286b565b6040518082815260200191505060405180910390f35b6107806004803603604081101561074a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612883565b005b61078a613187565b6040518082815260200191505060405180910390f35b6107a861318d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61082c6004803603602081101561080057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131b2565b6040518082815260200191505060405180910390f35b6108846004803603602081101561085857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506133be565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108f2600480360360208110156108dc57600080fd5b81019080803590602001909291905050506133f1565b005b6108fc613504565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61096a6004803603602081101561095457600080fd5b810190808035906020019092919050505061351c565b005b61097461362f565b6040518082815260200191505060405180910390f35b6109cc600480360360208110156109a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613635565b6040518082815260200191505060405180910390f35b6109ea61364d565b6040518082815260200191505060405180910390f35b610a4260048036036020811015610a1657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613653565b6040518082815260200191505060405180910390f35b610a6061366b565b6040518082815260200191505060405180910390f35b610a7e613671565b6040518082815260200191505060405180910390f35b610a9c613678565b6040518082815260200191505060405180910390f35b610b1e60048036036060811015610ac857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061367e565b005b610b28613887565b6040518082815260200191505060405180910390f35b610b4661388d565b6040518082815260200191505060405180910390f35b610b8860048036036020811015610b7257600080fd5b8101908080359060200190929190505050613893565b005b610bcc60048036036020811015610ba057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061392f565b6040518082815260200191505060405180910390f35b610bea61399d565b6040518082815260200191505060405180910390f35b610c6c60048036036060811015610c1657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506139a3565b005b610cb060048036036020811015610c8457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b17565b005b610cf460048036036020811015610cc857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c68565b6040518082815260200191505060405180910390f35b610d12613c80565b6040518082815260200191505060405180910390f35b610d30613c86565b6040518082815260200191505060405180910390f35b610d8860048036036020811015610d5c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c8e565b604051808381526020018281526020019250505060405180910390f35b610dad613d28565b6040518082815260200191505060405180910390f35b610de23373ffffffffffffffffffffffffffffffffffffffff16613d4a565b158015610e1a57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b610e8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610f41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c696420616d6f756e7420746f20776974686472617700000000000081525060200191505060405180910390fd5b600454610f96600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442613d5d90919063ffffffff16565b11610fec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806145b26034913960400191505060405180910390fd5b42600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061105b61271061104d60035485613d7490919063ffffffff16565b613da390919063ffffffff16565b905060006110728284613d5d90919063ffffffff16565b90507339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561113057600080fd5b505af1158015611144573d6000803e3d6000fd5b505050506040513d602081101561115a57600080fd5b81019080805190602001909291905050506111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f756c64206e6f74207472616e73666572207769746864726177206665652e81525060200191505060405180910390fd5b7339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561127857600080fd5b505af115801561128c573d6000803e3d6000fd5b505050506040513d60208110156112a257600080fd5b8101908080519060200190929190505050611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b61137783600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d5d90919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113ce33600b613dbc90919063ffffffff16565b801561141957506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156114345761143233600b613dec90919063ffffffff16565b505b505050565b7f00000000000000000000000000000000000000000000000000000000654c9aeb81565b6000806114b183601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613e1c90919063ffffffff16565b9150601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490509250929050565b60608060608084861061150e57600080fd5b60006115238787613d5d90919063ffffffff16565b905060608167ffffffffffffffff8111801561153e57600080fd5b5060405190808252806020026020018201604052801561156d5781602001602082028036833780820191505090505b50905060608267ffffffffffffffff8111801561158957600080fd5b506040519080825280602002602001820160405280156115b85781602001602082028036833780820191505090505b50905060608367ffffffffffffffff811180156115d457600080fd5b506040519080825280602002602001820160405280156116035781602001602082028036833780820191505090505b50905060608467ffffffffffffffff8111801561161f57600080fd5b5060405190808252806020026020018201604052801561164e5781602001602082028036833780820191505090505b50905060008b90505b8a8110156117fa57600061167582600b613e1c90919063ffffffff16565b9050600061168c8e84613d5d90919063ffffffff16565b90508187828151811061169b57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205486828151811061172157fe5b602002602001018181525050600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485828151811061177957fe5b602002602001018181525050600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548482815181106117d157fe5b60200260200101818152505050506117f3600182613d2e90919063ffffffff16565b9050611657565b50838383839850985098509850505050505092959194509250565b60008061186983601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613e1c90919063ffffffff16565b9150601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490509250929050565b6118d33373ffffffffffffffffffffffffffffffffffffffff16613d4a565b15801561190b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b61197d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611a32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c696420616d6f756e7420746f20776974686472617700000000000081525060200191505060405180910390fd5b600454611a87600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442613d5d90919063ffffffff16565b11611add576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806145b26034913960400191505060405180910390fd5b611ae633613e36565b6000611b11612710611b0360035485613d7490919063ffffffff16565b613da390919063ffffffff16565b90506000611b288284613d5d90919063ffffffff16565b90507339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611be657600080fd5b505af1158015611bfa573d6000803e3d6000fd5b505050506040513d6020811015611c1057600080fd5b8101908080519060200190929190505050611c93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f756c64206e6f74207472616e73666572207769746864726177206665652e81525060200191505060405180910390fd5b7339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d2e57600080fd5b505af1158015611d42573d6000803e3d6000fd5b505050506040513d6020811015611d5857600080fd5b8101908080519060200190929190505050611ddb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b611e2d83600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d5d90919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e8433600b613dbc90919063ffffffff16565b8015611ecf57506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b15611f9b57611ee833600b613dec90919063ffffffff16565b50611f993360146000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613dec90919063ffffffff16565b505b505050565b6000611fac600b61409e565b905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461200a57600080fd5b600a60009054906101000a900460ff161561208d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f43616e6e6f74206578656375746520647572696e6720656d657267656e63792181525060200191505060405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506120be6203f48042613d2e90919063ffffffff16565b60098190555060006004819055507fe465b068e033879ed58088ba05882c35e2a52240ea1432b95753d6aebdd0814a6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121ab57600080fd5b806005819055507f783ff1b4ad1ecf9d8596d3538ba68fd4d4c303a10850ff65556071b239669ef56005546040518082815260200191505060405180910390a150565b60116020528060005260406000206000915090505481565b6122253373ffffffffffffffffffffffffffffffffffffffff16613d4a565b15801561225d57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b6122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b600a60009054906101000a900460ff1615612352576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f43616e6e6f74206578656375746520647572696e6720656d657267656e63792181525060200191505060405180910390fd5b61235b33613e36565b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115612567576000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561248857600080fd5b505af115801561249c573d6000803e3d6000fd5b505050506040513d60208110156124b257600080fd5b8101908080519060200190929190505050612518576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806145e66021913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f586b2e63a21a7a4e1402e36f48ce10cb1ec94684fea254c186b76d1f98ecf130826040518082815260200191505060405180910390a25b50565b6125893373ffffffffffffffffffffffffffffffffffffffff16613d4a565b1580156125c157503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b612633576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b600a60009054906101000a900460ff16156126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f43616e6e6f74206578656375746520647572696e6720656d657267656e63792181525060200191505060405180910390fd5b6126bf33613e36565b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115612835576000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127a381600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d2e90919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fbd654390d0d973e8c8376ed6053be8658870df892687852cc5c914d700291b87826040518082815260200191505060405180910390a25b50565b600e6020528060005260406000206000915090505481565b6301e1338081565b600a60009054906101000a900460ff1681565b60106020528060005260406000206000915090505481565b6128a23373ffffffffffffffffffffffffffffffffffffffff16613d4a565b1580156128da57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b61294c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b600a60009054906101000a900460ff16156129cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f43616e6e6f74206578656375746520647572696e6720656d657267656e63792181525060200191505060405180910390fd5b60008211612a45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f74206465706f736974203020546f6b656e7300000000000000000081525060200191505060405180910390fd5b7339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015612b1457600080fd5b505af1158015612b28573d6000803e3d6000fd5b505050506040513d6020811015612b3e57600080fd5b8101908080519060200190929190505050612bc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496e73756666696369656e7420546f6b656e20416c6c6f77616e63650000000081525060200191505060405180910390fd5b600554612bd983600854613d2e90919063ffffffff16565b1115612c4d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4d617820506f6f6c2053697a652048617320526561636865640000000000000081525060200191505060405180910390fd5b612c5633613e36565b6000612c81612710612c7360025486613d7490919063ffffffff16565b613da390919063ffffffff16565b90506000612c988285613d5d90919063ffffffff16565b90507339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612d5657600080fd5b505af1158015612d6a573d6000803e3d6000fd5b505050506040513d6020811015612d8057600080fd5b8101908080519060200190929190505050612e03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f756c64206e6f74207472616e73666572206465706f736974206665652e0081525060200191505060405180910390fd5b612e5581600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d2e90919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612eac33600b6140b390919063ffffffff16565b50600073ffffffffffffffffffffffffffffffffffffffff16601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612fc05782601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6130703360156000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206140b390919063ffffffff16565b506131213360146000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206140b390919063ffffffff16565b5042600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061317b84600854613d2e90919063ffffffff16565b60088190555050505050565b60025481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006131c882600b613dbc90919063ffffffff16565b6131d557600090506133b9565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561322657600090506133b9565b6000806132606301e133807f00000000000000000000000000000000000000000000000000000000654c9aeb613d2e90919063ffffffff16565b9050600042905081811115613273578190505b80600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106132c25760009250613317565b613314600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613d5d90919063ffffffff16565b92505b6000600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006133ae6127106133a06301e133806133928961338460015489613d7490919063ffffffff16565b613d7490919063ffffffff16565b613da390919063ffffffff16565b613da390919063ffffffff16565b905080955050505050505b919050565b60126020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461344a57600080fd5b61271081106134c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f496e76616c69642066656521000000000000000000000000000000000000000081525060200191505060405180910390fd5b806003819055507f0a9e89cff3f9f01bd1c6aeb9b71324bb138123c40d02eb478613fb3427b231006003546040518082815260200191505060405180910390a150565b7339b46b212bdf15b42b166779b9d1787a68b9d0c381565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461357557600080fd5b61271081106135ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f496e76616c69642066656521000000000000000000000000000000000000000081525060200191505060405180910390fd5b806002819055507f327680b8ba8221210809b2aae37f88a529ae9eec9a3a3fe952fe0a3a262b487f6002546040518082815260200191505060405180910390a150565b60035481565b600d6020528060005260406000206000915090505481565b60055481565b60136020528060005260406000206000915090505481565b60095481565b6203f48081565b60075481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146136d757600080fd5b600954421161374e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f436f6e7472616374206e6f74206578706972656420796574210000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156137d557600080fd5b505af11580156137e9573d6000803e3d6000fd5b505050506040513d60208110156137ff57600080fd5b8101908080519060200190929190505050613882576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5472616e73666572206661696c6564210000000000000000000000000000000081525060200191505060405180910390fd5b505050565b60065481565b6101f481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146138ec57600080fd5b806001819055507f1e3be2efa25bca5bff2215c7b30b31086e703d6aa7d9b9a1f8ba62c5291219ad6001546040518082815260200191505060405180910390a150565b60008061393b836131b2565b90506000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506139948183613d2e90919063ffffffff16565b92505050919050565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146139fc57600080fd5b6009544211613a73576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f436f6e7472616374206e6f74206578706972656420796574210000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613afa57600080fd5b505af1158015613b0e573d6000803e3d6000fd5b50505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613b7057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613baa57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f6020528060005260406000206000915090505481565b60045481565b630208c08081565b600080613cd8601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061409e565b9150613d21601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061409e565b9050915091565b60085481565b600080828401905083811015613d4057fe5b8091505092915050565b600080823b905060008111915050919050565b600082821115613d6957fe5b818303905092915050565b60008082840290506000841480613d93575082848281613d9057fe5b04145b613d9957fe5b8091505092915050565b600080828481613daf57fe5b0490508091505092915050565b6000613de4836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6140e3565b905092915050565b6000613e14836000018373ffffffffffffffffffffffffffffffffffffffff1660001b614106565b905092915050565b6000613e2b83600001836141ee565b60001c905092915050565b6000613e41826131b2565b90506000811115614056576000613e77612710613e696101f485613d7490919063ffffffff16565b613da390919063ffffffff16565b90506000613e8e8284613d5d90919063ffffffff16565b90506000613efb601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684614271565b905060008490508115613f0c578290505b613f5e81601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d2e90919063ffffffff16565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ff381601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d2e90919063ffffffff16565b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061404b81600654613d2e90919063ffffffff16565b600681905550505050505b42600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60006140ac8260000161450e565b9050919050565b60006140db836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61451f565b905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001016000848152602001908152602001600020549050600081146141e2576000600182039050600060018660000180549050039050600086600001828154811061415157fe5b906000526020600020015490508087600001848154811061416e57fe5b90600052602060002001819055506001830187600101600083815260200190815260200160002081905550866000018054806141a657fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506141e8565b60009150505b92915050565b60008183600001805490501161424f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806145906022913960400191505060405180910390fd5b82600001828154811061425e57fe5b9060005260206000200154905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156142af5750600082115b156145035761430682601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d2e90919063ffffffff16565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156143e457600080fd5b505af11580156143f8573d6000803e3d6000fd5b505050506040513d602081101561440e57600080fd5b8101908080519060200190929190505050614491576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f756c64206e6f74207472616e7366657220726566657272616c206665652181525060200191505060405180910390fd5b6144a682600754613d2e90919063ffffffff16565b6007819055508273ffffffffffffffffffffffffffffffffffffffff167fefdcb1f2ee8323554150b9eca5209dcd6a164266e8d1f04b95cbcecd0cad5219836040518082815260200191505060405180910390a260019050614508565b600090505b92915050565b600081600001805490509050919050565b600061452b83836140e3565b614584578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050614589565b600090505b9291505056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473596f7520726563656e746c79207374616b65642c20706c656173652077616974206265666f7265207769746864726177696e672e436f756c64206e6f74207472616e73666572206561726e656420746f6b656e732ea2646970667358221220c197be7def3d3d6903fe737253a5b12eaf5ef2e4d8d879779f91f970ac56e68764736f6c634300060b0033
Deployed Bytecode Sourcemap
18115:14250:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27355:1029;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19841:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24646:242;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29343:1157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24405:235;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26149:1055;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24004:101;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20331:239;;;:::i;:::-;;30565:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20859:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28396:430;;;:::i;:::-;;28838:493;;;:::i;:::-;;20690:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19025:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19928:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20796:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24906:1231;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19105:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17070:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22833:911;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20924:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31337:277;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18850:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31009:263;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19179:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20635:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19567:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20976:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19889:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19487:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19752:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31723:274;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19710:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19280:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30778:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23756:236;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18982:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32106:256;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17689:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20741:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19385:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19425:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24117:276;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;19798:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27355:1029;20087:32;20095:10;20087:30;;;:32::i;:::-;20085:35;:62;;;;;20137:10;20124:23;;:9;:23;;;20085:62;20077:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27482:16:::1;27451:15;:27;27467:10;27451:27;;;;;;;;;;;;;;;;:47;;27443:86;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27593:11;;27558:32;27566:11;:23;27578:10;27566:23;;;;;;;;;;;;;;;;27558:3;:7;;:32;;;;:::i;:::-;:46;27550:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27755:3;27725:15;:27;27741:10;27725:27;;;;;;;;;;;;;;;:33;;;;27779:8;27790:55;27841:3;27790:46;27811:24;;27790:16;:20;;:46;;;;:::i;:::-;:50;;:55;;;;:::i;:::-;27779:66;;27856:19;27878:25;27899:3;27878:16;:20;;:25;;;;:::i;:::-;27856:47;;18898:42;27932:37;;;27970:5;::::0;::::1;;;;;;;;;27977:3;27932:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;27924:94;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18898:42;28037:37;;;28075:10;28087:14;28037:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;28029:104;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28184:49;28216:16;28184:15;:27;28200:10;28184:27;;;;;;;;;;;;;;;;:31;;:49;;;;:::i;:::-;28154:15;:27;28170:10;28154:27;;;;;;;;;;;;;;;:79;;;;28258:28;28275:10;28258:7;:16;;:28;;;;:::i;:::-;:64;;;;;28321:1;28290:15;:27;28306:10;28290:27;;;;;;;;;;;;;;;;:32;28258:64;28254:123;;;28339:26;28354:10;28339:7;:14;;:26;;;;:::i;:::-;;28254:123;20184:1;;27355:1029:::0;:::o;19841:39::-;;;:::o;24646:242::-;24727:15;24744:17;24784:44;24826:1;24784:29;:38;24814:7;24784:38;;;;;;;;;;;;;;;:41;;:44;;;;:::i;:::-;24774:54;;24854:17;:26;24872:7;24854:26;;;;;;;;;;;;;;;;24839:41;;24646:242;;;;;:::o;29343:1157::-;29450:24;29490:31;29537:35;29587:26;29648:8;29635:10;:21;29626:31;;;;;;29678:11;29692:24;29705:10;29692:8;:12;;:24;;;;:::i;:::-;29678:38;;29727:25;29769:6;29755:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29727:49;;29787:32;29833:6;29822:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29787:53;;29851:36;29901:6;29890:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29851:57;;29919:27;29960:6;29949:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29919:48;;29993:6;30002:10;29993:19;;29988:408;30018:8;30014:1;:12;29988:408;;;30057:14;30074:13;30085:1;30074:7;:10;;:13;;;;:::i;:::-;30057:30;;30102:14;30119:17;30125:10;30119:1;:5;;:17;;;;:::i;:::-;30102:34;;30173:6;30151:8;30160:9;30151:19;;;;;;;;;;;;;:28;;;;;;;;;;;30226:11;:19;30238:6;30226:19;;;;;;;;;;;;;;;;30194:18;30213:9;30194:29;;;;;;;;;;;;;:51;;;;;30296:15;:23;30312:6;30296:23;;;;;;;;;;;;;;;;30260:22;30283:9;30260:33;;;;;;;;;;;;;:59;;;;;30361:15;:23;30377:6;30361:23;;;;;;;;;;;;;;;;30334:13;30348:9;30334:24;;;;;;;;;;;;;:50;;;;;29988:408;;30032:8;30038:1;30032;:5;;:8;;;;:::i;:::-;30028:12;;29988:408;;;;30424:8;30434:18;30454:22;30478:13;30416:76;;;;;;;;;;;;;29343:1157;;;;;;;:::o;24405:235::-;24480:15;24497:17;24537:43;24578:1;24537:28;:37;24566:7;24537:37;;;;;;;;;;;;;;;:40;;:43;;;;:::i;:::-;24527:53;;24606:17;:26;24624:7;24606:26;;;;;;;;;;;;;;;;24591:41;;24405:235;;;;;:::o;26149:1055::-;20087:32;20095:10;20087:30;;;:32::i;:::-;20085:35;:62;;;;;20137:10;20124:23;;:9;:23;;;20085:62;20077:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26267:16:::1;26236:15;:27;26252:10;26236:27;;;;;;;;;;;;;;;;:47;;26228:86;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;26378:11;;26343:32;26351:11;:23;26363:10;26351:23;;;;;;;;;;;;;;;;26343:3;:7;;:32;;;;:::i;:::-;:46;26335:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26467:25;26481:10;26467:13;:25::i;:::-;26513:8;26524:55;26575:3;26524:46;26545:24;;26524:16;:20;;:46;;;;:::i;:::-;:50;;:55;;;;:::i;:::-;26513:66;;26590:19;26612:25;26633:3;26612:16;:20;;:25;;;;:::i;:::-;26590:47;;18898:42;26666:37;;;26704:5;::::0;::::1;;;;;;;;;26711:3;26666:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;26658:94;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18898:42;26771:37;;;26809:10;26821:14;26771:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;26763:104;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;26918:49;26950:16;26918:15;:27;26934:10;26918:27;;;;;;;;;;;;;;;;:31;;:49;;;;:::i;:::-;26888:15;:27;26904:10;26888:27;;;;;;;;;;;;;;;:79;;;;26992:28;27009:10;26992:7;:16;;:28;;;;:::i;:::-;:64;;;;;27055:1;27024:15;:27;27040:10;27024:27;;;;;;;;;;;;;;;;:32;26992:64;26988:209;;;27073:26;27088:10;27073:7;:14;;:26;;;;:::i;:::-;;27114:71;27174:10;27114:29;:52;27144:9;:21;27154:10;27144:21;;;;;;;;;;;;;;;;;;;;;;;;;27114:52;;;;;;;;;;;;;;;:59;;:71;;;;:::i;:::-;;26988:209;20184:1;;26149:1055:::0;:::o;24004:101::-;24057:4;24081:16;:7;:14;:16::i;:::-;24074:23;;24004:101;:::o;20331:239::-;17500:5;;;;;;;;;;;17486:19;;:10;:19;;;17478:28;;;;;;20251:11:::1;;;;;;;;;;;20250:12;20242:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;20422:4:::2;20408:11;;:18;;;;;;;;;;;;;;;;;;20458:28;19530:6;20458:3;:7;;:28;;;;:::i;:::-;20437:18;:49;;;;20511:1;20497:11;:15;;;;20538:24;20556:5;::::0;::::2;;;;;;;;;20538:24;;;;;;;;;;;;;;;;;;;;;;20331:239::o:0;30565:150::-;17500:5;;;;;;;;;;;17486:19;;:10;:19;;;17478:28;;;;;;30649:11:::1;30635;:25;;;;30676:31;30695:11;;30676:31;;;;;;;;;;;;;;;;;;30565:150:::0;:::o;20859:52::-;;;;;;;;;;;;;;;;;:::o;28396:430::-;20087:32;20095:10;20087:30;;;:32::i;:::-;20085:35;:62;;;;;20137:10;20124:23;;:9;:23;;;20085:62;20077:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20251:11:::1;;;;;;;;;;;20250:12;20242:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28471:25:::2;28485:10;28471:13;:25::i;:::-;28507:11;28521:19;:31;28541:10;28521:31;;;;;;;;;;;;;;;;28507:45;;28576:1;28567:6;:10;28563:256;;;28628:1;28594:19;:31;28614:10;28594:31;;;;;;;;;;;;;;;:35;;;;18898:42;28652:37;;;28690:10;28702:6;28652:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;28644:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28788:10;28769:38;;;28800:6;28769:38;;;;;;;;;;;;;;;;;;28563:256;20310:1;28396:430::o:0;28838:493::-;20087:32;20095:10;20087:30;;;:32::i;:::-;20085:35;:62;;;;;20137:10;20124:23;;:9;:23;;;20085:62;20077:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20251:11:::1;;;;;;;;;;;20250:12;20242:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28916:25:::2;28930:10;28916:13;:25::i;:::-;28952:11;28966:19;:31;28986:10;28966:31;;;;;;;;;;;;;;;;28952:45;;29021:1;29012:6;:10;29008:316;;;29073:1;29039:19;:31;29059:10;29039:31;;;;;;;;;;;;;;;:35;;;;29164:39;29196:6;29164:15;:27;29180:10;29164:27;;;;;;;;;;;;;;;;:31;;:39;;;;:::i;:::-;29134:15;:27;29150:10;29134:27;;;;;;;;;;;;;;;:69;;;;29293:10;29284:28;;;29305:6;29284:28;;;;;;;;;;;;;;;;;;29008:316;20310:1;28838:493::o:0;20690:44::-;;;;;;;;;;;;;;;;;:::o;19025:47::-;19064:8;19025:47;:::o;19928:31::-;;;;;;;;;;;;;:::o;20796:50::-;;;;;;;;;;;;;;;;;:::o;24906:1231::-;20087:32;20095:10;20087:30;;;:32::i;:::-;20085:35;:62;;;;;20137:10;20124:23;;:9;:23;;;20085:62;20077:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20251:11:::1;;;;;;;;;;;20250:12;20242:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;25041:1:::2;25025:13;:17;25017:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;18898:42;25089:41;;;25131:10;25151:4;25158:13;25089:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;25081:124;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;25261:11;;25224:33;25243:13;25224:14;;:18;;:33;;;;:::i;:::-;:48;;25216:86;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;25323:25;25337:10;25323:13;:25::i;:::-;25369:8;25380:50;25426:3;25380:41;25398:22;;25380:13;:17;;:41;;;;:::i;:::-;:45;;:50;;;;:::i;:::-;25369:61;;25441:19;25463:22;25481:3;25463:13;:17;;:22;;;;:::i;:::-;25441:44;;18898:42;25504:37;;;25542:5;::::0;::::2;;;;;;;;;25549:3;25504:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;25496:93;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;25640:47;25672:14;25640:15;:27;25656:10;25640:27;;;;;;;;;;;;;;;;:31;;:47;;;;:::i;:::-;25610:15;:27;25626:10;25610:27;;;;;;;;;;;;;;;:77;;;;25708:23;25720:10;25708:7;:11;;:23;;;;:::i;:::-;;25789:1;25756:35;;:9;:21;25766:10;25756:21;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;25752:100;;;25832:8;25808:9;:21;25818:10;25808:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;25752:100;25872:67;25928:10;25872:28;:51;25901:9;:21;25911:10;25901:21;;;;;;;;;;;;;;;;;;;;;;;;;25872:51;;;;;;;;;;;;;;;:55;;:67;;;;:::i;:::-;;25950:68;26007:10;25950:29;:52;25980:9;:21;25990:10;25980:21;;;;;;;;;;;;;;;;;;;;;;;;;25950:52;;;;;;;;;;;;;;;:56;;:68;;;;:::i;:::-;;26065:3;26039:11;:23;26051:10;26039:23;;;;;;;;;;;;;;;:29;;;;26096:33;26115:13;26096:14;;:18;;:33;;;;:::i;:::-;26079:14;:50;;;;20310:1;;24906:1231:::0;;:::o;19105:38::-;;;;:::o;17070:20::-;;;;;;;;;;;;;:::o;22833:911::-;22895:4;22917:25;22934:7;22917;:16;;:25;;;;:::i;:::-;22912:40;;22951:1;22944:8;;;;22912:40;22995:1;22967:15;:24;22983:7;22967:24;;;;;;;;;;;;;;;;:29;22963:43;;;23005:1;22998:8;;;;22963:43;23027:13;23051:19;23073:38;19064:8;23073:17;:21;;:38;;;;:::i;:::-;23051:60;;23122:9;23134:3;23122:15;;23159:14;23152:4;:21;23148:75;;;23197:14;23190:21;;23148:75;23275:4;23247:15;:24;23263:7;23247:24;;;;;;;;;;;;;;;;:32;23243:155;;23307:1;23296:12;;23243:155;;;23352:34;23361:15;:24;23377:7;23361:24;;;;;;;;;;;;;;;;23352:4;:8;;:34;;;;:::i;:::-;23341:45;;23243:155;23410:17;23430:15;:24;23446:7;23430:24;;;;;;;;;;;;;;;;23410:44;;23475:16;23494:199;23689:3;23494:160;19064:8;23494:109;23594:8;23494:65;23541:17;;23494:12;:46;;:65;;;;:::i;:::-;:99;;:109;;;;:::i;:::-;:143;;:160;;;;:::i;:::-;:194;;:199;;;;:::i;:::-;23475:218;;23725:11;23718:18;;;;;;;22833:911;;;;:::o;20924:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;31337:277::-;17500:5;;;;;;;;;;;17486:19;;:10;:19;;;17478:28;;;;;;31462:5:::1;31436:23;:31;31428:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31522:23;31495:24;:50;;;;31561:45;31581:24;;31561:45;;;;;;;;;;;;;;;;;;31337:277:::0;:::o;18850:90::-;18898:42;18850:90;:::o;31009:263::-;17500:5;;;;;;;;;;;17486:19;;:10;:19;;;17478:28;;;;;;31128:5:::1;31104:21;:29;31096:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31186:21;31161:22;:46;;;;31223:41;31241:22;;31223:41;;;;;;;;;;;;;;;;;;31009:263:::0;:::o;19179:40::-;;;;:::o;20635:48::-;;;;;;;;;;;;;;;;;:::o;19567:36::-;;;;:::o;20976:55::-;;;;;;;;;;;;;;;;;:::o;19889:30::-;;;;:::o;19487:49::-;19530:6;19487:49;:::o;19752:39::-;;;;:::o;31723:274::-;17500:5;;;;;;;;;;;17486:19;;:10;:19;;;17478:28;;;;;;31853:18:::1;;31847:3;:24;31838:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31927:12;31921:28;;;31950:9;31961:6;31921:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;31912:77;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31723:274:::0;;;:::o;19710:35::-;;;;:::o;19280:50::-;19327:3;19280:50;:::o;30778:168::-;17500:5;;;;;;;;;;;17486:19;;:10;:19;;;17478:28;;;;;;30873:13:::1;30853:17;:33;;;;30902:36;30920:17;;30902:36;;;;;;;;;;;;;;;;;;30778:168:::0;:::o;23756:236::-;23825:4;23842:12;23857:23;23872:7;23857:14;:23::i;:::-;23842:38;;23891:18;23912:19;:28;23932:7;23912:28;;;;;;;;;;;;;;;;23891:49;;23958:26;23970:13;23958:7;:11;;:26;;;;:::i;:::-;23951:33;;;;23756:236;;;:::o;18982:36::-;;;;:::o;32106:256::-;17500:5;;;;;;;;;;;17486:19;;:10;:19;;;17478:28;;;;;;32242:18:::1;;32236:3;:24;32227:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32313:12;32301:34;;;32336:9;32347:6;32301:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32106:256:::0;;;:::o;17689:178::-;17500:5;;;;;;;;;;;17486:19;;:10;:19;;;17478:28;;;;;;17786:1:::1;17766:22;;:8;:22;;;;17758:31;;;::::0;::::1;;17829:8;17801:37;;17822:5;::::0;::::1;;;;;;;;;17801:37;;;;;;;;;;;;17853:8;17845:5;::::0;:16:::1;;;;;;;;;;;;;;;;;;17689:178:::0;:::o;20741:48::-;;;;;;;;;;;;;;;;;:::o;19385:27::-;;;;:::o;19425:53::-;19470:8;19425:53;:::o;24117:276::-;24194:19;24215:18;24263:48;:29;:39;24293:8;24263:39;;;;;;;;;;;;;;;:46;:48::i;:::-;24246:65;;24338:47;:28;:38;24367:8;24338:38;;;;;;;;;;;;;;;:45;:47::i;:::-;24322:63;;24117:276;;;:::o;19798:30::-;;;;:::o;803:133::-;861:7;877:9;893:1;889;:5;877:17;;913:1;908;:6;;901:14;;;;929:1;922:8;;;803:133;;;;:::o;1624:422::-;1684:4;1892:12;2003:7;1991:20;1983:28;;2037:1;2030:4;:8;2023:15;;;1624:422;;;:::o;684:113::-;742:7;770:1;765;:6;;758:14;;;;790:1;786;:5;779:12;;684:113;;;;:::o;255:147::-;313:7;329:9;345:1;341;:5;329:17;;365:1;360;:6;:20;;;;379:1;374;370;:5;;;;;;:10;360:20;353:28;;;;395:1;388:8;;;255:147;;;;:::o;408:270::-;466:7;557:9;573:1;569;:5;;;;;;557:17;;671:1;664:8;;;408:270;;;;:::o;14385:158::-;14465:4;14489:46;14499:3;:10;;14527:5;14519:14;;14511:23;;14489:9;:46::i;:::-;14482:53;;14385:158;;;;:::o;14150:149::-;14223:4;14247:44;14255:3;:10;;14283:5;14275:14;;14267:23;;14247:7;:44::i;:::-;14240:51;;14150:149;;;;:::o;15090:::-;15164:7;15207:22;15211:3;:10;;15223:5;15207:3;:22::i;:::-;15199:31;;15184:47;;15090:149;;;;:::o;21366:890::-;21425:16;21444:23;21459:7;21444:14;:23::i;:::-;21425:42;;21496:1;21482:11;:15;21478:730;;;21514:16;21533:51;21578:5;21533:40;19327:3;21533:11;:15;;:40;;;;:::i;:::-;:44;;:51;;;;:::i;:::-;21514:70;;21599:24;21626:28;21642:11;21626;:15;;:28;;;;:::i;:::-;21599:55;;21683:12;21698:62;21728:9;:18;21738:7;21728:18;;;;;;;;;;;;;;;;;;;;;;;;;21748:11;21698:29;:62::i;:::-;21683:77;;21789:11;21803;21789:25;;21833:7;21829:76;;;21870:19;21861:28;;21829:76;21978:40;22011:6;21978:19;:28;21998:7;21978:28;;;;;;;;;;;;;;;;:32;;:40;;;;:::i;:::-;21947:19;:28;21967:7;21947:28;;;;;;;;;;;;;;;:71;;;;22062:38;22093:6;22062:17;:26;22080:7;22062:26;;;;;;;;;;;;;;;;:30;;:38;;;;:::i;:::-;22033:17;:26;22051:7;22033:26;;;;;;;;;;;;;;;:67;;;;22151:31;22175:6;22151:19;;:23;;:31;;;;:::i;:::-;22129:19;:53;;;;21478:730;;;;;22245:3;22218:15;:24;22234:7;22218:24;;;;;;;;;;;;;;;:30;;;;21366:890;;:::o;14629:117::-;14692:7;14719:19;14727:3;:10;;14719:7;:19::i;:::-;14712:26;;14629:117;;;:::o;13831:143::-;13901:4;13925:41;13930:3;:10;;13958:5;13950:14;;13942:23;;13925:4;:41::i;:::-;13918:48;;13831:143;;;;:::o;12705:129::-;12778:4;12825:1;12802:3;:12;;:19;12815:5;12802:19;;;;;;;;;;;;:24;;12795:31;;12705:129;;;;:::o;11075:1544::-;11141:4;11259:18;11280:3;:12;;:19;11293:5;11280:19;;;;;;;;;;;;11259:40;;11330:1;11316:10;:15;11312:1300;;11678:21;11715:1;11702:10;:14;11678:38;;11731:17;11772:1;11751:3;:11;;:18;;;;:22;11731:42;;12018:17;12038:3;:11;;12050:9;12038:22;;;;;;;;;;;;;;;;12018:42;;12184:9;12155:3;:11;;12167:13;12155:26;;;;;;;;;;;;;;;:38;;;;12303:1;12287:13;:17;12261:3;:12;;:23;12274:9;12261:23;;;;;;;;;;;:43;;;;12413:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;12508:3;:12;;:19;12521:5;12508:19;;;;;;;;;;;12501:26;;;12551:4;12544:11;;;;;;;;11312:1300;12595:5;12588:12;;;11075:1544;;;;;:::o;13373:204::-;13440:7;13489:5;13468:3;:11;;:18;;;;:26;13460:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13551:3;:11;;13563:5;13551:18;;;;;;;;;;;;;;;;13544:25;;13373:204;;;;:::o;22268:553::-;22354:4;22394:1;22375:21;;:7;:21;;;;:35;;;;;22409:1;22400:6;:10;22375:35;22371:420;;;22461:43;22497:6;22461:22;:31;22484:7;22461:31;;;;;;;;;;;;;;;;:35;;:43;;;;:::i;:::-;22427:22;:31;22450:7;22427:31;;;;;;;;;;;;;;;:77;;;;18898:42;22527:37;;;22565:7;22574:6;22527:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22519:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22659:35;22687:6;22659:23;;:27;;:35;;;;:::i;:::-;22633:23;:61;;;;22737:7;22714:39;;;22746:6;22714:39;;;;;;;;;;;;;;;;;;22775:4;22768:11;;;;22371:420;22808:5;22801:12;;22268:553;;;;;:::o;12920:109::-;12976:7;13003:3;:11;;:18;;;;12996:25;;12920:109;;;:::o;10485:414::-;10548:4;10570:21;10580:3;10585:5;10570:9;:21::i;:::-;10565:327;;10608:3;:11;;10625:5;10608:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10791:3;:11;;:18;;;;10769:3;:12;;:19;10782:5;10769:19;;;;;;;;;;;:40;;;;10831:4;10824:11;;;;10565:327;10875:5;10868:12;;10485:414;;;;;:::o
Swarm Source
ipfs://c197be7def3d3d6903fe737253a5b12eaf5ef2e4d8d879779f91f970ac56e687
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.