Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 52 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Tokens For ... | 14373261 | 1061 days ago | IN | 0 ETH | 0.00929674 | ||||
Swap Tokens For ... | 13452990 | 1205 days ago | IN | 0 ETH | 0.01778105 | ||||
Swap Tokens For ... | 13444190 | 1206 days ago | IN | 0 ETH | 0.03243974 | ||||
Swap Tokens For ... | 13443888 | 1206 days ago | IN | 0 ETH | 0.03884384 | ||||
Swap Tokens For ... | 13414542 | 1211 days ago | IN | 0 ETH | 0.02638604 | ||||
Swap Tokens For ... | 13414427 | 1211 days ago | IN | 0.7 ETH | 0.03043162 | ||||
Swap Tokens For ... | 13321545 | 1226 days ago | IN | 0 ETH | 0.02364352 | ||||
Swap Tokens For ... | 13320804 | 1226 days ago | IN | 0 ETH | 0.02216834 | ||||
Swap Tokens For ... | 13199021 | 1245 days ago | IN | 0.8 ETH | 0.03169152 | ||||
Swap Tokens For ... | 13193000 | 1245 days ago | IN | 0.6 ETH | 0.0403723 | ||||
Swap Tokens For ... | 13127386 | 1256 days ago | IN | 0 ETH | 0.02224902 | ||||
Swap Tokens For ... | 13081573 | 1263 days ago | IN | 0 ETH | 0.00994778 | ||||
Swap Tokens For ... | 13045936 | 1268 days ago | IN | 0 ETH | 0.01704042 | ||||
Swap Tokens For ... | 13029750 | 1271 days ago | IN | 0 ETH | 0.00891867 | ||||
Swap Tokens For ... | 13014400 | 1273 days ago | IN | 1 ETH | 0.00610267 | ||||
Swap Tokens For ... | 12998907 | 1275 days ago | IN | 0 ETH | 0.01896828 | ||||
Swap Tokens For ... | 12971265 | 1280 days ago | IN | 0 ETH | 0.01161024 | ||||
Swap Tokens For ... | 12971147 | 1280 days ago | IN | 0 ETH | 0.00095337 | ||||
Swap Tokens For ... | 12961031 | 1281 days ago | IN | 0 ETH | 0.01182114 | ||||
Swap Tokens For ... | 12955348 | 1282 days ago | IN | 0 ETH | 0.00823021 | ||||
Swap Tokens For ... | 12936497 | 1285 days ago | IN | 0 ETH | 0.0083412 | ||||
Swap Tokens For ... | 12914581 | 1289 days ago | IN | 2 ETH | 0.00897715 | ||||
Swap Tokens For ... | 12905925 | 1290 days ago | IN | 1.4 ETH | 0.00623 | ||||
Swap Tokens For ... | 12898746 | 1291 days ago | IN | 2 ETH | 0.00933624 | ||||
Swap Tokens For ... | 12897965 | 1291 days ago | IN | 1 ETH | 0.00566844 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
14373261 | 1061 days ago | 0.00027768 ETH | ||||
14373261 | 1061 days ago | 0.00027768 ETH | ||||
13452990 | 1205 days ago | 0.00014995 ETH | ||||
13452990 | 1205 days ago | 0.00014995 ETH | ||||
13444190 | 1206 days ago | 0.00770981 ETH | ||||
13444190 | 1206 days ago | 0.00770981 ETH | ||||
13443888 | 1206 days ago | 0.00203121 ETH | ||||
13443888 | 1206 days ago | 0.00203121 ETH | ||||
13414542 | 1211 days ago | 0.00176907 ETH | ||||
13414542 | 1211 days ago | 0.00176907 ETH | ||||
13414427 | 1211 days ago | 0.7 ETH | ||||
13321545 | 1226 days ago | 0.00145578 ETH | ||||
13321545 | 1226 days ago | 0.00145578 ETH | ||||
13320804 | 1226 days ago | 0.00188035 ETH | ||||
13320804 | 1226 days ago | 0.00188035 ETH | ||||
13199021 | 1245 days ago | 0.8 ETH | ||||
13193000 | 1245 days ago | 0.6 ETH | ||||
13127386 | 1256 days ago | 0.01515897 ETH | ||||
13127386 | 1256 days ago | 0.01515897 ETH | ||||
13081573 | 1263 days ago | 0.00075411 ETH | ||||
13081573 | 1263 days ago | 0.00075411 ETH | ||||
13045936 | 1268 days ago | 0.00051966 ETH | ||||
13045936 | 1268 days ago | 0.00051966 ETH | ||||
13029750 | 1271 days ago | 0.00012881 ETH | ||||
13029750 | 1271 days ago | 0.00012881 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ReethRouterV1
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-01 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol pragma solidity ^0.6.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _governance; event GovernanceTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _governance = msgSender; emit GovernanceTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function governance() public view returns (address) { return _governance; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyGovernance() { require(_governance == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferGovernance(address newOwner) internal virtual onlyGovernance { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit GovernanceTransferred(_governance, newOwner); _governance = newOwner; } } contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: contracts/strategies/ReethRouterV1.sol pragma solidity =0.6.6; // This is a wrapper router for Paraswap router // It will take whatever fee is designated for it, convert it to WETH and calculate the total spent by the user with that // This amount will be sent to the ETH spent oracle interface SpentOracle{ function addUserETHSpent(address _add, uint256 _ethback) external; } interface PartnerInfo{ function getFee() external view returns(uint256); function getPartnerShare() external view returns(uint256); } interface WrappedEther { function withdraw(uint256) external; function deposit() external payable; } interface ParaswapProxy { function getTokenTransferProxy() external view returns (address); } contract ReethRouterV1 is Ownable, ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; using Address for address; address public ethSpentOracleAddress; address public paraswapRouterAddress; address public paraswapPartnerAddress; address public reethTreasuryAddress; address constant ETH_ADDRESS = address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); address constant WETH_ADDRESS = address(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); uint256 constant DIVISION_FACTOR = 100000; event SwappedTokens(address srcToken, address desToken, uint256 srcAmount, uint256 ethEquivalent); constructor( address _router, address _partner, address _ethspent, address _treasury ) public { paraswapPartnerAddress = _partner; paraswapRouterAddress = _router; ethSpentOracleAddress = _ethspent; reethTreasuryAddress = _treasury; } receive() external payable { // We need an anonymous fallback function to accept ether into this contract } // Called by eth_call to get the fee return of a route // It returns the feeamount and blocktime function querySwapTokensForTokensProxyFee( address srcToken, address destToken, uint256 srcAmount, bytes calldata paraswapTradeData ) external payable nonReentrant returns (uint256,uint256) { require(srcAmount > 0, "Amount is too small"); require(srcToken != destToken, "Tokens are the same"); // Transfer the token in uint256 _before = 0; if(srcToken != ETH_ADDRESS){ _before = IERC20(srcToken).balanceOf(address(this)); IERC20(srcToken).safeTransferFrom(_msgSender(), address(this), srcAmount); srcAmount = IERC20(srcToken).balanceOf(address(this)).sub(_before); // And set the approvals IERC20(srcToken).safeApprove(ParaswapProxy(paraswapRouterAddress).getTokenTransferProxy(), 0); IERC20(srcToken).safeApprove(ParaswapProxy(paraswapRouterAddress).getTokenTransferProxy(), srcAmount); }else{ require(srcAmount == msg.value, "Sent uneven amount to router"); } // Now do a function call to paraswap router with its data if(destToken != ETH_ADDRESS){ _before = IERC20(destToken).balanceOf(address(this)); }else{ _before = address(this).balance; } { (bool success, bytes memory returndata) = paraswapRouterAddress.call{value: msg.value}(paraswapTradeData); if(success == false){ // 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("Failed for unknown reason"); } } } if(srcToken != ETH_ADDRESS){ uint256 _bal = IERC20(srcToken).balanceOf(address(this)); if(_bal > 0){ // Send it back to the sender if any source token left over IERC20(srcToken).safeTransfer(_msgSender(), _bal); } } // Whatever fee is obtained is returned uint256 feeAmount = 0; if(destToken != ETH_ADDRESS){ feeAmount = IERC20(destToken).balanceOf(address(this)).sub(_before); }else{ feeAmount = address(this).balance.sub(_before); } return (feeAmount, now); // To be used for actual call in destination token units } // Proxy function for paraswap // We do not handle WETH to ETH conversions function swapTokensForTokensProxy( address srcToken, address destToken, uint256 srcAmount, uint256 expFeeAmount, // This is in destination token units uint256 deadlineTime, bytes calldata paraswapTradeData, bytes calldata paraswapFeeData) external payable nonReentrant { uint256 gasUsed = gasleft(); // Start calculate gas spent require(srcAmount > 0 && expFeeAmount > 0, "Amounts are too small"); require(srcToken != destToken, "Tokens are the same"); require(now <= deadlineTime, "Time has run out"); // Transfer the token in uint256 _before = 0; if(srcToken != ETH_ADDRESS){ _before = IERC20(srcToken).balanceOf(address(this)); IERC20(srcToken).safeTransferFrom(_msgSender(), address(this), srcAmount); srcAmount = IERC20(srcToken).balanceOf(address(this)).sub(_before); // And set the approvals IERC20(srcToken).safeApprove(ParaswapProxy(paraswapRouterAddress).getTokenTransferProxy(), 0); IERC20(srcToken).safeApprove(ParaswapProxy(paraswapRouterAddress).getTokenTransferProxy(), srcAmount); }else{ require(srcAmount == msg.value, "Sent uneven amount to router"); } // Now do a function call to paraswap router with its data if(destToken != ETH_ADDRESS){ _before = IERC20(destToken).balanceOf(address(this)); }else{ _before = address(this).balance; } { (bool success, bytes memory returndata) = paraswapRouterAddress.call{value: msg.value}(paraswapTradeData); if(success == false){ // 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("Failed for unknown reason for swap"); } } } if(srcToken != ETH_ADDRESS){ uint256 _bal = IERC20(srcToken).balanceOf(address(this)); if(_bal > 0){ // Send it back to the sender if any source token left over IERC20(srcToken).safeTransfer(_msgSender(), _bal); } } // The receiver should get the tokens and only the fee should be returned here in destination tokens uint256 feeAmount = 0; if(destToken != ETH_ADDRESS){ feeAmount = IERC20(destToken).balanceOf(address(this)).sub(_before); }else{ // Only look at gained ETH for fee feeAmount = address(this).balance.sub(_before); // But convert all ETH to WETH WrappedEther(WETH_ADDRESS).deposit{value: address(this).balance}(); destToken = WETH_ADDRESS; } require(feeAmount > 0, "There should be a fee here"); require(expFeeAmount <= feeAmount, "Expected fee must be less than or equal to the actual"); if(destToken != WETH_ADDRESS){ // Do another trade to WETH from whatever token is there based on the expected fee (in destination token) // Expected fee calculated from a simulated previous trade IERC20(destToken).safeApprove(ParaswapProxy(paraswapRouterAddress).getTokenTransferProxy(), 0); IERC20(destToken).safeApprove(ParaswapProxy(paraswapRouterAddress).getTokenTransferProxy(), expFeeAmount); _before = IERC20(WETH_ADDRESS).balanceOf(address(this)); { (bool success, bytes memory returndata) = paraswapRouterAddress.call(paraswapFeeData); if(success == false){ // 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("Failed for unknown reason for fee"); } } } feeAmount = IERC20(WETH_ADDRESS).balanceOf(address(this)).sub(_before); uint256 _bal = IERC20(destToken).balanceOf(address(this)); if(_bal > 0){ // Send this dust amount of the random token to the treasury // This is not factored into the eth spent IERC20(destToken).safeTransfer(reethTreasuryAddress, _bal); } } { // Send whatever weth to the treasury uint256 _bal = IERC20(WETH_ADDRESS).balanceOf(address(this)); if(_bal > 0){ IERC20(WETH_ADDRESS).safeTransfer(reethTreasuryAddress, _bal); } } if(ethSpentOracleAddress != address(0)){ // Factor this gas usage to stake into the oracle SpentOracle oracle = SpentOracle(ethSpentOracleAddress); uint256 spent = calculateTradeInETH(feeAmount); gasUsed = gasUsed.sub(gasleft()).mul(tx.gasprice); // The amount of ETH used for this transaction oracle.addUserETHSpent(_msgSender(), gasUsed); // Now add the feeAmount equivalent // Simple conversion to calculate the total trade worth in ETH // Take our exchange fee (0.%) minus paraswap fee (15% of the 3%) => 0.255% // Divide fee / 0.255% to calculate trade worth // We will send this amount to the eth spent oracle oracle.addUserETHSpent(_msgSender(), spent); emit SwappedTokens(srcToken, destToken, srcAmount, spent.add(gasUsed)); } } function calculateTradeInETH(uint256 ethAmount) internal view returns (uint256) { PartnerInfo partner = PartnerInfo(paraswapPartnerAddress); uint256 PARASWAP_DIVISOR = 10000; uint256 feePercent = partner.getFee().mul(DIVISION_FACTOR).mul(partner.getPartnerShare()).div(PARASWAP_DIVISOR).div(PARASWAP_DIVISOR); uint256 spent = ethAmount.mul(DIVISION_FACTOR).div(feePercent); return spent; } // Timelock variables uint256 private _timelockStart; // The start of the timelock to change governance variables uint256 private _timelockType; // The function that needs to be changed uint256 constant TIMELOCK_DURATION = 86400; // Timelock is 24 hours // Reusable timelock variables address private _timelock_address; modifier timelockConditionsMet(uint256 _type) { require(_timelockType == _type, "Timelock not acquired for this function"); _timelockType = 0; // Reset the type once the timelock is used require(now >= _timelockStart + TIMELOCK_DURATION, "Timelock time not met"); _; } // Change the owner of the token contract // -------------------- function startGovernanceChange(address _address) external onlyGovernance { _timelockStart = now; _timelockType = 1; _timelock_address = _address; } function finishGovernanceChange() external onlyGovernance timelockConditionsMet(1) { transferGovernance(_timelock_address); } // -------------------- // Change the paraswap partner contract // -------------------- function startChangeParaswapPartner(address _address) external onlyGovernance { _timelockStart = now; _timelockType = 2; _timelock_address = _address; } function finishChangeParaswapPartner() external onlyGovernance timelockConditionsMet(2) { paraswapPartnerAddress = _timelock_address; } // -------------------- // Change the eth spent oracle // -------------------- function startChangeSpentOracle(address _address) external onlyGovernance { _timelockStart = now; _timelockType = 3; _timelock_address = _address; } function finishChangeSpentOracle() external onlyGovernance timelockConditionsMet(3) { ethSpentOracleAddress = _timelock_address; } // -------------------- // Change the reeth treastury // -------------------- function startChangeReethTreasury(address _address) external onlyGovernance { _timelockStart = now; _timelockType = 4; _timelock_address = _address; } function finishChangeReethTreasury() external onlyGovernance timelockConditionsMet(4) { reethTreasuryAddress = _timelock_address; } // -------------------- }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_partner","type":"address"},{"internalType":"address","name":"_ethspent","type":"address"},{"internalType":"address","name":"_treasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"GovernanceTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"srcToken","type":"address"},{"indexed":false,"internalType":"address","name":"desToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"srcAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethEquivalent","type":"uint256"}],"name":"SwappedTokens","type":"event"},{"inputs":[],"name":"ethSpentOracleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finishChangeParaswapPartner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishChangeReethTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishChangeSpentOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishGovernanceChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paraswapPartnerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paraswapRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"destToken","type":"address"},{"internalType":"uint256","name":"srcAmount","type":"uint256"},{"internalType":"bytes","name":"paraswapTradeData","type":"bytes"}],"name":"querySwapTokensForTokensProxyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"reethTreasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"startChangeParaswapPartner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"startChangeReethTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"startChangeSpentOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"startGovernanceChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"destToken","type":"address"},{"internalType":"uint256","name":"srcAmount","type":"uint256"},{"internalType":"uint256","name":"expFeeAmount","type":"uint256"},{"internalType":"uint256","name":"deadlineTime","type":"uint256"},{"internalType":"bytes","name":"paraswapTradeData","type":"bytes"},{"internalType":"bytes","name":"paraswapFeeData","type":"bytes"}],"name":"swapTokensForTokensProxy","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051620029fa380380620029fa8339818101604052608081101561003557600080fd5b5080516020820151604083015160609093015191929091600061005f6001600160e01b036100fd16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80908290a35060018055600480546001600160a01b03199081166001600160a01b03958616179091556003805482169585169590951790945560028054851692841692909217909155600580549093169116179055610101565b3390565b6128e980620001116000396000f3fe6080604052600436106100ec5760003560e01c80635aa6e6751161008a578063a7d4701d11610059578063a7d4701d146103a6578063b9195072146103d9578063c54dc3b9146103ee578063f800877614610403576100f3565b80635aa6e675146102a0578063761f10c5146102b55780637dfdde381461035e578063a1ee70f514610391576100f3565b80632a8e4261116100c65780632a8e4261146101735780634c64625f1461018857806353e2a5331461019d578063556fbe85146101b2576100f3565b80630636055d146100f8578063101d84df1461010f57806328a21e6f14610140576100f3565b366100f357005b600080fd5b34801561010457600080fd5b5061010d610436565b005b34801561011b57600080fd5b5061012461054e565b604080516001600160a01b039092168252519081900360200190f35b34801561014c57600080fd5b5061010d6004803603602081101561016357600080fd5b50356001600160a01b031661055d565b34801561017f57600080fd5b506101246105e0565b34801561019457600080fd5b5061010d6105ef565b3480156101a957600080fd5b50610124610707565b61010d600480360360e08110156101c857600080fd5b6001600160a01b0382358116926020810135909116916040820135916060810135916080820135919081019060c0810160a082013564010000000081111561020f57600080fd5b82018360208201111561022157600080fd5b8035906020019184600183028401116401000000008311171561024357600080fd5b91939092909160208101903564010000000081111561026157600080fd5b82018360208201111561027357600080fd5b8035906020019184600183028401116401000000008311171561029557600080fd5b509092509050610716565b3480156102ac57600080fd5b50610124611467565b610345600480360360808110156102cb57600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561030657600080fd5b82018360208201111561031857600080fd5b8035906020019184600183028401116401000000008311171561033a57600080fd5b509092509050611476565b6040805192835260208301919091528051918290030190f35b34801561036a57600080fd5b5061010d6004803603602081101561038157600080fd5b50356001600160a01b0316611adc565b34801561039d57600080fd5b5061010d611b5f565b3480156103b257600080fd5b5061010d600480360360208110156103c957600080fd5b50356001600160a01b0316611c77565b3480156103e557600080fd5b5061010d611cfa565b3480156103fa57600080fd5b50610124611e05565b34801561040f57600080fd5b5061010d6004803603602081101561042657600080fd5b50356001600160a01b0316611e14565b61043e611e97565b6000546001600160a01b0390811691161461048e576040805162461bcd60e51b815260206004820181905260248201526000805160206127dd833981519152604482015290519081900360640190fd5b600280600754146104d05760405162461bcd60e51b81526004018080602001828103825260278152602001806127956027913960400191505060405180910390fd5b60006007556006546201518001421015610529576040805162461bcd60e51b8152602060048201526015602482015274151a5b595b1bd8dac81d1a5b59481b9bdd081b595d605a1b604482015290519081900360640190fd5b50600854600480546001600160a01b0319166001600160a01b03909216919091179055565b6005546001600160a01b031681565b610565611e97565b6000546001600160a01b039081169116146105b5576040805162461bcd60e51b815260206004820181905260248201526000805160206127dd833981519152604482015290519081900360640190fd5b426006556002600755600880546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031681565b6105f7611e97565b6000546001600160a01b03908116911614610647576040805162461bcd60e51b815260206004820181905260248201526000805160206127dd833981519152604482015290519081900360640190fd5b600380600754146106895760405162461bcd60e51b81526004018080602001828103825260278152602001806127956027913960400191505060405180910390fd5b600060075560065462015180014210156106e2576040805162461bcd60e51b8152602060048201526015602482015274151a5b595b1bd8dac81d1a5b59481b9bdd081b595d605a1b604482015290519081900360640190fd5b50600854600280546001600160a01b0319166001600160a01b03909216919091179055565b6004546001600160a01b031681565b6002600154141561076e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260015560005a90506000881180156107885750600087115b6107d1576040805162461bcd60e51b8152602060048201526015602482015274105b5bdd5b9d1cc8185c99481d1bdbc81cdb585b1b605a1b604482015290519081900360640190fd5b886001600160a01b03168a6001600160a01b0316141561082e576040805162461bcd60e51b8152602060048201526013602482015272546f6b656e7320617265207468652073616d6560681b604482015290519081900360640190fd5b85421115610876576040805162461bcd60e51b815260206004820152601060248201526f151a5b59481a185cc81c9d5b881bdd5d60821b604482015290519081900360640190fd5b60006001600160a01b038b1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610adc57604080516370a0823160e01b815230600482015290516001600160a01b038d16916370a08231916024808301926020929190829003018186803b1580156108e257600080fd5b505afa1580156108f6573d6000803e3d6000fd5b505050506040513d602081101561090c57600080fd5b5051905061093361091b611e97565b6001600160a01b038d1690308c63ffffffff611e9b16565b604080516370a0823160e01b815230600482015290516109b79183916001600160a01b038f16916370a08231916024808301926020929190829003018186803b15801561097f57600080fd5b505afa158015610993573d6000803e3d6000fd5b505050506040513d60208110156109a957600080fd5b50519063ffffffff611efb16565b9850610a4e600360009054906101000a90046001600160a01b03166001600160a01b031663d2c4b5986040518163ffffffff1660e01b815260040160206040518083038186803b158015610a0a57600080fd5b505afa158015610a1e573d6000803e3d6000fd5b505050506040513d6020811015610a3457600080fd5b50516001600160a01b038d1690600063ffffffff611f4616565b60035460408051631a5896b360e31b81529051610ad7926001600160a01b03169163d2c4b598916004808301926020929190829003018186803b158015610a9457600080fd5b505afa158015610aa8573d6000803e3d6000fd5b505050506040513d6020811015610abe57600080fd5b50516001600160a01b038d16908b63ffffffff611f4616565b610b30565b348914610b30576040805162461bcd60e51b815260206004820152601c60248201527f53656e7420756e6576656e20616d6f756e7420746f20726f7574657200000000604482015290519081900360640190fd5b6001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610bcd57604080516370a0823160e01b815230600482015290516001600160a01b038c16916370a08231916024808301926020929190829003018186803b158015610b9a57600080fd5b505afa158015610bae573d6000803e3d6000fd5b505050506040513d6020811015610bc457600080fd5b50519050610bd0565b50475b6003546040516000916060916001600160a01b039091169034908a908a90808383808284376040519201945060009350909150508083038185875af1925050503d8060008114610c3c576040519150601f19603f3d011682016040523d82523d6000602084013e610c41565b606091505b50909250905081610c9357805115610c5c5780518082602001fd5b60405162461bcd60e51b81526004018080602001828103825260228152602001806127fd6022913960400191505060405180910390fd5b50506001600160a01b038b1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610d5b57604080516370a0823160e01b815230600482015290516000916001600160a01b038e16916370a0823191602480820192602092909190829003018186803b158015610d0357600080fd5b505afa158015610d17573d6000803e3d6000fd5b505050506040513d6020811015610d2d57600080fd5b505190508015610d5957610d59610d42611e97565b6001600160a01b038e16908363ffffffff61205e16565b505b60006001600160a01b038b1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610dd457604080516370a0823160e01b81523060048201529051610dcd9184916001600160a01b038f16916370a08231916024808301926020929190829003018186803b15801561097f57600080fd5b9050610e66565b610de4478363ffffffff611efb16565b905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e3557600080fd5b505af1158015610e49573d6000803e3d6000fd5b505050505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29a505b60008111610ebb576040805162461bcd60e51b815260206004820152601a60248201527f54686572652073686f756c642062652061206665652068657265000000000000604482015290519081900360640190fd5b80891115610efa5760405162461bcd60e51b815260040180806020018281038252603581526020018061281f6035913960400191505060405180910390fd5b6001600160a01b038b1673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2146111e35760035460408051631a5896b360e31b81529051610f64926001600160a01b03169163d2c4b598916004808301926020929190829003018186803b158015610a0a57600080fd5b60035460408051631a5896b360e31b81529051610faa926001600160a01b03169163d2c4b598916004808301926020929190829003018186803b158015610a9457600080fd5b604080516370a0823160e01b8152306004820152905173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2916370a08231916024808301926020929190829003018186803b158015610ffb57600080fd5b505afa15801561100f573d6000803e3d6000fd5b505050506040513d602081101561102557600080fd5b50516003546040519193506000916060916001600160a01b03169088908890808383808284376040519201945060009350909150508083038183865af19150503d8060008114611091576040519150601f19603f3d011682016040523d82523d6000602084013e611096565b606091505b509092509050816110e8578051156110b15780518082602001fd5b60405162461bcd60e51b815260040180806020018281038252602181526020018061274e6021913960400191505060405180910390fd5b5050604080516370a0823160e01b8152306004820152905161114191849173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2916370a08231916024808301926020929190829003018186803b15801561097f57600080fd5b604080516370a0823160e01b815230600482015290519192506000916001600160a01b038e16916370a08231916024808301926020929190829003018186803b15801561118d57600080fd5b505afa1580156111a1573d6000803e3d6000fd5b505050506040513d60208110156111b757600080fd5b5051905080156111e1576005546111e1906001600160a01b038e811691168363ffffffff61205e16565b505b604080516370a0823160e01b8152306004820152905160009173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2916370a0823191602480820192602092909190829003018186803b15801561123857600080fd5b505afa15801561124c573d6000803e3d6000fd5b505050506040513d602081101561126257600080fd5b50519050801561129e5760055461129e9073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906001600160a01b03168363ffffffff61205e16565b506002546001600160a01b031615611455576002546001600160a01b031660006112c7836120b0565b90506112ea3a6112de5a889063ffffffff611efb16565b9063ffffffff6121f616565b9450816001600160a01b0316633b3fa241611303611e97565b876040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561135357600080fd5b505af1158015611367573d6000803e3d6000fd5b50505050816001600160a01b0316633b3fa241611382611e97565b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156113d257600080fd5b505af11580156113e6573d6000803e3d6000fd5b505050507f43a6165165685ef04ce68fd0b620a88554df7464167d1fd61ff8b3802a4146f58e8e8e611421898661224f90919063ffffffff16565b604080516001600160a01b03958616815293909416602084015282840191909152606082015290519081900360800190a150505b50506001805550505050505050505050565b6000546001600160a01b031690565b600080600260015414156114d1576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001558461151e576040805162461bcd60e51b8152602060048201526013602482015272105b5bdd5b9d081a5cc81d1bdbc81cdb585b1b606a1b604482015290519081900360640190fd5b856001600160a01b0316876001600160a01b0316141561157b576040805162461bcd60e51b8152602060048201526013602482015272546f6b656e7320617265207468652073616d6560681b604482015290519081900360640190fd5b60006001600160a01b03881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146117a957604080516370a0823160e01b815230600482015290516001600160a01b038a16916370a08231916024808301926020929190829003018186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50519050611638611620611e97565b6001600160a01b038a1690308963ffffffff611e9b16565b604080516370a0823160e01b815230600482015290516116849183916001600160a01b038c16916370a08231916024808301926020929190829003018186803b15801561097f57600080fd5b955061171b600360009054906101000a90046001600160a01b03166001600160a01b031663d2c4b5986040518163ffffffff1660e01b815260040160206040518083038186803b1580156116d757600080fd5b505afa1580156116eb573d6000803e3d6000fd5b505050506040513d602081101561170157600080fd5b50516001600160a01b038a1690600063ffffffff611f4616565b60035460408051631a5896b360e31b815290516117a4926001600160a01b03169163d2c4b598916004808301926020929190829003018186803b15801561176157600080fd5b505afa158015611775573d6000803e3d6000fd5b505050506040513d602081101561178b57600080fd5b50516001600160a01b038a16908863ffffffff611f4616565b6117fd565b3486146117fd576040805162461bcd60e51b815260206004820152601c60248201527f53656e7420756e6576656e20616d6f756e7420746f20726f7574657200000000604482015290519081900360640190fd5b6001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461189a57604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561186757600080fd5b505afa15801561187b573d6000803e3d6000fd5b505050506040513d602081101561189157600080fd5b5051905061189d565b50475b6003546040516000916060916001600160a01b0390911690349089908990808383808284376040519201945060009350909150508083038185875af1925050503d8060008114611909576040519150601f19603f3d011682016040523d82523d6000602084013e61190e565b606091505b50909250905081611976578051156119295780518082602001fd5b6040805162461bcd60e51b815260206004820152601960248201527f4661696c656420666f7220756e6b6e6f776e20726561736f6e00000000000000604482015290519081900360640190fd5b50506001600160a01b03881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14611a3e57604080516370a0823160e01b815230600482015290516000916001600160a01b038b16916370a0823191602480820192602092909190829003018186803b1580156119e657600080fd5b505afa1580156119fa573d6000803e3d6000fd5b505050506040513d6020811015611a1057600080fd5b505190508015611a3c57611a3c611a25611e97565b6001600160a01b038b16908363ffffffff61205e16565b505b60006001600160a01b03881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14611ab757604080516370a0823160e01b81523060048201529051611ab09184916001600160a01b038c16916370a08231916024808301926020929190829003018186803b15801561097f57600080fd5b9050611aca565b611ac7478363ffffffff611efb16565b90505b60018055984298509650505050505050565b611ae4611e97565b6000546001600160a01b03908116911614611b34576040805162461bcd60e51b815260206004820181905260248201526000805160206127dd833981519152604482015290519081900360640190fd5b426006556004600755600880546001600160a01b0319166001600160a01b0392909216919091179055565b611b67611e97565b6000546001600160a01b03908116911614611bb7576040805162461bcd60e51b815260206004820181905260248201526000805160206127dd833981519152604482015290519081900360640190fd5b60048060075414611bf95760405162461bcd60e51b81526004018080602001828103825260278152602001806127956027913960400191505060405180910390fd5b60006007556006546201518001421015611c52576040805162461bcd60e51b8152602060048201526015602482015274151a5b595b1bd8dac81d1a5b59481b9bdd081b595d605a1b604482015290519081900360640190fd5b50600854600580546001600160a01b0319166001600160a01b03909216919091179055565b611c7f611e97565b6000546001600160a01b03908116911614611ccf576040805162461bcd60e51b815260206004820181905260248201526000805160206127dd833981519152604482015290519081900360640190fd5b426006556003600755600880546001600160a01b0319166001600160a01b0392909216919091179055565b611d02611e97565b6000546001600160a01b03908116911614611d52576040805162461bcd60e51b815260206004820181905260248201526000805160206127dd833981519152604482015290519081900360640190fd5b60018060075414611d945760405162461bcd60e51b81526004018080602001828103825260278152602001806127956027913960400191505060405180910390fd5b60006007556006546201518001421015611ded576040805162461bcd60e51b8152602060048201526015602482015274151a5b595b1bd8dac81d1a5b59481b9bdd081b595d605a1b604482015290519081900360640190fd5b600854611e02906001600160a01b03166122a9565b50565b6002546001600160a01b031681565b611e1c611e97565b6000546001600160a01b03908116911614611e6c576040805162461bcd60e51b815260206004820181905260248201526000805160206127dd833981519152604482015290519081900360640190fd5b426006556001600755600880546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611ef59085906123a1565b50505050565b6000611f3d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612452565b90505b92915050565b801580611fcc575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015611f9e57600080fd5b505afa158015611fb2573d6000803e3d6000fd5b505050506040513d6020811015611fc857600080fd5b5051155b6120075760405162461bcd60e51b815260040180806020018281038252603681526020018061287e6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526120599084906123a1565b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526120599084906123a1565b600080600460009054906101000a90046001600160a01b031690506000612710905060006121d1826121c5846121c5876001600160a01b031663fdb7039a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561211857600080fd5b505afa15801561212c573d6000803e3d6000fd5b505050506040513d602081101561214257600080fd5b50516040805163ced72f8760e01b815290516112de91620186a0916001600160a01b038d169163ced72f87916004808301926020929190829003018186803b15801561218d57600080fd5b505afa1580156121a1573d6000803e3d6000fd5b505050506040513d60208110156121b757600080fd5b50519063ffffffff6121f616565b9063ffffffff6124e916565b905060006121ec826121c588620186a063ffffffff6121f616565b9695505050505050565b60008261220557506000611f40565b8282028284828161221257fe5b0414611f3d5760405162461bcd60e51b81526004018080602001828103825260218152602001806127bc6021913960400191505060405180910390fd5b600082820183811015611f3d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6122b1611e97565b6000546001600160a01b03908116911614612301576040805162461bcd60e51b815260206004820181905260248201526000805160206127dd833981519152604482015290519081900360640190fd5b6001600160a01b0381166123465760405162461bcd60e51b815260040180806020018281038252602681526020018061276f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce8091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60606123f6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661252b9092919063ffffffff16565b8051909150156120595780806020019051602081101561241557600080fd5b50516120595760405162461bcd60e51b815260040180806020018281038252602a815260200180612854602a913960400191505060405180910390fd5b600081848411156124e15760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156124a657818101518382015260200161248e565b50505050905090810190601f1680156124d35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000611f3d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612542565b606061253a84846000856125a7565b949350505050565b600081836125915760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156124a657818101518382015260200161248e565b50600083858161259d57fe5b0495945050505050565b60606125b285612714565b612603576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106126425780518252601f199092019160209182019101612623565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146126a4576040519150601f19603f3d011682016040523d82523d6000602084013e6126a9565b606091505b509150915081156126bd57915061253a9050565b8051156126cd5780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156124a657818101518382015260200161248e565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061253a57505015159291505056fe4661696c656420666f7220756e6b6e6f776e20726561736f6e20666f72206665654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737354696d656c6f636b206e6f7420616371756972656420666f7220746869732066756e6374696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724661696c656420666f7220756e6b6e6f776e20726561736f6e20666f722073776170457870656374656420666565206d757374206265206c657373207468616e206f7220657175616c20746f207468652061637475616c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a264697066735822122072ab486cd256050834de8e143e1e1a652d53a1015f27772abb49653db632174f64736f6c634300060600330000000000000000000000001bd435f3c054b6e901b7b108a0ab7617c808677b000000000000000000000000ddd7aa46ab065453429aa747af73fbda97df14f7000000000000000000000000e2567c521ccdf707f0ef804de17b4ec2fcc8a94b00000000000000000000000055d39bae64dcbf66af250db95d82b905fe2ecefb
Deployed Bytecode
0x6080604052600436106100ec5760003560e01c80635aa6e6751161008a578063a7d4701d11610059578063a7d4701d146103a6578063b9195072146103d9578063c54dc3b9146103ee578063f800877614610403576100f3565b80635aa6e675146102a0578063761f10c5146102b55780637dfdde381461035e578063a1ee70f514610391576100f3565b80632a8e4261116100c65780632a8e4261146101735780634c64625f1461018857806353e2a5331461019d578063556fbe85146101b2576100f3565b80630636055d146100f8578063101d84df1461010f57806328a21e6f14610140576100f3565b366100f357005b600080fd5b34801561010457600080fd5b5061010d610436565b005b34801561011b57600080fd5b5061012461054e565b604080516001600160a01b039092168252519081900360200190f35b34801561014c57600080fd5b5061010d6004803603602081101561016357600080fd5b50356001600160a01b031661055d565b34801561017f57600080fd5b506101246105e0565b34801561019457600080fd5b5061010d6105ef565b3480156101a957600080fd5b50610124610707565b61010d600480360360e08110156101c857600080fd5b6001600160a01b0382358116926020810135909116916040820135916060810135916080820135919081019060c0810160a082013564010000000081111561020f57600080fd5b82018360208201111561022157600080fd5b8035906020019184600183028401116401000000008311171561024357600080fd5b91939092909160208101903564010000000081111561026157600080fd5b82018360208201111561027357600080fd5b8035906020019184600183028401116401000000008311171561029557600080fd5b509092509050610716565b3480156102ac57600080fd5b50610124611467565b610345600480360360808110156102cb57600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561030657600080fd5b82018360208201111561031857600080fd5b8035906020019184600183028401116401000000008311171561033a57600080fd5b509092509050611476565b6040805192835260208301919091528051918290030190f35b34801561036a57600080fd5b5061010d6004803603602081101561038157600080fd5b50356001600160a01b0316611adc565b34801561039d57600080fd5b5061010d611b5f565b3480156103b257600080fd5b5061010d600480360360208110156103c957600080fd5b50356001600160a01b0316611c77565b3480156103e557600080fd5b5061010d611cfa565b3480156103fa57600080fd5b50610124611e05565b34801561040f57600080fd5b5061010d6004803603602081101561042657600080fd5b50356001600160a01b0316611e14565b61043e611e97565b6000546001600160a01b0390811691161461048e576040805162461bcd60e51b815260206004820181905260248201526000805160206127dd833981519152604482015290519081900360640190fd5b600280600754146104d05760405162461bcd60e51b81526004018080602001828103825260278152602001806127956027913960400191505060405180910390fd5b60006007556006546201518001421015610529576040805162461bcd60e51b8152602060048201526015602482015274151a5b595b1bd8dac81d1a5b59481b9bdd081b595d605a1b604482015290519081900360640190fd5b50600854600480546001600160a01b0319166001600160a01b03909216919091179055565b6005546001600160a01b031681565b610565611e97565b6000546001600160a01b039081169116146105b5576040805162461bcd60e51b815260206004820181905260248201526000805160206127dd833981519152604482015290519081900360640190fd5b426006556002600755600880546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031681565b6105f7611e97565b6000546001600160a01b03908116911614610647576040805162461bcd60e51b815260206004820181905260248201526000805160206127dd833981519152604482015290519081900360640190fd5b600380600754146106895760405162461bcd60e51b81526004018080602001828103825260278152602001806127956027913960400191505060405180910390fd5b600060075560065462015180014210156106e2576040805162461bcd60e51b8152602060048201526015602482015274151a5b595b1bd8dac81d1a5b59481b9bdd081b595d605a1b604482015290519081900360640190fd5b50600854600280546001600160a01b0319166001600160a01b03909216919091179055565b6004546001600160a01b031681565b6002600154141561076e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260015560005a90506000881180156107885750600087115b6107d1576040805162461bcd60e51b8152602060048201526015602482015274105b5bdd5b9d1cc8185c99481d1bdbc81cdb585b1b605a1b604482015290519081900360640190fd5b886001600160a01b03168a6001600160a01b0316141561082e576040805162461bcd60e51b8152602060048201526013602482015272546f6b656e7320617265207468652073616d6560681b604482015290519081900360640190fd5b85421115610876576040805162461bcd60e51b815260206004820152601060248201526f151a5b59481a185cc81c9d5b881bdd5d60821b604482015290519081900360640190fd5b60006001600160a01b038b1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610adc57604080516370a0823160e01b815230600482015290516001600160a01b038d16916370a08231916024808301926020929190829003018186803b1580156108e257600080fd5b505afa1580156108f6573d6000803e3d6000fd5b505050506040513d602081101561090c57600080fd5b5051905061093361091b611e97565b6001600160a01b038d1690308c63ffffffff611e9b16565b604080516370a0823160e01b815230600482015290516109b79183916001600160a01b038f16916370a08231916024808301926020929190829003018186803b15801561097f57600080fd5b505afa158015610993573d6000803e3d6000fd5b505050506040513d60208110156109a957600080fd5b50519063ffffffff611efb16565b9850610a4e600360009054906101000a90046001600160a01b03166001600160a01b031663d2c4b5986040518163ffffffff1660e01b815260040160206040518083038186803b158015610a0a57600080fd5b505afa158015610a1e573d6000803e3d6000fd5b505050506040513d6020811015610a3457600080fd5b50516001600160a01b038d1690600063ffffffff611f4616565b60035460408051631a5896b360e31b81529051610ad7926001600160a01b03169163d2c4b598916004808301926020929190829003018186803b158015610a9457600080fd5b505afa158015610aa8573d6000803e3d6000fd5b505050506040513d6020811015610abe57600080fd5b50516001600160a01b038d16908b63ffffffff611f4616565b610b30565b348914610b30576040805162461bcd60e51b815260206004820152601c60248201527f53656e7420756e6576656e20616d6f756e7420746f20726f7574657200000000604482015290519081900360640190fd5b6001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610bcd57604080516370a0823160e01b815230600482015290516001600160a01b038c16916370a08231916024808301926020929190829003018186803b158015610b9a57600080fd5b505afa158015610bae573d6000803e3d6000fd5b505050506040513d6020811015610bc457600080fd5b50519050610bd0565b50475b6003546040516000916060916001600160a01b039091169034908a908a90808383808284376040519201945060009350909150508083038185875af1925050503d8060008114610c3c576040519150601f19603f3d011682016040523d82523d6000602084013e610c41565b606091505b50909250905081610c9357805115610c5c5780518082602001fd5b60405162461bcd60e51b81526004018080602001828103825260228152602001806127fd6022913960400191505060405180910390fd5b50506001600160a01b038b1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610d5b57604080516370a0823160e01b815230600482015290516000916001600160a01b038e16916370a0823191602480820192602092909190829003018186803b158015610d0357600080fd5b505afa158015610d17573d6000803e3d6000fd5b505050506040513d6020811015610d2d57600080fd5b505190508015610d5957610d59610d42611e97565b6001600160a01b038e16908363ffffffff61205e16565b505b60006001600160a01b038b1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610dd457604080516370a0823160e01b81523060048201529051610dcd9184916001600160a01b038f16916370a08231916024808301926020929190829003018186803b15801561097f57600080fd5b9050610e66565b610de4478363ffffffff611efb16565b905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e3557600080fd5b505af1158015610e49573d6000803e3d6000fd5b505050505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29a505b60008111610ebb576040805162461bcd60e51b815260206004820152601a60248201527f54686572652073686f756c642062652061206665652068657265000000000000604482015290519081900360640190fd5b80891115610efa5760405162461bcd60e51b815260040180806020018281038252603581526020018061281f6035913960400191505060405180910390fd5b6001600160a01b038b1673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2146111e35760035460408051631a5896b360e31b81529051610f64926001600160a01b03169163d2c4b598916004808301926020929190829003018186803b158015610a0a57600080fd5b60035460408051631a5896b360e31b81529051610faa926001600160a01b03169163d2c4b598916004808301926020929190829003018186803b158015610a9457600080fd5b604080516370a0823160e01b8152306004820152905173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2916370a08231916024808301926020929190829003018186803b158015610ffb57600080fd5b505afa15801561100f573d6000803e3d6000fd5b505050506040513d602081101561102557600080fd5b50516003546040519193506000916060916001600160a01b03169088908890808383808284376040519201945060009350909150508083038183865af19150503d8060008114611091576040519150601f19603f3d011682016040523d82523d6000602084013e611096565b606091505b509092509050816110e8578051156110b15780518082602001fd5b60405162461bcd60e51b815260040180806020018281038252602181526020018061274e6021913960400191505060405180910390fd5b5050604080516370a0823160e01b8152306004820152905161114191849173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2916370a08231916024808301926020929190829003018186803b15801561097f57600080fd5b604080516370a0823160e01b815230600482015290519192506000916001600160a01b038e16916370a08231916024808301926020929190829003018186803b15801561118d57600080fd5b505afa1580156111a1573d6000803e3d6000fd5b505050506040513d60208110156111b757600080fd5b5051905080156111e1576005546111e1906001600160a01b038e811691168363ffffffff61205e16565b505b604080516370a0823160e01b8152306004820152905160009173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2916370a0823191602480820192602092909190829003018186803b15801561123857600080fd5b505afa15801561124c573d6000803e3d6000fd5b505050506040513d602081101561126257600080fd5b50519050801561129e5760055461129e9073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906001600160a01b03168363ffffffff61205e16565b506002546001600160a01b031615611455576002546001600160a01b031660006112c7836120b0565b90506112ea3a6112de5a889063ffffffff611efb16565b9063ffffffff6121f616565b9450816001600160a01b0316633b3fa241611303611e97565b876040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561135357600080fd5b505af1158015611367573d6000803e3d6000fd5b50505050816001600160a01b0316633b3fa241611382611e97565b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156113d257600080fd5b505af11580156113e6573d6000803e3d6000fd5b505050507f43a6165165685ef04ce68fd0b620a88554df7464167d1fd61ff8b3802a4146f58e8e8e611421898661224f90919063ffffffff16565b604080516001600160a01b03958616815293909416602084015282840191909152606082015290519081900360800190a150505b50506001805550505050505050505050565b6000546001600160a01b031690565b600080600260015414156114d1576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001558461151e576040805162461bcd60e51b8152602060048201526013602482015272105b5bdd5b9d081a5cc81d1bdbc81cdb585b1b606a1b604482015290519081900360640190fd5b856001600160a01b0316876001600160a01b0316141561157b576040805162461bcd60e51b8152602060048201526013602482015272546f6b656e7320617265207468652073616d6560681b604482015290519081900360640190fd5b60006001600160a01b03881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146117a957604080516370a0823160e01b815230600482015290516001600160a01b038a16916370a08231916024808301926020929190829003018186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50519050611638611620611e97565b6001600160a01b038a1690308963ffffffff611e9b16565b604080516370a0823160e01b815230600482015290516116849183916001600160a01b038c16916370a08231916024808301926020929190829003018186803b15801561097f57600080fd5b955061171b600360009054906101000a90046001600160a01b03166001600160a01b031663d2c4b5986040518163ffffffff1660e01b815260040160206040518083038186803b1580156116d757600080fd5b505afa1580156116eb573d6000803e3d6000fd5b505050506040513d602081101561170157600080fd5b50516001600160a01b038a1690600063ffffffff611f4616565b60035460408051631a5896b360e31b815290516117a4926001600160a01b03169163d2c4b598916004808301926020929190829003018186803b15801561176157600080fd5b505afa158015611775573d6000803e3d6000fd5b505050506040513d602081101561178b57600080fd5b50516001600160a01b038a16908863ffffffff611f4616565b6117fd565b3486146117fd576040805162461bcd60e51b815260206004820152601c60248201527f53656e7420756e6576656e20616d6f756e7420746f20726f7574657200000000604482015290519081900360640190fd5b6001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461189a57604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561186757600080fd5b505afa15801561187b573d6000803e3d6000fd5b505050506040513d602081101561189157600080fd5b5051905061189d565b50475b6003546040516000916060916001600160a01b0390911690349089908990808383808284376040519201945060009350909150508083038185875af1925050503d8060008114611909576040519150601f19603f3d011682016040523d82523d6000602084013e61190e565b606091505b50909250905081611976578051156119295780518082602001fd5b6040805162461bcd60e51b815260206004820152601960248201527f4661696c656420666f7220756e6b6e6f776e20726561736f6e00000000000000604482015290519081900360640190fd5b50506001600160a01b03881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14611a3e57604080516370a0823160e01b815230600482015290516000916001600160a01b038b16916370a0823191602480820192602092909190829003018186803b1580156119e657600080fd5b505afa1580156119fa573d6000803e3d6000fd5b505050506040513d6020811015611a1057600080fd5b505190508015611a3c57611a3c611a25611e97565b6001600160a01b038b16908363ffffffff61205e16565b505b60006001600160a01b03881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14611ab757604080516370a0823160e01b81523060048201529051611ab09184916001600160a01b038c16916370a08231916024808301926020929190829003018186803b15801561097f57600080fd5b9050611aca565b611ac7478363ffffffff611efb16565b90505b60018055984298509650505050505050565b611ae4611e97565b6000546001600160a01b03908116911614611b34576040805162461bcd60e51b815260206004820181905260248201526000805160206127dd833981519152604482015290519081900360640190fd5b426006556004600755600880546001600160a01b0319166001600160a01b0392909216919091179055565b611b67611e97565b6000546001600160a01b03908116911614611bb7576040805162461bcd60e51b815260206004820181905260248201526000805160206127dd833981519152604482015290519081900360640190fd5b60048060075414611bf95760405162461bcd60e51b81526004018080602001828103825260278152602001806127956027913960400191505060405180910390fd5b60006007556006546201518001421015611c52576040805162461bcd60e51b8152602060048201526015602482015274151a5b595b1bd8dac81d1a5b59481b9bdd081b595d605a1b604482015290519081900360640190fd5b50600854600580546001600160a01b0319166001600160a01b03909216919091179055565b611c7f611e97565b6000546001600160a01b03908116911614611ccf576040805162461bcd60e51b815260206004820181905260248201526000805160206127dd833981519152604482015290519081900360640190fd5b426006556003600755600880546001600160a01b0319166001600160a01b0392909216919091179055565b611d02611e97565b6000546001600160a01b03908116911614611d52576040805162461bcd60e51b815260206004820181905260248201526000805160206127dd833981519152604482015290519081900360640190fd5b60018060075414611d945760405162461bcd60e51b81526004018080602001828103825260278152602001806127956027913960400191505060405180910390fd5b60006007556006546201518001421015611ded576040805162461bcd60e51b8152602060048201526015602482015274151a5b595b1bd8dac81d1a5b59481b9bdd081b595d605a1b604482015290519081900360640190fd5b600854611e02906001600160a01b03166122a9565b50565b6002546001600160a01b031681565b611e1c611e97565b6000546001600160a01b03908116911614611e6c576040805162461bcd60e51b815260206004820181905260248201526000805160206127dd833981519152604482015290519081900360640190fd5b426006556001600755600880546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611ef59085906123a1565b50505050565b6000611f3d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612452565b90505b92915050565b801580611fcc575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015611f9e57600080fd5b505afa158015611fb2573d6000803e3d6000fd5b505050506040513d6020811015611fc857600080fd5b5051155b6120075760405162461bcd60e51b815260040180806020018281038252603681526020018061287e6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526120599084906123a1565b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526120599084906123a1565b600080600460009054906101000a90046001600160a01b031690506000612710905060006121d1826121c5846121c5876001600160a01b031663fdb7039a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561211857600080fd5b505afa15801561212c573d6000803e3d6000fd5b505050506040513d602081101561214257600080fd5b50516040805163ced72f8760e01b815290516112de91620186a0916001600160a01b038d169163ced72f87916004808301926020929190829003018186803b15801561218d57600080fd5b505afa1580156121a1573d6000803e3d6000fd5b505050506040513d60208110156121b757600080fd5b50519063ffffffff6121f616565b9063ffffffff6124e916565b905060006121ec826121c588620186a063ffffffff6121f616565b9695505050505050565b60008261220557506000611f40565b8282028284828161221257fe5b0414611f3d5760405162461bcd60e51b81526004018080602001828103825260218152602001806127bc6021913960400191505060405180910390fd5b600082820183811015611f3d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6122b1611e97565b6000546001600160a01b03908116911614612301576040805162461bcd60e51b815260206004820181905260248201526000805160206127dd833981519152604482015290519081900360640190fd5b6001600160a01b0381166123465760405162461bcd60e51b815260040180806020018281038252602681526020018061276f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce8091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60606123f6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661252b9092919063ffffffff16565b8051909150156120595780806020019051602081101561241557600080fd5b50516120595760405162461bcd60e51b815260040180806020018281038252602a815260200180612854602a913960400191505060405180910390fd5b600081848411156124e15760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156124a657818101518382015260200161248e565b50505050905090810190601f1680156124d35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000611f3d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612542565b606061253a84846000856125a7565b949350505050565b600081836125915760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156124a657818101518382015260200161248e565b50600083858161259d57fe5b0495945050505050565b60606125b285612714565b612603576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106126425780518252601f199092019160209182019101612623565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146126a4576040519150601f19603f3d011682016040523d82523d6000602084013e6126a9565b606091505b509150915081156126bd57915061253a9050565b8051156126cd5780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156124a657818101518382015260200161248e565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061253a57505015159291505056fe4661696c656420666f7220756e6b6e6f776e20726561736f6e20666f72206665654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737354696d656c6f636b206e6f7420616371756972656420666f7220746869732066756e6374696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724661696c656420666f7220756e6b6e6f776e20726561736f6e20666f722073776170457870656374656420666565206d757374206265206c657373207468616e206f7220657175616c20746f207468652061637475616c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a264697066735822122072ab486cd256050834de8e143e1e1a652d53a1015f27772abb49653db632174f64736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001bd435f3c054b6e901b7b108a0ab7617c808677b000000000000000000000000ddd7aa46ab065453429aa747af73fbda97df14f7000000000000000000000000e2567c521ccdf707f0ef804de17b4ec2fcc8a94b00000000000000000000000055d39bae64dcbf66af250db95d82b905fe2ecefb
-----Decoded View---------------
Arg [0] : _router (address): 0x1bD435F3C054b6e901B7b108a0ab7617C808677b
Arg [1] : _partner (address): 0xDDD7aA46ab065453429aa747Af73fbDa97DF14f7
Arg [2] : _ethspent (address): 0xE2567c521CCDf707F0Ef804DE17B4Ec2fcc8a94b
Arg [3] : _treasury (address): 0x55D39BAe64DcBF66AF250Db95D82B905fe2EceFB
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000001bd435f3c054b6e901b7b108a0ab7617c808677b
Arg [1] : 000000000000000000000000ddd7aa46ab065453429aa747af73fbda97df14f7
Arg [2] : 000000000000000000000000e2567c521ccdf707f0ef804de17b4ec2fcc8a94b
Arg [3] : 00000000000000000000000055d39bae64dcbf66af250db95d82b905fe2ecefb
Deployed Bytecode Sourcemap
23652:13804:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;36389:149:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36389:149:0;;;:::i;:::-;;23944:35;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23944:35:0;;;:::i;:::-;;;;-1:-1:-1;;;;;23944:35:0;;;;;;;;;;;;;;36193:184;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36193:184:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36193:184:0;-1:-1:-1;;;;;36193:184:0;;:::i;23857:36::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23857:36:0;;;:::i;36836:144::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36836:144:0;;;:::i;23900:37::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23900:37:0;;;:::i;27955:6558::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;27955:6558:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27955:6558:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27955:6558:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;27955:6558:0;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27955:6558:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27955:6558:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;27955:6558:0;;-1:-1:-1;27955:6558:0;-1:-1:-1;27955:6558:0;:::i;20314:89::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20314:89:0;;;:::i;24903:2954::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;24903:2954:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;24903:2954:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24903:2954:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;24903:2954:0;;-1:-1:-1;24903:2954:0;-1:-1:-1;24903:2954:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37085:182;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37085:182:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37085:182:0;-1:-1:-1;;;;;37085:182:0;;:::i;37279:145::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37279:145:0;;;:::i;36644:180::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36644:180:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36644:180:0;-1:-1:-1;;;;;36644:180:0;;:::i;35939:139::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35939:139:0;;;:::i;23814:36::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23814:36:0;;;:::i;35741:186::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35741:186:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35741:186:0;-1:-1:-1;;;;;35741:186:0;;:::i;36389:149::-;20556:12;:10;:12::i;:::-;20541:11;;-1:-1:-1;;;;;20541:11:0;;;:27;;;20533:72;;;;;-1:-1:-1;;;20533:72:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20533:72:0;;;;;;;;;;;;;;;36474:1:::1;35426:5;35409:13;;:22;35401:74;;;;-1:-1:-1::0;;;35401:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35502:1;35486:13;:17:::0;35573:14:::1;::::0;35220:5:::1;35573:34;35566:3;:41;;35558:75;;;::::0;;-1:-1:-1;;;35558:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35558:75:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;36513:17:0::2;::::0;36488:22:::2;:42:::0;;-1:-1:-1;;;;;;36488:42:0::2;-1:-1:-1::0;;;;;36513:17:0;;::::2;36488:42:::0;;;::::2;::::0;;36389:149::o;23944:35::-;;;-1:-1:-1;;;;;23944:35:0;;:::o;36193:184::-;20556:12;:10;:12::i;:::-;20541:11;;-1:-1:-1;;;;;20541:11:0;;;:27;;;20533:72;;;;;-1:-1:-1;;;20533:72:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20533:72:0;;;;;;;;;;;;;;;36299:3:::1;36282:14;:20:::0;36329:1:::1;36313:13;:17:::0;36341::::1;:28:::0;;-1:-1:-1;;;;;;36341:28:0::1;-1:-1:-1::0;;;;;36341:28:0;;;::::1;::::0;;;::::1;::::0;;36193:184::o;23857:36::-;;;-1:-1:-1;;;;;23857:36:0;;:::o;36836:144::-;20556:12;:10;:12::i;:::-;20541:11;;-1:-1:-1;;;;;20541:11:0;;;:27;;;20533:72;;;;;-1:-1:-1;;;20533:72:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20533:72:0;;;;;;;;;;;;;;;36917:1:::1;35426:5;35409:13;;:22;35401:74;;;;-1:-1:-1::0;;;35401:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35502:1;35486:13;:17:::0;35573:14:::1;::::0;35220:5:::1;35573:34;35566:3;:41;;35558:75;;;::::0;;-1:-1:-1;;;35558:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35558:75:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;36955:17:0::2;::::0;36931:21:::2;:41:::0;;-1:-1:-1;;;;;;36931:41:0::2;-1:-1:-1::0;;;;;36955:17:0;;::::2;36931:41:::0;;;::::2;::::0;;36836:144::o;23900:37::-;;;-1:-1:-1;;;;;23900:37:0;;:::o;27955:6558::-;21925:1;22531:7;;:19;;22523:63;;;;;-1:-1:-1;;;22523:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21925:1;22664:7;:18;28502:15:::1;28520:9;28502:27;;28589:1;28577:9;:13;:33;;;;;28609:1;28594:12;:16;28577:33;28569:67;;;::::0;;-1:-1:-1;;;28569:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28569:67:0;;;;;;;;;;;;;::::1;;28667:9;-1:-1:-1::0;;;;;28655:21:0::1;:8;-1:-1:-1::0;;;;;28655:21:0::1;;;28647:53;;;::::0;;-1:-1:-1;;;28647:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28647:53:0;;;;;;;;;;;;;::::1;;28726:12;28719:3;:19;;28711:48;;;::::0;;-1:-1:-1;;;28711:48:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28711:48:0;;;;;;;;;;;;;::::1;;28814:15;-1:-1:-1::0;;;;;28847:23:0;::::1;24031:42;28847:23;28844:630;;28896:41;::::0;;-1:-1:-1;;;28896:41:0;;28931:4:::1;28896:41;::::0;::::1;::::0;;;-1:-1:-1;;;;;28896:26:0;::::1;::::0;::::1;::::0;:41;;;;;::::1;::::0;;;;;;;;:26;:41;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;28896:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28896:41:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28896:41:0;;-1:-1:-1;28952:73:0::1;28986:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;28952:33:0;::::1;::::0;29008:4:::1;29015:9:::0;28952:73:::1;:33;:73;:::i;:::-;29052:41;::::0;;-1:-1:-1;;;29052:41:0;;29087:4:::1;29052:41;::::0;::::1;::::0;;;:54:::1;::::0;29098:7;;-1:-1:-1;;;;;29052:26:0;::::1;::::0;::::1;::::0;:41;;;;;::::1;::::0;;;;;;;;:26;:41;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;29052:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29052:41:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29052:41:0;;:54:::1;:45;:54;:::i;:::-;29040:66;;29159:93;29202:21;;;;;;;;;-1:-1:-1::0;;;;;29202:21:0::1;-1:-1:-1::0;;;;;29188:58:0::1;;:60;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29188:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29188:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29188:60:0;-1:-1:-1;;;;;29159:28:0;::::1;::::0;29250:1:::1;29159:93;:28;:93;:::i;:::-;29310:21;::::0;29296:60:::1;::::0;;-1:-1:-1;;;29296:60:0;;;;29267:101:::1;::::0;-1:-1:-1;;;;;29310:21:0::1;::::0;29296:58:::1;::::0;:60:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;29310:21;29296:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;29296:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29296:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29296:60:0;-1:-1:-1;;;;;29267:28:0;::::1;::::0;29358:9;29267:101:::1;:28;:101;:::i;:::-;28844:630;;;29420:9;29407;:22;29399:63;;;::::0;;-1:-1:-1;;;29399:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;29555:24:0;::::1;24031:42;29555:24;29552:169;;29605:42;::::0;;-1:-1:-1;;;29605:42:0;;29641:4:::1;29605:42;::::0;::::1;::::0;;;-1:-1:-1;;;;;29605:27:0;::::1;::::0;::::1;::::0;:42;;;;;::::1;::::0;;;;;;;;:27;:42;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;29605:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29605:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29605:42:0;;-1:-1:-1;29552:169:0::1;;;-1:-1:-1::0;29688:21:0::1;29552:169;29788:21;::::0;:63:::1;::::0;29747:12:::1;::::0;29761:23:::1;::::0;-1:-1:-1;;;;;29788:21:0;;::::1;::::0;29822:9:::1;::::0;29833:17;;;;29788:63;29833:17;;;;29788:63;1:33:-1::1;29788:63:0;::::0;45:16:-1;::::1;::::0;-1:-1;29788:63:0::1;::::0;-1:-1:-1;29788:63:0;;-1:-1:-1;;29788:63:0;;::::1;::::0;;;::::1;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;-1:-1:::0;29746:105:0;;-1:-1:-1;29746:105:0;-1:-1:-1;29869:16:0;29866:628:::1;;29980:17:::0;;:21;29976:503:::1;;30263:10;30257:17;30328:15;30315:10;30311:2;30307:19;30300:44;30207:160;30415:44;;-1:-1:-1::0;;;30415:44:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29976:503;-1:-1:-1::0;;;;;;;30518:23:0;::::1;24031:42;30518:23;30515:297;;30572:41;::::0;;-1:-1:-1;;;30572:41:0;;30607:4:::1;30572:41;::::0;::::1;::::0;;;30557:12:::1;::::0;-1:-1:-1;;;;;30572:26:0;::::1;::::0;::::1;::::0;:41;;;;;::::1;::::0;;;;;;;;;:26;:41;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;30572:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30572:41:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30572:41:0;;-1:-1:-1;30631:8:0;;30628:173:::1;;30736:49;30766:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;30736:29:0;::::1;::::0;30780:4;30736:49:::1;:29;:49;:::i;:::-;30515:297;;30932:17;-1:-1:-1::0;;;;;30967:24:0;::::1;24031:42;30967:24;30964:411;;31019:42;::::0;;-1:-1:-1;;;31019:42:0;;31055:4:::1;31019:42;::::0;::::1;::::0;;;:55:::1;::::0;31066:7;;-1:-1:-1;;;;;31019:27:0;::::1;::::0;::::1;::::0;:42;;;;;::::1;::::0;;;;;;;;:27;:42;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;31019:55:0;31007:67;;30964:411;;;31165:34;:21;31191:7:::0;31165:34:::1;:25;:34;:::i;:::-;31153:46;;24121:42;-1:-1:-1::0;;;;;31258:34:0::1;;31300:21;31258:66;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31258:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31258:66:0;;;;;24121:42;31339:24;;30964:411;31405:1;31393:9;:13;31385:52;;;::::0;;-1:-1:-1;;;31385:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31472:9;31456:12;:25;;31448:91;;;;-1:-1:-1::0;;;31448:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;31553:25:0;::::1;24121:42;31553:25;31550:1776;;31829:21;::::0;31815:60:::1;::::0;;-1:-1:-1;;;31815:60:0;;;;31785:94:::1;::::0;-1:-1:-1;;;;;31829:21:0::1;::::0;31815:58:::1;::::0;:60:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;31829:21;31815:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;31785:94:0;31938:21;::::0;31924:60:::1;::::0;;-1:-1:-1;;;31924:60:0;;;;31894:105:::1;::::0;-1:-1:-1;;;;;31938:21:0::1;::::0;31924:58:::1;::::0;:60:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;31938:21;31924:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;31894:105:0;32024:45;::::0;;-1:-1:-1;;;32024:45:0;;32063:4:::1;32024:45;::::0;::::1;::::0;;;24121:42:::1;::::0;32024:30:::1;::::0;:45;;;;;::::1;::::0;;;;;;;;24121:42;32024:45;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32024:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32024:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32024:45:0;32145:21:::1;::::0;:43:::1;::::0;32024:45;;-1:-1:-1;32104:12:0::1;::::0;32118:23:::1;::::0;-1:-1:-1;;;;;32145:21:0::1;::::0;32172:15;;;;32145:43;32172:15;;;;32145:43;1:33:-1::1;32145:43:0;::::0;45:16:-1;::::1;::::0;-1:-1;32145:43:0::1;::::0;-1:-1:-1;32145:43:0;;-1:-1:-1;;32145:43:0;;::::1;::::0;;;::::1;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;-1:-1:::0;32103:85:0;;-1:-1:-1;32103:85:0;-1:-1:-1;32210:16:0;32207:679:::1;;32329:17:::0;;:21;32325:542:::1;;32632:10;32626:17;32701:15;32688:10;32684:2;32680:19;32673:44;32572:172;32800:43;;-1:-1:-1::0;;;32800:43:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32325:542;-1:-1:-1::0;;32927:45:0::1;::::0;;-1:-1:-1;;;32927:45:0;;32966:4:::1;32927:45;::::0;::::1;::::0;;;:58:::1;::::0;32977:7;;24121:42:::1;::::0;32927:30:::1;::::0;:45;;;;;::::1;::::0;;;;;;;;24121:42;32927:45;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;32927:58:0;33015:42;::::0;;-1:-1:-1;;;33015:42:0;;33051:4:::1;33015:42;::::0;::::1;::::0;;;32915:70;;-1:-1:-1;33000:12:0::1;::::0;-1:-1:-1;;;;;33015:27:0;::::1;::::0;::::1;::::0;:42;;;;;::::1;::::0;;;;;;;;:27;:42;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33015:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33015:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33015:42:0;;-1:-1:-1;33075:8:0;;33072:243:::1;;33272:20;::::0;33241:58:::1;::::0;-1:-1:-1;;;;;33241:30:0;;::::1;::::0;33272:20:::1;33294:4:::0;33241:58:::1;:30;:58;:::i;:::-;31550:1776;;33417:45;::::0;;-1:-1:-1;;;33417:45:0;;33456:4:::1;33417:45;::::0;::::1;::::0;;;33402:12:::1;::::0;24121:42:::1;::::0;33417:30:::1;::::0;:45;;;;;::::1;::::0;;;;;;;;;24121:42;33417:45;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33417:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33417:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33417:45:0;;-1:-1:-1;33480:8:0;;33477:108:::1;;33542:20;::::0;33508:61:::1;::::0;24121:42:::1;::::0;-1:-1:-1;;;;;33542:20:0::1;33564:4:::0;33508:61:::1;:33;:61;:::i;:::-;-1:-1:-1::0;33609:21:0::1;::::0;-1:-1:-1;;;;;33609:21:0::1;:35:::0;33606:900:::1;;33756:21;::::0;-1:-1:-1;;;;;33756:21:0::1;33723:18;33809:30;33829:9:::0;33809:19:::1;:30::i;:::-;33793:46;;33864:39;33891:11;33864:22;33876:9;33864:7:::0;;:22:::1;:11;:22;:::i;:::-;:26:::0;:39:::1;:26;:39;:::i;:::-;33854:49;;33965:6;-1:-1:-1::0;;;;;33965:22:0::1;;33988:12;:10;:12::i;:::-;34002:7;33965:45;;;;;;;;;;;;;-1:-1:-1::0;;;;;33965:45:0::1;-1:-1:-1::0;;;;;33965:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33965:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33965:45:0;;;;34366:6;-1:-1:-1::0;;;;;34366:22:0::1;;34389:12;:10;:12::i;:::-;34403:5;34366:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;34366:43:0::1;-1:-1:-1::0;;;;;34366:43:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34366:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34366:43:0;;;;34429:65;34443:8;34453:9;34464;34475:18;34485:7;34475:5;:9;;:18;;;;:::i;:::-;34429:65;::::0;;-1:-1:-1;;;;;34429:65:0;;::::1;::::0;;;;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;::::1;33606:900;;;-1:-1:-1::0;;21881:1:0;22843:22;;-1:-1:-1;;;;;;;;;;27955:6558:0:o;20314:89::-;20357:7;20384:11;-1:-1:-1;;;;;20384:11:0;20314:89;:::o;24903:2954::-;25283:7;25291;21925:1;22531:7;;:19;;22523:63;;;;;-1:-1:-1;;;22523:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21925:1;22664:7;:18;25324:13;25316:45:::1;;;::::0;;-1:-1:-1;;;25316:45:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25316:45:0;;;;;;;;;;;;;::::1;;25392:9;-1:-1:-1::0;;;;;25380:21:0::1;:8;-1:-1:-1::0;;;;;25380:21:0::1;;;25372:53;;;::::0;;-1:-1:-1;;;25372:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25372:53:0;;;;;;;;;;;;;::::1;;25480:15;-1:-1:-1::0;;;;;25513:23:0;::::1;24031:42;25513:23;25510:630;;25562:41;::::0;;-1:-1:-1;;;25562:41:0;;25597:4:::1;25562:41;::::0;::::1;::::0;;;-1:-1:-1;;;;;25562:26:0;::::1;::::0;::::1;::::0;:41;;;;;::::1;::::0;;;;;;;;:26;:41;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;25562:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25562:41:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25562:41:0;;-1:-1:-1;25618:73:0::1;25652:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;25618:33:0;::::1;::::0;25674:4:::1;25681:9:::0;25618:73:::1;:33;:73;:::i;:::-;25718:41;::::0;;-1:-1:-1;;;25718:41:0;;25753:4:::1;25718:41;::::0;::::1;::::0;;;:54:::1;::::0;25764:7;;-1:-1:-1;;;;;25718:26:0;::::1;::::0;::::1;::::0;:41;;;;;::::1;::::0;;;;;;;;:26;:41;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;25718:54:0;25706:66;;25825:93;25868:21;;;;;;;;;-1:-1:-1::0;;;;;25868:21:0::1;-1:-1:-1::0;;;;;25854:58:0::1;;:60;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25854:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25854:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25854:60:0;-1:-1:-1;;;;;25825:28:0;::::1;::::0;25916:1:::1;25825:93;:28;:93;:::i;:::-;25976:21;::::0;25962:60:::1;::::0;;-1:-1:-1;;;25962:60:0;;;;25933:101:::1;::::0;-1:-1:-1;;;;;25976:21:0::1;::::0;25962:58:::1;::::0;:60:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;25976:21;25962:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;25962:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25962:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25962:60:0;-1:-1:-1;;;;;25933:28:0;::::1;::::0;26024:9;25933:101:::1;:28;:101;:::i;:::-;25510:630;;;26086:9;26073;:22;26065:63;;;::::0;;-1:-1:-1;;;26065:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;26221:24:0;::::1;24031:42;26221:24;26218:169;;26271:42;::::0;;-1:-1:-1;;;26271:42:0;;26307:4:::1;26271:42;::::0;::::1;::::0;;;-1:-1:-1;;;;;26271:27:0;::::1;::::0;::::1;::::0;:42;;;;;::::1;::::0;;;;;;;;:27;:42;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;26271:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26271:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26271:42:0;;-1:-1:-1;26218:169:0::1;;;-1:-1:-1::0;26354:21:0::1;26218:169;26454:21;::::0;:63:::1;::::0;26413:12:::1;::::0;26427:23:::1;::::0;-1:-1:-1;;;;;26454:21:0;;::::1;::::0;26488:9:::1;::::0;26499:17;;;;26454:63;26499:17;;;;26454:63;1:33:-1::1;26454:63:0;::::0;45:16:-1;::::1;::::0;-1:-1;26454:63:0::1;::::0;-1:-1:-1;26454:63:0;;-1:-1:-1;;26454:63:0;;::::1;::::0;;;::::1;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;-1:-1:::0;26412:105:0;;-1:-1:-1;26412:105:0;-1:-1:-1;26535:16:0;26532:619:::1;;26646:17:::0;;:21;26642:494:::1;;26929:10;26923:17;26994:15;26981:10;26977:2;26973:19;26966:44;26873:160;27081:35;::::0;;-1:-1:-1;;;27081:35:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;26642:494;-1:-1:-1::0;;;;;;;27175:23:0;::::1;24031:42;27175:23;27172:297;;27229:41;::::0;;-1:-1:-1;;;27229:41:0;;27264:4:::1;27229:41;::::0;::::1;::::0;;;27214:12:::1;::::0;-1:-1:-1;;;;;27229:26:0;::::1;::::0;::::1;::::0;:41;;;;;::::1;::::0;;;;;;;;;:26;:41;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;27229:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27229:41:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27229:41:0;;-1:-1:-1;27288:8:0;;27285:173:::1;;27393:49;27423:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;27393:29:0;::::1;::::0;27437:4;27393:49:::1;:29;:49;:::i;:::-;27172:297;;27528:17;-1:-1:-1::0;;;;;27563:24:0;::::1;24031:42;27563:24;27560:199;;27615:42;::::0;;-1:-1:-1;;;27615:42:0;;27651:4:::1;27615:42;::::0;::::1;::::0;;;:55:::1;::::0;27662:7;;-1:-1:-1;;;;;27615:27:0;::::1;::::0;::::1;::::0;:42;;;;;::::1;::::0;;;;;;;;:27;:42;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;27615:55:0;27603:67;;27560:199;;;27713:34;:21;27739:7:::0;27713:34:::1;:25;:34;:::i;:::-;27701:46;;27560:199;21881:1:::0;22843:22;;27777:9;27788:3:::1;::::0;-1:-1:-1;24903:2954:0;-1:-1:-1;;;;;;;24903:2954:0:o;37085:182::-;20556:12;:10;:12::i;:::-;20541:11;;-1:-1:-1;;;;;20541:11:0;;;:27;;;20533:72;;;;;-1:-1:-1;;;20533:72:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20533:72:0;;;;;;;;;;;;;;;37189:3:::1;37172:14;:20:::0;37219:1:::1;37203:13;:17:::0;37231::::1;:28:::0;;-1:-1:-1;;;;;;37231:28:0::1;-1:-1:-1::0;;;;;37231:28:0;;;::::1;::::0;;;::::1;::::0;;37085:182::o;37279:145::-;20556:12;:10;:12::i;:::-;20541:11;;-1:-1:-1;;;;;20541:11:0;;;:27;;;20533:72;;;;;-1:-1:-1;;;20533:72:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20533:72:0;;;;;;;;;;;;;;;37362:1:::1;35426:5;35409:13;;:22;35401:74;;;;-1:-1:-1::0;;;35401:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35502:1;35486:13;:17:::0;35573:14:::1;::::0;35220:5:::1;35573:34;35566:3;:41;;35558:75;;;::::0;;-1:-1:-1;;;35558:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35558:75:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;37399:17:0::2;::::0;37376:20:::2;:40:::0;;-1:-1:-1;;;;;;37376:40:0::2;-1:-1:-1::0;;;;;37399:17:0;;::::2;37376:40:::0;;;::::2;::::0;;37279:145::o;36644:180::-;20556:12;:10;:12::i;:::-;20541:11;;-1:-1:-1;;;;;20541:11:0;;;:27;;;20533:72;;;;;-1:-1:-1;;;20533:72:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20533:72:0;;;;;;;;;;;;;;;36746:3:::1;36729:14;:20:::0;36776:1:::1;36760:13;:17:::0;36788::::1;:28:::0;;-1:-1:-1;;;;;;36788:28:0::1;-1:-1:-1::0;;;;;36788:28:0;;;::::1;::::0;;;::::1;::::0;;36644:180::o;35939:139::-;20556:12;:10;:12::i;:::-;20541:11;;-1:-1:-1;;;;;20541:11:0;;;:27;;;20533:72;;;;;-1:-1:-1;;;20533:72:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20533:72:0;;;;;;;;;;;;;;;36019:1:::1;35426:5;35409:13;;:22;35401:74;;;;-1:-1:-1::0;;;35401:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35502:1;35486:13;:17:::0;35573:14:::1;::::0;35220:5:::1;35573:34;35566:3;:41;;35558:75;;;::::0;;-1:-1:-1;;;35558:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35558:75:0;;;;;;;;;;;;;::::1;;36052:17:::2;::::0;36033:37:::2;::::0;-1:-1:-1;;;;;36052:17:0::2;36033:18;:37::i;:::-;20616:1:::1;35939:139::o:0;23814:36::-;;;-1:-1:-1;;;;;23814:36:0;;:::o;35741:186::-;20556:12;:10;:12::i;:::-;20541:11;;-1:-1:-1;;;;;20541:11:0;;;:27;;;20533:72;;;;;-1:-1:-1;;;20533:72:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20533:72:0;;;;;;;;;;;;;;;35842:3:::1;35825:14;:20:::0;35872:1:::1;35856:13;:17:::0;35884::::1;:28:::0;;-1:-1:-1;;;;;;35884:28:0::1;-1:-1:-1::0;;;;;35884:28:0;;;::::1;::::0;;;::::1;::::0;;35741:186::o;18858:106::-;18946:10;18858:106;:::o;15348:205::-;15476:68;;;-1:-1:-1;;;;;15476:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15476:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;15449:96:0;;15469:5;;15449:19;:96::i;:::-;15348:205;;;;:::o;4279:136::-;4337:7;4364:43;4368:1;4371;4364:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4357:50;;4279:136;;;;;:::o;15822:622::-;16192:10;;;16191:62;;-1:-1:-1;16208:39:0;;;-1:-1:-1;;;16208:39:0;;16232:4;16208:39;;;;-1:-1:-1;;;;;16208:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;2:2:-1;;;;27:1;24;17:12;2:2;16208:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16208:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16208:39:0;:44;16191:62;16183:152;;;;-1:-1:-1;;;16183:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16373:62;;;-1:-1:-1;;;;;16373:62:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;16373:62:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;16346:90:0;;16366:5;;16346:19;:90::i;:::-;15822:622;;;:::o;15163:177::-;15273:58;;;-1:-1:-1;;;;;15273:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15273:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;15246:86:0;;15266:5;;15246:19;:86::i;34525:439::-;34596:7;34616:19;34650:22;;;;;;;;;-1:-1:-1;;;;;34650:22:0;34616:57;;34684:24;34711:5;34684:32;;34727:18;34748:112;34843:16;34748:90;34821:16;34748:68;34790:7;-1:-1:-1;;;;;34790:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34790:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34790:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34790:25:0;34748:16;;;-1:-1:-1;;;34748:16:0;;;;:37;;24206:6;;-1:-1:-1;;;;;34748:14:0;;;;;:16;;;;;34790:25;;34748:16;;;;;;;:14;:16;;;2:2:-1;;;;27:1;24;17:12;2:2;34748:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34748:16:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34748:16:0;;:37;:20;:37;:::i;:68::-;:72;:90;:72;:90;:::i;:112::-;34727:133;-1:-1:-1;34871:13:0;34887:46;34727:133;34887:30;:9;24206:6;34887:30;:13;:30;:::i;:46::-;34871:62;34525:439;-1:-1:-1;;;;;;34525:439:0:o;5169:471::-;5227:7;5472:6;5468:47;;-1:-1:-1;5502:1:0;5495:8;;5468:47;5539:5;;;5543:1;5539;:5;:1;5563:5;;;;;:10;5555:56;;;;-1:-1:-1;;;5555:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3815:181;3873:7;3905:5;;;3929:6;;;;3921:46;;;;;-1:-1:-1;;;3921:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20780:263;20556:12;:10;:12::i;:::-;20541:11;;-1:-1:-1;;;;;20541:11:0;;;:27;;;20533:72;;;;;-1:-1:-1;;;20533:72:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20533:72:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20877:22:0;::::1;20869:73;;;;-1:-1:-1::0;;;20869:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20980:11;::::0;;20958:44:::1;::::0;-1:-1:-1;;;;;20958:44:0;;::::1;::::0;20980:11;::::1;::::0;20958:44:::1;::::0;::::1;21013:11;:22:::0;;-1:-1:-1;;;;;;21013:22:0::1;-1:-1:-1::0;;;;;21013:22:0;;;::::1;::::0;;;::::1;::::0;;20780:263::o;17468:761::-;17892:23;17918:69;17946:4;17918:69;;;;;;;;;;;;;;;;;17926:5;-1:-1:-1;;;;;17918:27:0;;;:69;;;;;:::i;:::-;18002:17;;17892:95;;-1:-1:-1;18002:21:0;17998:224;;18144:10;18133:30;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18133:30:0;18125:85;;;;-1:-1:-1;;;18125:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4718:192;4804:7;4840:12;4832:6;;;;4824:29;;;;-1:-1:-1;;;4824:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4824:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4876:5:0;;;4718:192::o;6116:132::-;6174:7;6201:39;6205:1;6208;6201:39;;;;;;;;;;;;;;;;;:3;:39::i;12152:196::-;12255:12;12287:53;12310:6;12318:4;12324:1;12327:12;12287:22;:53::i;:::-;12280:60;12152:196;-1:-1:-1;;;;12152:196:0:o;6744:278::-;6830:7;6865:12;6858:5;6850:28;;;;-1:-1:-1;;;6850:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6850:28:0;;6889:9;6905:1;6901;:5;;;;;;;6744:278;-1:-1:-1;;;;;6744:278:0:o;13529:979::-;13659:12;13692:18;13703:6;13692:10;:18::i;:::-;13684:60;;;;;-1:-1:-1;;;13684:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13818:12;13832:23;13859:6;-1:-1:-1;;;;;13859:11:0;13879:8;13890:4;13859:36;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;13859:36:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;13817:78:0;;;;13910:7;13906:595;;;13941:10;-1:-1:-1;13934:17:0;;-1:-1:-1;13934:17:0;13906:595;14055:17;;:21;14051:439;;14318:10;14312:17;14379:15;14366:10;14362:2;14358:19;14351:44;14266:148;14454:20;;-1:-1:-1;;;14454:20:0;;;;;;;;;;;;;;;;;14461:12;;14454:20;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;9037:619:0;9097:4;9565:20;;9408:66;9605:23;;;;;;:42;;-1:-1:-1;;9632:15:0;;;9597:51;-1:-1:-1;;9037:619:0:o
Swarm Source
ipfs://72ab486cd256050834de8e143e1e1a652d53a1015f27772abb49653db632174f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.