Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 13 from a total of 13 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Push Management | 18729984 | 382 days ago | IN | 0 ETH | 0.00182985 | ||||
Push Management | 18729883 | 382 days ago | IN | 0 ETH | 0.00314885 | ||||
Toggle | 18729414 | 382 days ago | IN | 0 ETH | 0.0032327 | ||||
Queue | 18729414 | 382 days ago | IN | 0 ETH | 0.00220735 | ||||
Queue | 18729413 | 382 days ago | IN | 0 ETH | 0.00308233 | ||||
Toggle | 18729410 | 382 days ago | IN | 0 ETH | 0.00520742 | ||||
Queue | 18729410 | 382 days ago | IN | 0 ETH | 0.00330653 | ||||
Toggle | 18729406 | 382 days ago | IN | 0 ETH | 0.00607825 | ||||
Queue | 18729406 | 382 days ago | IN | 0 ETH | 0.00326099 | ||||
Toggle | 18729403 | 382 days ago | IN | 0 ETH | 0.00586296 | ||||
Queue | 18729403 | 382 days ago | IN | 0 ETH | 0.00312871 | ||||
Toggle | 18729399 | 382 days ago | IN | 0 ETH | 0.0060791 | ||||
Queue | 18729395 | 382 days ago | IN | 0 ETH | 0.00338977 |
Latest 11 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
18819485 | 370 days ago | 25 ETH | ||||
18793324 | 374 days ago | 5 ETH | ||||
18792805 | 374 days ago | 30 ETH | ||||
18748851 | 380 days ago | 13.2 ETH | ||||
18735652 | 382 days ago | 2 ETH | ||||
18735648 | 382 days ago | 2 ETH | ||||
18735643 | 382 days ago | 3 ETH | ||||
18734766 | 382 days ago | 3 ETH | ||||
18730061 | 382 days ago | 84 ETH | ||||
18730048 | 382 days ago | 1 ETH | ||||
18729970 | 382 days ago | 1 ETH |
Loading...
Loading
Contract Name:
SyncusTreasury
Compiler Version
v0.7.5+commit.eb77ed08
Optimization Enabled:
Yes with 200 runs
Other Settings:
istanbul EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; import "./lib/SafeMath.sol"; import "./lib/Address.sol"; import "./lib/IERC20.sol"; import "./lib/SafeERC20.sol"; import "./lib/ISyncus.sol"; import "./lib/IERC20Mintable.sol"; import "./lib/ISyncusCalculator.sol"; import "./lib/IOwnable.sol"; import "./OwnableManagement.sol"; contract SyncusTreasury is OwnableManagement { using SafeMath for uint; using SafeMath for uint32; using SafeERC20 for IERC20; event Deposit(address indexed token, uint amount, uint value); event Withdrawal(address indexed token, uint amount, uint value); event CreateDebt( address indexed debtor, address indexed token, uint amount, uint value ); event RepayDebt( address indexed debtor, address indexed token, uint amount, uint value ); event ReservesManaged(address indexed token, uint amount); event ReservesUpdated(uint indexed totalReserves); event ReservesAudited(uint indexed totalReserves); event RewardsMinted( address indexed caller, address indexed recipient, uint amount ); event ChangeQueued(MANAGING indexed managing, address queued); event ChangeActivated( MANAGING indexed managing, address activated, bool result ); enum MANAGING { RESERVEDEPOSITOR, RESERVESPENDER, RESERVETOKEN, RESERVEMANAGER, LIQUIDITYDEPOSITOR, LIQUIDITYTOKEN, LIQUIDITYMANAGER, DEBTOR, REWARDMANAGER, VESYNC } address public immutable Sync; uint32 public secondsNeededForQueue; address[] public reserveTokens; // Push only, beware false-positives. mapping(address => bool) public isReserveToken; mapping(address => uint32) public reserveTokenQueue; // Delays changes to mapping. address[] public reserveDepositors; // Push only, beware false-positives. Only for viewing. mapping(address => bool) public isReserveDepositor; mapping(address => uint32) public reserveDepositorQueue; // Delays changes to mapping. address[] public reserveSpenders; // Push only, beware false-positives. Only for viewing. mapping(address => bool) public isReserveSpender; mapping(address => uint32) public reserveSpenderQueue; // Delays changes to mapping. address[] public liquidityTokens; // Push only, beware false-positives. mapping(address => bool) public isLiquidityToken; mapping(address => uint32) public LiquidityTokenQueue; // Delays changes to mapping. address[] public liquidityDepositors; // Push only, beware false-positives. Only for viewing. mapping(address => bool) public isLiquidityDepositor; mapping(address => uint32) public LiquidityDepositorQueue; // Delays changes to mapping. mapping(address => address) public syncusCalculator; // calculator for liquidity token address[] public reserveManagers; // Push only, beware false-positives. Only for viewing. mapping(address => bool) public isReserveManager; mapping(address => uint32) public ReserveManagerQueue; // Delays changes to mapping. address[] public liquidityManagers; // Push only, beware false-positives. Only for viewing. mapping(address => bool) public isLiquidityManager; mapping(address => uint32) public LiquidityManagerQueue; // Delays changes to mapping. address[] public debtors; // Push only, beware false-positives. Only for viewing. mapping(address => bool) public isDebtor; mapping(address => uint32) public debtorQueue; // Delays changes to mapping. mapping(address => uint) public debtorBalance; address[] public rewardManagers; // Push only, beware false-positives. Only for viewing. mapping(address => bool) public isRewardManager; mapping(address => uint32) public rewardManagerQueue; // Delays changes to mapping. address public veSYNC; uint public veSYNCQueue; // Delays change to veSYNC address uint public totalReserves; // Risk-free value of all assets uint public totalDebt; bool isBackingEnabled = false; receive() external payable {} constructor(address _Sync, address _USDC, address _etherCalculator) { require(_Sync != address(0)); require(_USDC != address(0)); require(_etherCalculator != address(0)); Sync = _Sync; isReserveToken[_USDC] = true; reserveTokens.push(_USDC); syncusCalculator[address(0)] = _etherCalculator; } /** @notice allow approved address to deposit an asset for SYNC @param _amount uint @param _token address @param _profit uint @return send_ uint */ function deposit( uint _amount, address _token, uint _profit //profit in SYNC, 9 decimals needed ) external returns (uint send_) { require( isReserveToken[_token] || isLiquidityToken[_token], "Not accepted" ); IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount); if (isReserveToken[_token]) { require(isReserveDepositor[msg.sender], "Not approved"); } else { require(isLiquidityDepositor[msg.sender], "Not approved"); } uint value = valueOf(_token, _amount); // mint SYNC needed and store amount of rewards for distribution send_ = value.sub(_profit); IERC20Mintable(Sync).mint(msg.sender, send_); totalReserves = totalReserves.add(value); emit ReservesUpdated(totalReserves); emit Deposit(_token, _amount, value); } /** @notice allow approved address to burn SYNC for reserves @param _amount uint @param _token address */ function withdraw(uint _amount, address _token) external { require(isReserveToken[_token], "Not accepted"); // Only reserves can be used for redemptions require(isReserveSpender[msg.sender] == true, "Not approved"); uint value = valueOf(_token, _amount); ISyncus(Sync).burnFrom(msg.sender, value); totalReserves = totalReserves.sub(value); emit ReservesUpdated(totalReserves); IERC20(_token).safeTransfer(msg.sender, _amount); emit Withdrawal(_token, _amount, value); } /** @notice allow approved address to borrow reserves @param _amount uint @param _token address */ function incurDebt(uint _amount, address _token) external { require(isDebtor[msg.sender], "Not approved"); require(isReserveToken[_token], "Not accepted"); uint value = valueOf(_token, _amount); uint maximumDebt = IERC20(veSYNC).balanceOf(msg.sender); // Can only borrow against veSYNC held uint availableDebt = maximumDebt.sub(debtorBalance[msg.sender]); require(value <= availableDebt, "Exceeds debt limit"); debtorBalance[msg.sender] = debtorBalance[msg.sender].add(value); totalDebt = totalDebt.add(value); totalReserves = totalReserves.sub(value); emit ReservesUpdated(totalReserves); IERC20(_token).transfer(msg.sender, _amount); emit CreateDebt(msg.sender, _token, _amount, value); } /** @notice allow approved address to repay borrowed reserves with reserves @param _amount uint @param _token address */ function repayDebtWithReserve(uint _amount, address _token) external { require(isDebtor[msg.sender], "Not approved"); require(isReserveToken[_token], "Not accepted"); IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount); uint value = valueOf(_token, _amount); debtorBalance[msg.sender] = debtorBalance[msg.sender].sub(value); totalDebt = totalDebt.sub(value); totalReserves = totalReserves.add(value); emit ReservesUpdated(totalReserves); emit RepayDebt(msg.sender, _token, _amount, value); } /** @notice allow approved address to repay borrowed reserves with SYNC @param _amount uint */ function repayDebtWithSYNC(uint _amount) external { require(isDebtor[msg.sender], "Not approved"); ISyncus(Sync).burnFrom(msg.sender, _amount); debtorBalance[msg.sender] = debtorBalance[msg.sender].sub(_amount); totalDebt = totalDebt.sub(_amount); emit RepayDebt(msg.sender, Sync, _amount, _amount); } /** @notice allow approved address to withdraw assets @param _token address @param _amount uint */ function manage(address _token, uint _amount) external { if (isLiquidityToken[_token]) { require(isLiquidityManager[msg.sender], "Not approved"); } else { require(isReserveManager[msg.sender], "Not approved"); } uint value = valueOf(_token, _amount); if (isBackingEnabled) { require(value <= excessReserves(), "Insufficient reserves"); } totalReserves = totalReserves.sub(value); emit ReservesUpdated(totalReserves); IERC20(_token).safeTransfer(msg.sender, _amount); emit ReservesManaged(_token, _amount); } /** @notice send epoch reward to staking contract */ function mintRewards(address _recipient, uint _amount) external { require(isRewardManager[msg.sender], "Not approved"); if (isBackingEnabled) { require(_amount <= excessReserves(), "Insufficient reserves"); } IERC20Mintable(Sync).mint(_recipient, _amount); emit RewardsMinted(msg.sender, _recipient, _amount); } /** @notice returns excess reserves not backing tokens @return uint */ function excessReserves() public view returns (uint) { uint supply = IERC20(Sync).totalSupply().sub(totalDebt); if (supply > totalReserves) { return 0; } return totalReserves.sub(supply); } /** @notice takes inventory of all tracked assets @notice always consolidate to recognized reserves before audit */ function auditReserves() external onlyManager { uint reserves; for (uint i = 0; i < reserveTokens.length; i++) { reserves = reserves.add( valueOf( reserveTokens[i], IERC20(reserveTokens[i]).balanceOf(address(this)) ) ); } for (uint i = 0; i < liquidityTokens.length; i++) { reserves = reserves.add( valueOf( liquidityTokens[i], IERC20(liquidityTokens[i]).balanceOf(address(this)) ) ); } reserves = reserves.add(valueOf(address(0), address(this).balance)); totalReserves = reserves; emit ReservesUpdated(reserves); emit ReservesAudited(reserves); } /** @notice returns SYNC valuation of asset @param _token address @param _amount uint @return value_ uint */ function valueOf( address _token, uint _amount ) public view returns (uint value_) { if (_token == address(0)) { value_ = ISyncusCalculator(syncusCalculator[_token]).valuationEther( _amount ); } else if (isReserveToken[_token]) { // convert amount to match SYNC decimals value_ = _amount.mul(10 ** IERC20(Sync).decimals()).div( 10 ** IERC20(_token).decimals() ); } else if (isLiquidityToken[_token]) { value_ = ISyncusCalculator(syncusCalculator[_token]).valuation( _token, _amount ); } } /** @notice queue address to change boolean in mapping @param _managing MANAGING @param _address address @return bool */ function queue( MANAGING _managing, address _address ) external onlyManager returns (bool) { require(_address != address(0)); if (_managing == MANAGING.RESERVEDEPOSITOR) { // 0 reserveDepositorQueue[_address] = uint32(block.timestamp).add32( secondsNeededForQueue ); } else if (_managing == MANAGING.RESERVESPENDER) { // 1 reserveSpenderQueue[_address] = uint32(block.timestamp).add32( secondsNeededForQueue ); } else if (_managing == MANAGING.RESERVETOKEN) { // 2 reserveTokenQueue[_address] = uint32(block.timestamp).add32( secondsNeededForQueue ); } else if (_managing == MANAGING.RESERVEMANAGER) { // 3 ReserveManagerQueue[_address] = uint32(block.timestamp).add32( secondsNeededForQueue.mul32(2) ); } else if (_managing == MANAGING.LIQUIDITYDEPOSITOR) { // 4 LiquidityDepositorQueue[_address] = uint32(block.timestamp).add32( secondsNeededForQueue ); } else if (_managing == MANAGING.LIQUIDITYTOKEN) { // 5 LiquidityTokenQueue[_address] = uint32(block.timestamp).add32( secondsNeededForQueue ); } else if (_managing == MANAGING.LIQUIDITYMANAGER) { // 6 LiquidityManagerQueue[_address] = uint32(block.timestamp).add32( secondsNeededForQueue.mul32(2) ); } else if (_managing == MANAGING.DEBTOR) { // 7 debtorQueue[_address] = uint32(block.timestamp).add32( secondsNeededForQueue ); } else if (_managing == MANAGING.REWARDMANAGER) { // 8 rewardManagerQueue[_address] = uint32(block.timestamp).add32( secondsNeededForQueue ); } else if (_managing == MANAGING.VESYNC) { // 9 veSYNCQueue = uint32(block.timestamp).add32(secondsNeededForQueue); } else return false; emit ChangeQueued(_managing, _address); return true; } /** @notice verify queue then set boolean in mapping @param _managing MANAGING @param _address address @param _calculator address @return bool */ function toggle( MANAGING _managing, address _address, address _calculator ) external onlyManager returns (bool) { require(_address != address(0)); bool result; if (_managing == MANAGING.RESERVEDEPOSITOR) { // 0 if ( requirements( reserveDepositorQueue, isReserveDepositor, _address ) ) { reserveDepositorQueue[_address] = 0; if (!listContains(reserveDepositors, _address)) { reserveDepositors.push(_address); } } result = !isReserveDepositor[_address]; isReserveDepositor[_address] = result; } else if (_managing == MANAGING.RESERVESPENDER) { // 1 if (requirements(reserveSpenderQueue, isReserveSpender, _address)) { reserveSpenderQueue[_address] = 0; if (!listContains(reserveSpenders, _address)) { reserveSpenders.push(_address); } } result = !isReserveSpender[_address]; isReserveSpender[_address] = result; } else if (_managing == MANAGING.RESERVETOKEN) { // 2 if (requirements(reserveTokenQueue, isReserveToken, _address)) { reserveTokenQueue[_address] = 0; if (!listContains(reserveTokens, _address)) { reserveTokens.push(_address); } } result = !isReserveToken[_address]; isReserveToken[_address] = result; } else if (_managing == MANAGING.RESERVEMANAGER) { // 3 if (requirements(ReserveManagerQueue, isReserveManager, _address)) { reserveManagers.push(_address); ReserveManagerQueue[_address] = 0; if (!listContains(reserveManagers, _address)) { reserveManagers.push(_address); } } result = !isReserveManager[_address]; isReserveManager[_address] = result; } else if (_managing == MANAGING.LIQUIDITYDEPOSITOR) { // 4 if ( requirements( LiquidityDepositorQueue, isLiquidityDepositor, _address ) ) { liquidityDepositors.push(_address); LiquidityDepositorQueue[_address] = 0; if (!listContains(liquidityDepositors, _address)) { liquidityDepositors.push(_address); } } result = !isLiquidityDepositor[_address]; isLiquidityDepositor[_address] = result; } else if (_managing == MANAGING.LIQUIDITYTOKEN) { // 5 if (requirements(LiquidityTokenQueue, isLiquidityToken, _address)) { LiquidityTokenQueue[_address] = 0; if (!listContains(liquidityTokens, _address)) { liquidityTokens.push(_address); } } result = !isLiquidityToken[_address]; isLiquidityToken[_address] = result; syncusCalculator[_address] = _calculator; } else if (_managing == MANAGING.LIQUIDITYMANAGER) { // 6 if ( requirements( LiquidityManagerQueue, isLiquidityManager, _address ) ) { LiquidityManagerQueue[_address] = 0; if (!listContains(liquidityManagers, _address)) { liquidityManagers.push(_address); } } result = !isLiquidityManager[_address]; isLiquidityManager[_address] = result; } else if (_managing == MANAGING.DEBTOR) { // 7 if (requirements(debtorQueue, isDebtor, _address)) { debtorQueue[_address] = 0; if (!listContains(debtors, _address)) { debtors.push(_address); } } result = !isDebtor[_address]; isDebtor[_address] = result; } else if (_managing == MANAGING.REWARDMANAGER) { // 8 if (requirements(rewardManagerQueue, isRewardManager, _address)) { rewardManagerQueue[_address] = 0; if (!listContains(rewardManagers, _address)) { rewardManagers.push(_address); } } result = !isRewardManager[_address]; isRewardManager[_address] = result; } else if (_managing == MANAGING.VESYNC) { // 9 veSYNCQueue = 0; veSYNC = _address; result = true; } else return false; emit ChangeActivated(_managing, _address, result); return true; } /** @notice checks requirements and returns altered structs @param queue_ mapping( address => uint ) @param status_ mapping( address => bool ) @param _address address @return bool */ function requirements( mapping(address => uint32) storage queue_, mapping(address => bool) storage status_, address _address ) internal view returns (bool) { if (!status_[_address]) { require(queue_[_address] != 0, "Must queue"); require( queue_[_address] <= uint32(block.timestamp), "Queue not expired" ); return true; } return false; } /** @notice checks array to ensure against duplicate @param _list address[] @param _token address @return bool */ function listContains( address[] storage _list, address _token ) internal view returns (bool) { for (uint i = 0; i < _list.length; i++) { if (_list[i] == _token) { return true; } } return false; } function setEtherCalculator(address _calculator) external onlyManager { syncusCalculator[address(0)] = _calculator; } function setIsBackingEnabled(bool _isBackingEnabled) external onlyManager { isBackingEnabled = _isBackingEnabled; } function withdrawEther(uint _amount) external onlyManager { msg.sender.transfer(_amount); } // sync taxes and lost tokens function withdrawToken(address _token, uint _amount) external onlyManager { IERC20(_token).safeTransfer(msg.sender, _amount); } function emergencyWithdrawEther(address _recipient) external onlyManager { require(_recipient != address(0), "Invalid recipient address"); uint balance = address(this).balance; (bool success, ) = _recipient.call{value: balance}(""); require(success, "Transfer failed"); } }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function add32(uint32 a, uint32 b) internal pure returns (uint32) { uint32 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function sub32(uint32 a, uint32 b) internal pure returns (uint32) { return sub32(a, b, "SafeMath: subtraction overflow"); } function sub32( uint32 a, uint32 b, string memory errorMessage ) internal pure returns (uint32) { require(b <= a, errorMessage); uint32 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function mul32(uint32 a, uint32 b) internal pure returns (uint32) { if (a == 0) { return 0; } uint32 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by 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; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } function sqrrt(uint256 a) internal pure returns (uint c) { if (a > 3) { c = a; uint b = add(div(a, 2), 1); while (b < c) { c = b; b = div(add(div(a, b), b), 2); } } else if (a != 0) { c = 1; } } function percentageAmount( uint256 total_, uint8 percentage_ ) internal pure returns (uint256 percentAmount_) { return div(mul(total_, percentage_), 1000); } function substractPercentage( uint256 total_, uint8 percentageToSub_ ) internal pure returns (uint256 result_) { return sub(total_, div(mul(total_, percentageToSub_), 1000)); } function percentageOfTotal( uint256 part_, uint256 total_ ) internal pure returns (uint256 percent_) { return div(mul(part_, 100), total_); } function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + (((a % 2) + (b % 2)) / 2); } function quadraticPricing( uint256 payment_, uint256 multiplier_ ) internal pure returns (uint256) { return sqrrt(mul(multiplier_, payment_)); } function bondingCurve( uint256 supply_, uint256 multiplier_ ) internal pure returns (uint256) { return mul(multiplier_, supply_); } }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} */ 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). * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data ) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: value}( data ); return _verifyCallResult(success, returndata, errorMessage); } 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); } } } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data ) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall( address target, bytes memory data ) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } function addressToString( address _address ) internal pure returns (string memory) { bytes32 _bytes = bytes32(uint256(_address)); bytes memory HEX = "0123456789abcdef"; bytes memory _addr = new bytes(42); _addr[0] = "0"; _addr[1] = "x"; for (uint256 i = 0; i < 20; i++) { _addr[2 + i * 2] = HEX[uint8(_bytes[i + 12] >> 4)]; _addr[3 + i * 2] = HEX[uint8(_bytes[i + 12] & 0x0f)]; } return string(_addr); } }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; interface IERC20 { function decimals() external view returns (uint8); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer( address recipient, uint256 amount ) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance( address owner, address spender ) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; import "./SafeMath.sol"; import "./Address.sol"; import "./IERC20.sol"; 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)); } 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. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "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"); } } }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; interface ISyncus { function burn(uint256 amount) external; function burnFrom(address account_, uint256 amount_) external; }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; interface IERC20Mintable { function mint(uint256 amount_) external; function mint(address account_, uint256 ammount_) external; }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; interface ISyncusCalculator { function valuation( address pair_, uint amount_ ) external view returns (uint _value); function valuationEther(uint amount_) external view returns (uint _value); function markdown(address _pair) external view returns (uint); }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; interface IOwnable { function owner() external view returns (address); function renounceOwnership() external; function transferOwnership(address newOwner_) external; }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; import "./lib/IOwnableManagement.sol"; contract OwnableManagement is IOwnableManagement { address internal _owner; address internal _newOwner; event OwnershipPushed(address indexed previousOwner, address indexed newOwner); event OwnershipPulled(address indexed previousOwner, address indexed newOwner); constructor () { _owner = msg.sender; emit OwnershipPushed( address(0), _owner ); } function manager() public view override returns (address) { return _owner; } modifier onlyManager() { require( _owner == msg.sender, "Ownable: caller is not the owner" ); _; } function renounceManagement() public virtual override onlyManager() { emit OwnershipPushed( _owner, address(0) ); _owner = address(0); } function pushManagement( address newOwner_ ) public virtual override onlyManager() { require( newOwner_ != address(0), "Ownable: new owner is the zero address"); emit OwnershipPushed( _owner, newOwner_ ); _newOwner = newOwner_; } function pullManagement() public virtual override { require( msg.sender == _newOwner, "Ownable: must be new owner to pull"); emit OwnershipPulled( _owner, _newOwner ); _owner = _newOwner; } }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; interface IOwnableManagement { function manager() external view returns (address); function renounceManagement() external; function pushManagement(address newOwner_) external; function pullManagement() external; }
{ "remappings": [ "ds-test/=lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "openzeppelin/=lib/openzeppelin-contracts/contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "istanbul", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_Sync","type":"address"},{"internalType":"address","name":"_USDC","type":"address"},{"internalType":"address","name":"_etherCalculator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum SyncusTreasury.MANAGING","name":"managing","type":"uint8"},{"indexed":false,"internalType":"address","name":"activated","type":"address"},{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"ChangeActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum SyncusTreasury.MANAGING","name":"managing","type":"uint8"},{"indexed":false,"internalType":"address","name":"queued","type":"address"}],"name":"ChangeQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"CreateDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPulled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPushed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"RepayDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalReserves","type":"uint256"}],"name":"ReservesAudited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReservesManaged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalReserves","type":"uint256"}],"name":"ReservesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityDepositorQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityManagerQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityTokenQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ReserveManagerQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sync","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auditReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtorBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtorQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"debtors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_profit","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"send_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"emergencyWithdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"excessReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"incurDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDebtor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveSpender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isRewardManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityDepositors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"manage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pullManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"pushManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum SyncusTreasury.MANAGING","name":"_managing","type":"uint8"},{"internalType":"address","name":"_address","type":"address"}],"name":"queue","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"repayDebtWithReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"repayDebtWithSYNC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveDepositorQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveDepositors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveSpenderQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveSpenders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveTokenQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardManagerQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondsNeededForQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_calculator","type":"address"}],"name":"setEtherCalculator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isBackingEnabled","type":"bool"}],"name":"setIsBackingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"syncusCalculator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum SyncusTreasury.MANAGING","name":"_managing","type":"uint8"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"address","name":"_calculator","type":"address"}],"name":"toggle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"valueOf","outputs":[{"internalType":"uint256","name":"value_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"veSYNC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"veSYNCQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526023805460ff191690553480156200001b57600080fd5b5060405162003faf38038062003faf833981810160405260608110156200004157600080fd5b5080516020820151604092830151600080546001600160a01b031916331780825594519394929391926001600160a01b0316917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908290a36001600160a01b038316620000ad57600080fd5b6001600160a01b038216620000c157600080fd5b6001600160a01b038116620000d557600080fd5b606083901b6001600160601b0319166080526001600160a01b03918216600081815260036020908152604082208054600160ff1990911681179091556002805491820190557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b03199081169094179055818052601190527f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b78054909216928416929092179055911690613dec90620001c3903980610e5f528061120b52806116ee5280611d3a52806121b452806124db5280612b985280612c4c5250613dec6000f3fe60806040526004361061036e5760003560e01c80638f59c727116101c6578063d031370b116100f7578063ebd83cd811610095578063fbfd393b1161006f578063fbfd393b14610ce5578063fc7b9c1814610d29578063fd1ec01014610d3e578063fff9ee8714610d6857610375565b8063ebd83cd814610c4c578063ee4e19a114610c7f578063fb93958814610cb257610375565b8063deeb2b9c116100d1578063deeb2b9c14610b80578063df89b34414610bb3578063e83afee314610be6578063eb28ad3a14610c2257610375565b8063d031370b14610b08578063d796ffb814610b32578063da35e06c14610b6b57610375565b8063ab319c9a11610164578063bc157ac11161013e578063bc157ac114610a37578063bfc706de14610a76578063c24ad43e14610aa2578063cd85641a14610ad557610375565b8063ab319c9a146109a7578063b1bd38b0146109da578063b5b1d56014610a0d57610375565b8063932cc8c3116101a0578063932cc8c3146108d55780639e281a9814610908578063a1210a2d14610941578063a569e5711461097457610375565b80638f59c727146108635780638f6a7b57146108965780638f840ddd146108c057610375565b80634e83423c116102a0578063731681bb1161023e578063827ce38011610218578063827ce380146107be57806386936386146107f1578063869871bf1461080657806387d67dff1461083057610375565b8063731681bb14610748578063788c6c011461075d5780637a8960d8146107a957610375565b806368c31dd51161027a57806368c31dd5146106885780636a20de92146106bb5780636b5e40a7146106f457806370a0502a1461071e57610375565b80634e83423c1461060d578063517bfc60146106405780635a96ac0a1461067357610375565b806312422d231161030d5780633bed33ce116102e75780633bed33ce14610571578063437f79121461059b57806346f68ee9146105c5578063481c6a75146105f857610375565b806312422d23146104ea5780631eec5a9a146105235780632b7ce5001461055c57610375565b8063094a865111610349578063094a8651146104105780630b0eee30146104555780630c3513a81461048e578063124154ca146104a357610375565b8062f714ce1461037a5780630619aff1146103b5578063089208d8146103fb57610375565b3661037557005b600080fd5b34801561038657600080fd5b506103b36004803603604081101561039d57600080fd5b50803590602001356001600160a01b0316610d9b565b005b3480156103c157600080fd5b506103df600480360360208110156103d857600080fd5b5035610f72565b604080516001600160a01b039092168252519081900360200190f35b34801561040757600080fd5b506103b3610f9c565b34801561041c57600080fd5b506104436004803603602081101561043357600080fd5b50356001600160a01b0316611033565b60408051918252519081900360200190f35b34801561046157600080fd5b506103b36004803603604081101561047857600080fd5b506001600160a01b038135169060200135611045565b34801561049a57600080fd5b50610443611200565b3480156104af57600080fd5b506104d6600480360360208110156104c657600080fd5b50356001600160a01b03166112be565b604080519115158252519081900360200190f35b3480156104f657600080fd5b506103b36004803603604081101561050d57600080fd5b50803590602001356001600160a01b03166112d3565b34801561052f57600080fd5b506104436004803603604081101561054657600080fd5b506001600160a01b0381351690602001356115a3565b34801561056857600080fd5b506103b3611832565b34801561057d57600080fd5b506103b36004803603602081101561059457600080fd5b5035611a0d565b3480156105a757600080fd5b506103df600480360360208110156105be57600080fd5b5035611a8b565b3480156105d157600080fd5b506103b3600480360360208110156105e857600080fd5b50356001600160a01b0316611a9b565b34801561060457600080fd5b506103df611b88565b34801561061957600080fd5b506104d66004803603602081101561063057600080fd5b50356001600160a01b0316611b97565b34801561064c57600080fd5b506103df6004803603602081101561066357600080fd5b50356001600160a01b0316611bac565b34801561067f57600080fd5b506103b3611bc7565b34801561069457600080fd5b506104d6600480360360208110156106ab57600080fd5b50356001600160a01b0316611c71565b3480156106c757600080fd5b506103b3600480360360408110156106de57600080fd5b506001600160a01b038135169060200135611c86565b34801561070057600080fd5b506103df6004803603602081101561071757600080fd5b5035611e0b565b34801561072a57600080fd5b506103df6004803603602081101561074157600080fd5b5035611e1b565b34801561075457600080fd5b506103df611e2b565b34801561076957600080fd5b506107906004803603602081101561078057600080fd5b50356001600160a01b0316611e3a565b6040805163ffffffff9092168252519081900360200190f35b3480156107b557600080fd5b50610790611e52565b3480156107ca57600080fd5b506103b3600480360360208110156107e157600080fd5b50356001600160a01b0316611e65565b3480156107fd57600080fd5b50610443611efc565b34801561081257600080fd5b506103df6004803603602081101561082957600080fd5b5035611f02565b34801561083c57600080fd5b506104d66004803603602081101561085357600080fd5b50356001600160a01b0316611f12565b34801561086f57600080fd5b506107906004803603602081101561088657600080fd5b50356001600160a01b0316611f27565b3480156108a257600080fd5b506103df600480360360208110156108b957600080fd5b5035611f3f565b3480156108cc57600080fd5b50610443611f4f565b3480156108e157600080fd5b50610790600480360360208110156108f857600080fd5b50356001600160a01b0316611f55565b34801561091457600080fd5b506103b36004803603604081101561092b57600080fd5b506001600160a01b038135169060200135611f6d565b34801561094d57600080fd5b506104d66004803603602081101561096457600080fd5b50356001600160a01b0316611fce565b34801561098057600080fd5b506104d66004803603602081101561099757600080fd5b50356001600160a01b0316611fe3565b3480156109b357600080fd5b50610790600480360360208110156109ca57600080fd5b50356001600160a01b0316611ff8565b3480156109e657600080fd5b50610790600480360360208110156109fd57600080fd5b50356001600160a01b0316612010565b348015610a1957600080fd5b506103df60048036036020811015610a3057600080fd5b5035612028565b348015610a4357600080fd5b5061044360048036036060811015610a5a57600080fd5b508035906001600160a01b036020820135169060400135612038565b348015610a8257600080fd5b506103b360048036036020811015610a9957600080fd5b503515156122b6565b348015610aae57600080fd5b5061079060048036036020811015610ac557600080fd5b50356001600160a01b0316612316565b348015610ae157600080fd5b5061079060048036036020811015610af857600080fd5b50356001600160a01b031661232e565b348015610b1457600080fd5b506103df60048036036020811015610b2b57600080fd5b5035612346565b348015610b3e57600080fd5b506103b360048036036040811015610b5557600080fd5b50803590602001356001600160a01b0316612356565b348015610b7757600080fd5b506103df6124d9565b348015610b8c57600080fd5b506103b360048036036020811015610ba357600080fd5b50356001600160a01b03166124fd565b348015610bbf57600080fd5b506104d660048036036020811015610bd657600080fd5b50356001600160a01b0316612644565b348015610bf257600080fd5b506104d660048036036040811015610c0957600080fd5b50803560ff1690602001356001600160a01b0316612659565b348015610c2e57600080fd5b506103b360048036036020811015610c4557600080fd5b5035612b1e565b348015610c5857600080fd5b506104d660048036036020811015610c6f57600080fd5b50356001600160a01b0316612c9d565b348015610c8b57600080fd5b506104d660048036036020811015610ca257600080fd5b50356001600160a01b0316612cb2565b348015610cbe57600080fd5b5061079060048036036020811015610cd557600080fd5b50356001600160a01b0316612cc7565b348015610cf157600080fd5b506104d660048036036060811015610d0857600080fd5b5060ff813516906001600160a01b0360208201358116916040013516612cdf565b348015610d3557600080fd5b506104436135f5565b348015610d4a57600080fd5b506103df60048036036020811015610d6157600080fd5b50356135fb565b348015610d7457600080fd5b5061079060048036036020811015610d8b57600080fd5b50356001600160a01b031661360b565b6001600160a01b03811660009081526003602052604090205460ff16610df7576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b3360009081526009602052604090205460ff161515600114610e4f576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610e5b82846115a3565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379cc679033836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610ed457600080fd5b505af1158015610ee8573d6000803e3d6000fd5b5050602154610efa9250905082613623565b6021819055604051600080516020613d6d83398151915290600090a2610f2a6001600160a01b0383163385613665565b604080518481526020810183905281516001600160a01b038516927fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb928290030190a2505050565b60128181548110610f8257600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610fe9576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b601b6020526000908152604090205481565b6001600160a01b0382166000908152600c602052604090205460ff16156110be573360009081526016602052604090205460ff166110b9576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611111565b3360009081526013602052604090205460ff16611111576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b600061111d83836115a3565b60235490915060ff161561117f57611133611200565b81111561117f576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b60215461118c9082613623565b6021819055604051600080516020613d6d83398151915290600090a26111bc6001600160a01b0384163384613665565b6040805183815290516001600160a01b038516917f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80919081900360200190a2505050565b6000806112946022547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561126257600080fd5b505afa158015611276573d6000803e3d6000fd5b505050506040513d602081101561128c57600080fd5b505190613623565b90506021548111156112aa5760009150506112bb565b6021546112b79082613623565b9150505b90565b60066020526000908152604090205460ff1681565b3360009081526019602052604090205460ff16611326576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16611382576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b600061138e82846115a3565b601f54604080516370a0823160e01b815233600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156113df57600080fd5b505afa1580156113f3573d6000803e3d6000fd5b505050506040513d602081101561140957600080fd5b5051336000908152601b60205260408120549192509061142a908390613623565b905080831115611476576040805162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81919589d081b1a5b5a5d60721b604482015290519081900360640190fd5b336000908152601b602052604090205461149090846136b7565b336000908152601b60205260409020556022546114ad90846136b7565b6022556021546114bd9084613623565b6021819055604051600080516020613d6d83398151915290600090a26040805163a9059cbb60e01b81523360048201526024810187905290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b15801561152857600080fd5b505af115801561153c573d6000803e3d6000fd5b505050506040513d602081101561155257600080fd5b5050604080518681526020810185905281516001600160a01b0387169233927f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d6929081900390910190a35050505050565b60006001600160a01b03831661163e576001600160a01b038084166000908152601160209081526040918290205482516325545c6b60e01b81526004810187905292519316926325545c6b926024808201939291829003018186803b15801561160b57600080fd5b505afa15801561161f573d6000803e3d6000fd5b505050506040513d602081101561163557600080fd5b5051905061182c565b6001600160a01b03831660009081526003602052604090205460ff161561177b57611774836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561169b57600080fd5b505afa1580156116af573d6000803e3d6000fd5b505050506040513d60208110156116c557600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a9161176e916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163313ce56791600480820192602092909190829003018186803b15801561173557600080fd5b505afa158015611749573d6000803e3d6000fd5b505050506040513d602081101561175f57600080fd5b5051859060ff16600a0a613711565b9061376a565b905061182c565b6001600160a01b0383166000908152600c602052604090205460ff161561182c576001600160a01b03808416600081815260116020908152604091829020548251634249719f60e01b815260048101949094526024840187905291519190931692634249719f9260448082019391829003018186803b1580156117fd57600080fd5b505afa158015611811573d6000803e3d6000fd5b505050506040513d602081101561182757600080fd5b505190505b92915050565b6000546001600160a01b0316331461187f576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b6000805b6002548110156119575761194d611946600283815481106118a057fe5b600091825260209091200154600280546001600160a01b0390921691859081106118c657fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561191557600080fd5b505afa158015611929573d6000803e3d6000fd5b505050506040513d602081101561193f57600080fd5b50516115a3565b83906136b7565b9150600101611883565b5060005b600b548110156119a85761199e611946600b838154811061197857fe5b600091825260209091200154600b80546001600160a01b0390921691859081106118c657fe5b915060010161195b565b506119be6119b76000476115a3565b82906136b7565b60218190556040519091508190600080516020613d6d83398151915290600090a260405181907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a250565b6000546001600160a01b03163314611a5a576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b604051339082156108fc029083906000818181858888f19350505050158015611a87573d6000803e3d6000fd5b5050565b60088181548110610f8257600080fd5b6000546001600160a01b03163314611ae8576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b6001600160a01b038116611b2d5760405162461bcd60e51b8152600401808060200182810382526026815260200180613ce46026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b601d6020526000908152604090205460ff1681565b6011602052600090815260409020546001600160a01b031681565b6001546001600160a01b03163314611c105760405162461bcd60e51b8152600401808060200182810382526022815260200180613d0a6022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60036020526000908152604090205460ff1681565b336000908152601d602052604090205460ff16611cd9576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b60235460ff1615611d3857611cec611200565b811115611d38576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611daf57600080fd5b505af1158015611dc3573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c9181900360200190a35050565b60058181548110610f8257600080fd5b60158181548110610f8257600080fd5b601f546001600160a01b031681565b60046020526000908152604090205463ffffffff1681565b600154600160a01b900463ffffffff1681565b6000546001600160a01b03163314611eb2576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b6000805260116020527f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b780546001600160a01b0319166001600160a01b0392909216919091179055565b60205481565b60188181548110610f8257600080fd5b60096020526000908152604090205460ff1681565b600d6020526000908152604090205463ffffffff1681565b600e8181548110610f8257600080fd5b60215481565b60076020526000908152604090205463ffffffff1681565b6000546001600160a01b03163314611fba576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b611a876001600160a01b0383163383613665565b600f6020526000908152604090205460ff1681565b600c6020526000908152604090205460ff1681565b60176020526000908152604090205463ffffffff1681565b60146020526000908152604090205463ffffffff1681565b601c8181548110610f8257600080fd5b6001600160a01b03821660009081526003602052604081205460ff168061207757506001600160a01b0383166000908152600c602052604090205460ff165b6120b7576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b6120cc6001600160a01b0384163330876137ac565b6001600160a01b03831660009081526003602052604090205460ff1615612145573360009081526006602052604090205460ff16612140576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b612198565b336000908152600f602052604090205460ff16612198576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b60006121a484866115a3565b90506121b08184613623565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1933846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561222957600080fd5b505af115801561223d573d6000803e3d6000fd5b505060215461224f92509050826136b7565b6021819055604051600080516020613d6d83398151915290600090a2604080518681526020810183905281516001600160a01b038716927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2509392505050565b6000546001600160a01b03163314612303576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b6023805460ff1916911515919091179055565b600a6020526000908152604090205463ffffffff1681565b601a6020526000908152604090205463ffffffff1681565b60028181548110610f8257600080fd5b3360009081526019602052604090205460ff166123a9576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16612405576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b61241a6001600160a01b0382163330856137ac565b600061242682846115a3565b336000908152601b60205260409020549091506124439082613623565b336000908152601b60205260409020556022546124609082613623565b60225560215461247090826136b7565b6021819055604051600080516020613d6d83398151915290600090a2604080518481526020810183905281516001600160a01b0385169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a3505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b0316331461254a576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b6001600160a01b0381166125a5576040805162461bcd60e51b815260206004820152601960248201527f496e76616c696420726563697069656e74206164647265737300000000000000604482015290519081900360640190fd5b60405147906000906001600160a01b0384169083908381818185875af1925050503d80600081146125f2576040519150601f19603f3d011682016040523d82523d6000602084013e6125f7565b606091505b505090508061263f576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b505050565b60166020526000908152604090205460ff1681565b600080546001600160a01b031633146126a7576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b6001600160a01b0382166126ba57600080fd5b60008360098111156126c857fe5b1415612723576001546126ee9063ffffffff42811691600160a01b900481169061380c16565b6001600160a01b0383166000908152600760205260409020805463ffffffff191663ffffffff92909216919091179055612acd565b600183600981111561273157fe5b141561278c576001546127579063ffffffff42811691600160a01b900481169061380c16565b6001600160a01b0383166000908152600a60205260409020805463ffffffff191663ffffffff92909216919091179055612acd565b600283600981111561279a57fe5b14156127f5576001546127c09063ffffffff42811691600160a01b900481169061380c16565b6001600160a01b0383166000908152600460205260409020805463ffffffff191663ffffffff92909216919091179055612acd565b600383600981111561280357fe5b14156128725760015461283d9061282d9063ffffffff600160a01b90910481169060029061386f16565b63ffffffff428116919061380c16565b6001600160a01b0383166000908152601460205260409020805463ffffffff191663ffffffff92909216919091179055612acd565b600483600981111561288057fe5b14156128db576001546128a69063ffffffff42811691600160a01b900481169061380c16565b6001600160a01b0383166000908152601060205260409020805463ffffffff191663ffffffff92909216919091179055612acd565b60058360098111156128e957fe5b14156129445760015461290f9063ffffffff42811691600160a01b900481169061380c16565b6001600160a01b0383166000908152600d60205260409020805463ffffffff191663ffffffff92909216919091179055612acd565b600683600981111561295257fe5b14156129b15760015461297c9061282d9063ffffffff600160a01b90910481169060029061386f16565b6001600160a01b0383166000908152601760205260409020805463ffffffff191663ffffffff92909216919091179055612acd565b60078360098111156129bf57fe5b1415612a1a576001546129e59063ffffffff42811691600160a01b900481169061380c16565b6001600160a01b0383166000908152601a60205260409020805463ffffffff191663ffffffff92909216919091179055612acd565b6008836009811115612a2857fe5b1415612a8357600154612a4e9063ffffffff42811691600160a01b900481169061380c16565b6001600160a01b0383166000908152601e60205260409020805463ffffffff191663ffffffff92909216919091179055612acd565b6009836009811115612a9157fe5b1415612ac557600154612ab79063ffffffff42811691600160a01b900481169061380c16565b63ffffffff16602055612acd565b50600061182c565b826009811115612ad957fe5b604080516001600160a01b038516815290517f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf9181900360200190a250600192915050565b3360009081526019602052604090205460ff16612b71576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6040805163079cc67960e41b81523360048201526024810183905290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916379cc679091604480830192600092919082900301818387803b158015612bdf57600080fd5b505af1158015612bf3573d6000803e3d6000fd5b5050336000908152601b6020526040902054612c129250905082613623565b336000908152601b6020526040902055602254612c2f9082613623565b602255604080518281526020810183905281516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a350565b60136020526000908152604090205460ff1681565b60196020526000908152604090205460ff1681565b601e6020526000908152604090205463ffffffff1681565b600080546001600160a01b03163314612d2d576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b6001600160a01b038316612d4057600080fd5b600080856009811115612d4f57fe5b1415612e1557612d6260076006866138e0565b15612de5576001600160a01b0384166000908152600760205260409020805463ffffffff19169055612d956005856139d9565b612de557600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600660205260409020805460ff81161560ff199091168117909155613597565b6001856009811115612e2357fe5b1415612ee957612e36600a6009866138e0565b15612eb9576001600160a01b0384166000908152600a60205260409020805463ffffffff19169055612e696008856139d9565b612eb957600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600960205260409020805460ff81161560ff199091168117909155613597565b6002856009811115612ef757fe5b1415612fbd57612f0a60046003866138e0565b15612f8d576001600160a01b0384166000908152600460205260409020805463ffffffff19169055612f3d6002856139d9565b612f8d57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600360205260409020805460ff81161560ff199091168117909155613597565b6003856009811115612fcb57fe5b14156130ce57612fde60146013866138e0565b1561309e57601280546001810182557fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0387169081179091556000908152601460205260409020805463ffffffff1916905561304e90856139d9565b61309e57601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601360205260409020805460ff81161560ff199091168117909155613597565b60048560098111156130dc57fe5b14156131df576130ef6010600f866138e0565b156131af57600e80546001810182557fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0387169081179091556000908152601060205260409020805463ffffffff1916905561315f90856139d9565b6131af57600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600f60205260409020805460ff81161560ff199091168117909155613597565b60058560098111156131ed57fe5b14156132d557613200600d600c866138e0565b15613283576001600160a01b0384166000908152600d60205260409020805463ffffffff19169055613233600b856139d9565b61328357600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b038381166000908152600c60209081526040808320805460ff81161560ff199091168117909155601190925290912080546001600160a01b03191692851692909217909155613597565b60068560098111156132e357fe5b14156133a9576132f660176016866138e0565b15613379576001600160a01b0384166000908152601760205260409020805463ffffffff191690556133296015856139d9565b61337957601580546001810182556000919091527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601660205260409020805460ff81161560ff199091168117909155613597565b60078560098111156133b757fe5b141561347d576133ca601a6019866138e0565b1561344d576001600160a01b0384166000908152601a60205260409020805463ffffffff191690556133fd6018856139d9565b61344d57601880546001810182556000919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601960205260409020805460ff81161560ff199091168117909155613597565b600885600981111561348b57fe5b14156135515761349e601e601d866138e0565b15613521576001600160a01b0384166000908152601e60205260409020805463ffffffff191690556134d1601c856139d9565b61352157601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601d60205260409020805460ff81161560ff199091168117909155613597565b600985600981111561355f57fe5b141561358d57506000602055601f80546001600160a01b0319166001600160a01b0385161790556001613597565b60009150506135ee565b8460098111156135a357fe5b604080516001600160a01b0387168152831515602082015281517f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc477929181900390910190a260019150505b9392505050565b60225481565b600b8181548110610f8257600080fd5b60106020526000908152604090205463ffffffff1681565b60006135ee83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a29565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261263f908490613ac0565b6000828201838110156135ee576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000826137205750600061182c565b8282028284828161372d57fe5b04146135ee5760405162461bcd60e51b8152600401808060200182810382526021815260200180613d2c6021913960400191505060405180910390fd5b60006135ee83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c78565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052613806908590613ac0565b50505050565b600082820163ffffffff80851690821610156135ee576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600063ffffffff83166138845750600061182c565b82820263ffffffff808416908086169083168161389d57fe5b0463ffffffff16146135ee5760405162461bcd60e51b8152600401808060200182810382526021815260200180613d2c6021913960400191505060405180910390fd5b6001600160a01b03811660009081526020839052604081205460ff166139cf576001600160a01b03821660009081526020859052604090205463ffffffff1661395d576040805162461bcd60e51b815260206004820152600a6024820152694d75737420717565756560b01b604482015290519081900360640190fd5b6001600160a01b03821660009081526020859052604090205463ffffffff428116911611156139c7576040805162461bcd60e51b8152602060048201526011602482015270145d595d59481b9bdd08195e1c1a5c9959607a1b604482015290519081900360640190fd5b5060016135ee565b5060009392505050565b6000805b83548110156139cf57826001600160a01b03168482815481106139fc57fe5b6000918252602090912001546001600160a01b03161415613a2157600191505061182c565b6001016139dd565b60008184841115613ab85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613a7d578181015183820152602001613a65565b50505050905090810190601f168015613aaa5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b613ad2826001600160a01b0316613cdd565b613b23576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310613b615780518252601f199092019160209182019101613b42565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613bc3576040519150601f19603f3d011682016040523d82523d6000602084013e613bc8565b606091505b509150915081613c1f576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561380657808060200190516020811015613c3b57600080fd5b50516138065760405162461bcd60e51b815260040180806020018281038252602a815260200180613d8d602a913960400191505060405180910390fd5b60008183613cc75760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613a7d578181015183820152602001613a65565b506000838581613cd357fe5b0495945050505050565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657293bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d665361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220fcc4b73b09c26ca06f20c9c3cd807f9c848200607d5d4f7971ab2ad2eee470ea64736f6c63430007050033000000000000000000000000a41d2f8ee4f47d3b860a149765a7df8c3287b7f0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000003aba3807454c4c62a48f13d4725359ba58eea610
Deployed Bytecode
0x60806040526004361061036e5760003560e01c80638f59c727116101c6578063d031370b116100f7578063ebd83cd811610095578063fbfd393b1161006f578063fbfd393b14610ce5578063fc7b9c1814610d29578063fd1ec01014610d3e578063fff9ee8714610d6857610375565b8063ebd83cd814610c4c578063ee4e19a114610c7f578063fb93958814610cb257610375565b8063deeb2b9c116100d1578063deeb2b9c14610b80578063df89b34414610bb3578063e83afee314610be6578063eb28ad3a14610c2257610375565b8063d031370b14610b08578063d796ffb814610b32578063da35e06c14610b6b57610375565b8063ab319c9a11610164578063bc157ac11161013e578063bc157ac114610a37578063bfc706de14610a76578063c24ad43e14610aa2578063cd85641a14610ad557610375565b8063ab319c9a146109a7578063b1bd38b0146109da578063b5b1d56014610a0d57610375565b8063932cc8c3116101a0578063932cc8c3146108d55780639e281a9814610908578063a1210a2d14610941578063a569e5711461097457610375565b80638f59c727146108635780638f6a7b57146108965780638f840ddd146108c057610375565b80634e83423c116102a0578063731681bb1161023e578063827ce38011610218578063827ce380146107be57806386936386146107f1578063869871bf1461080657806387d67dff1461083057610375565b8063731681bb14610748578063788c6c011461075d5780637a8960d8146107a957610375565b806368c31dd51161027a57806368c31dd5146106885780636a20de92146106bb5780636b5e40a7146106f457806370a0502a1461071e57610375565b80634e83423c1461060d578063517bfc60146106405780635a96ac0a1461067357610375565b806312422d231161030d5780633bed33ce116102e75780633bed33ce14610571578063437f79121461059b57806346f68ee9146105c5578063481c6a75146105f857610375565b806312422d23146104ea5780631eec5a9a146105235780632b7ce5001461055c57610375565b8063094a865111610349578063094a8651146104105780630b0eee30146104555780630c3513a81461048e578063124154ca146104a357610375565b8062f714ce1461037a5780630619aff1146103b5578063089208d8146103fb57610375565b3661037557005b600080fd5b34801561038657600080fd5b506103b36004803603604081101561039d57600080fd5b50803590602001356001600160a01b0316610d9b565b005b3480156103c157600080fd5b506103df600480360360208110156103d857600080fd5b5035610f72565b604080516001600160a01b039092168252519081900360200190f35b34801561040757600080fd5b506103b3610f9c565b34801561041c57600080fd5b506104436004803603602081101561043357600080fd5b50356001600160a01b0316611033565b60408051918252519081900360200190f35b34801561046157600080fd5b506103b36004803603604081101561047857600080fd5b506001600160a01b038135169060200135611045565b34801561049a57600080fd5b50610443611200565b3480156104af57600080fd5b506104d6600480360360208110156104c657600080fd5b50356001600160a01b03166112be565b604080519115158252519081900360200190f35b3480156104f657600080fd5b506103b36004803603604081101561050d57600080fd5b50803590602001356001600160a01b03166112d3565b34801561052f57600080fd5b506104436004803603604081101561054657600080fd5b506001600160a01b0381351690602001356115a3565b34801561056857600080fd5b506103b3611832565b34801561057d57600080fd5b506103b36004803603602081101561059457600080fd5b5035611a0d565b3480156105a757600080fd5b506103df600480360360208110156105be57600080fd5b5035611a8b565b3480156105d157600080fd5b506103b3600480360360208110156105e857600080fd5b50356001600160a01b0316611a9b565b34801561060457600080fd5b506103df611b88565b34801561061957600080fd5b506104d66004803603602081101561063057600080fd5b50356001600160a01b0316611b97565b34801561064c57600080fd5b506103df6004803603602081101561066357600080fd5b50356001600160a01b0316611bac565b34801561067f57600080fd5b506103b3611bc7565b34801561069457600080fd5b506104d6600480360360208110156106ab57600080fd5b50356001600160a01b0316611c71565b3480156106c757600080fd5b506103b3600480360360408110156106de57600080fd5b506001600160a01b038135169060200135611c86565b34801561070057600080fd5b506103df6004803603602081101561071757600080fd5b5035611e0b565b34801561072a57600080fd5b506103df6004803603602081101561074157600080fd5b5035611e1b565b34801561075457600080fd5b506103df611e2b565b34801561076957600080fd5b506107906004803603602081101561078057600080fd5b50356001600160a01b0316611e3a565b6040805163ffffffff9092168252519081900360200190f35b3480156107b557600080fd5b50610790611e52565b3480156107ca57600080fd5b506103b3600480360360208110156107e157600080fd5b50356001600160a01b0316611e65565b3480156107fd57600080fd5b50610443611efc565b34801561081257600080fd5b506103df6004803603602081101561082957600080fd5b5035611f02565b34801561083c57600080fd5b506104d66004803603602081101561085357600080fd5b50356001600160a01b0316611f12565b34801561086f57600080fd5b506107906004803603602081101561088657600080fd5b50356001600160a01b0316611f27565b3480156108a257600080fd5b506103df600480360360208110156108b957600080fd5b5035611f3f565b3480156108cc57600080fd5b50610443611f4f565b3480156108e157600080fd5b50610790600480360360208110156108f857600080fd5b50356001600160a01b0316611f55565b34801561091457600080fd5b506103b36004803603604081101561092b57600080fd5b506001600160a01b038135169060200135611f6d565b34801561094d57600080fd5b506104d66004803603602081101561096457600080fd5b50356001600160a01b0316611fce565b34801561098057600080fd5b506104d66004803603602081101561099757600080fd5b50356001600160a01b0316611fe3565b3480156109b357600080fd5b50610790600480360360208110156109ca57600080fd5b50356001600160a01b0316611ff8565b3480156109e657600080fd5b50610790600480360360208110156109fd57600080fd5b50356001600160a01b0316612010565b348015610a1957600080fd5b506103df60048036036020811015610a3057600080fd5b5035612028565b348015610a4357600080fd5b5061044360048036036060811015610a5a57600080fd5b508035906001600160a01b036020820135169060400135612038565b348015610a8257600080fd5b506103b360048036036020811015610a9957600080fd5b503515156122b6565b348015610aae57600080fd5b5061079060048036036020811015610ac557600080fd5b50356001600160a01b0316612316565b348015610ae157600080fd5b5061079060048036036020811015610af857600080fd5b50356001600160a01b031661232e565b348015610b1457600080fd5b506103df60048036036020811015610b2b57600080fd5b5035612346565b348015610b3e57600080fd5b506103b360048036036040811015610b5557600080fd5b50803590602001356001600160a01b0316612356565b348015610b7757600080fd5b506103df6124d9565b348015610b8c57600080fd5b506103b360048036036020811015610ba357600080fd5b50356001600160a01b03166124fd565b348015610bbf57600080fd5b506104d660048036036020811015610bd657600080fd5b50356001600160a01b0316612644565b348015610bf257600080fd5b506104d660048036036040811015610c0957600080fd5b50803560ff1690602001356001600160a01b0316612659565b348015610c2e57600080fd5b506103b360048036036020811015610c4557600080fd5b5035612b1e565b348015610c5857600080fd5b506104d660048036036020811015610c6f57600080fd5b50356001600160a01b0316612c9d565b348015610c8b57600080fd5b506104d660048036036020811015610ca257600080fd5b50356001600160a01b0316612cb2565b348015610cbe57600080fd5b5061079060048036036020811015610cd557600080fd5b50356001600160a01b0316612cc7565b348015610cf157600080fd5b506104d660048036036060811015610d0857600080fd5b5060ff813516906001600160a01b0360208201358116916040013516612cdf565b348015610d3557600080fd5b506104436135f5565b348015610d4a57600080fd5b506103df60048036036020811015610d6157600080fd5b50356135fb565b348015610d7457600080fd5b5061079060048036036020811015610d8b57600080fd5b50356001600160a01b031661360b565b6001600160a01b03811660009081526003602052604090205460ff16610df7576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b3360009081526009602052604090205460ff161515600114610e4f576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610e5b82846115a3565b90507f000000000000000000000000a41d2f8ee4f47d3b860a149765a7df8c3287b7f06001600160a01b03166379cc679033836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610ed457600080fd5b505af1158015610ee8573d6000803e3d6000fd5b5050602154610efa9250905082613623565b6021819055604051600080516020613d6d83398151915290600090a2610f2a6001600160a01b0383163385613665565b604080518481526020810183905281516001600160a01b038516927fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb928290030190a2505050565b60128181548110610f8257600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610fe9576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b601b6020526000908152604090205481565b6001600160a01b0382166000908152600c602052604090205460ff16156110be573360009081526016602052604090205460ff166110b9576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611111565b3360009081526013602052604090205460ff16611111576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b600061111d83836115a3565b60235490915060ff161561117f57611133611200565b81111561117f576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b60215461118c9082613623565b6021819055604051600080516020613d6d83398151915290600090a26111bc6001600160a01b0384163384613665565b6040805183815290516001600160a01b038516917f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80919081900360200190a2505050565b6000806112946022547f000000000000000000000000a41d2f8ee4f47d3b860a149765a7df8c3287b7f06001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561126257600080fd5b505afa158015611276573d6000803e3d6000fd5b505050506040513d602081101561128c57600080fd5b505190613623565b90506021548111156112aa5760009150506112bb565b6021546112b79082613623565b9150505b90565b60066020526000908152604090205460ff1681565b3360009081526019602052604090205460ff16611326576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16611382576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b600061138e82846115a3565b601f54604080516370a0823160e01b815233600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156113df57600080fd5b505afa1580156113f3573d6000803e3d6000fd5b505050506040513d602081101561140957600080fd5b5051336000908152601b60205260408120549192509061142a908390613623565b905080831115611476576040805162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81919589d081b1a5b5a5d60721b604482015290519081900360640190fd5b336000908152601b602052604090205461149090846136b7565b336000908152601b60205260409020556022546114ad90846136b7565b6022556021546114bd9084613623565b6021819055604051600080516020613d6d83398151915290600090a26040805163a9059cbb60e01b81523360048201526024810187905290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b15801561152857600080fd5b505af115801561153c573d6000803e3d6000fd5b505050506040513d602081101561155257600080fd5b5050604080518681526020810185905281516001600160a01b0387169233927f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d6929081900390910190a35050505050565b60006001600160a01b03831661163e576001600160a01b038084166000908152601160209081526040918290205482516325545c6b60e01b81526004810187905292519316926325545c6b926024808201939291829003018186803b15801561160b57600080fd5b505afa15801561161f573d6000803e3d6000fd5b505050506040513d602081101561163557600080fd5b5051905061182c565b6001600160a01b03831660009081526003602052604090205460ff161561177b57611774836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561169b57600080fd5b505afa1580156116af573d6000803e3d6000fd5b505050506040513d60208110156116c557600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a9161176e916001600160a01b037f000000000000000000000000a41d2f8ee4f47d3b860a149765a7df8c3287b7f0169163313ce56791600480820192602092909190829003018186803b15801561173557600080fd5b505afa158015611749573d6000803e3d6000fd5b505050506040513d602081101561175f57600080fd5b5051859060ff16600a0a613711565b9061376a565b905061182c565b6001600160a01b0383166000908152600c602052604090205460ff161561182c576001600160a01b03808416600081815260116020908152604091829020548251634249719f60e01b815260048101949094526024840187905291519190931692634249719f9260448082019391829003018186803b1580156117fd57600080fd5b505afa158015611811573d6000803e3d6000fd5b505050506040513d602081101561182757600080fd5b505190505b92915050565b6000546001600160a01b0316331461187f576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b6000805b6002548110156119575761194d611946600283815481106118a057fe5b600091825260209091200154600280546001600160a01b0390921691859081106118c657fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561191557600080fd5b505afa158015611929573d6000803e3d6000fd5b505050506040513d602081101561193f57600080fd5b50516115a3565b83906136b7565b9150600101611883565b5060005b600b548110156119a85761199e611946600b838154811061197857fe5b600091825260209091200154600b80546001600160a01b0390921691859081106118c657fe5b915060010161195b565b506119be6119b76000476115a3565b82906136b7565b60218190556040519091508190600080516020613d6d83398151915290600090a260405181907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a250565b6000546001600160a01b03163314611a5a576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b604051339082156108fc029083906000818181858888f19350505050158015611a87573d6000803e3d6000fd5b5050565b60088181548110610f8257600080fd5b6000546001600160a01b03163314611ae8576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b6001600160a01b038116611b2d5760405162461bcd60e51b8152600401808060200182810382526026815260200180613ce46026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b601d6020526000908152604090205460ff1681565b6011602052600090815260409020546001600160a01b031681565b6001546001600160a01b03163314611c105760405162461bcd60e51b8152600401808060200182810382526022815260200180613d0a6022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60036020526000908152604090205460ff1681565b336000908152601d602052604090205460ff16611cd9576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b60235460ff1615611d3857611cec611200565b811115611d38576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b7f000000000000000000000000a41d2f8ee4f47d3b860a149765a7df8c3287b7f06001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611daf57600080fd5b505af1158015611dc3573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c9181900360200190a35050565b60058181548110610f8257600080fd5b60158181548110610f8257600080fd5b601f546001600160a01b031681565b60046020526000908152604090205463ffffffff1681565b600154600160a01b900463ffffffff1681565b6000546001600160a01b03163314611eb2576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b6000805260116020527f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b780546001600160a01b0319166001600160a01b0392909216919091179055565b60205481565b60188181548110610f8257600080fd5b60096020526000908152604090205460ff1681565b600d6020526000908152604090205463ffffffff1681565b600e8181548110610f8257600080fd5b60215481565b60076020526000908152604090205463ffffffff1681565b6000546001600160a01b03163314611fba576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b611a876001600160a01b0383163383613665565b600f6020526000908152604090205460ff1681565b600c6020526000908152604090205460ff1681565b60176020526000908152604090205463ffffffff1681565b60146020526000908152604090205463ffffffff1681565b601c8181548110610f8257600080fd5b6001600160a01b03821660009081526003602052604081205460ff168061207757506001600160a01b0383166000908152600c602052604090205460ff165b6120b7576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b6120cc6001600160a01b0384163330876137ac565b6001600160a01b03831660009081526003602052604090205460ff1615612145573360009081526006602052604090205460ff16612140576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b612198565b336000908152600f602052604090205460ff16612198576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b60006121a484866115a3565b90506121b08184613623565b91507f000000000000000000000000a41d2f8ee4f47d3b860a149765a7df8c3287b7f06001600160a01b03166340c10f1933846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561222957600080fd5b505af115801561223d573d6000803e3d6000fd5b505060215461224f92509050826136b7565b6021819055604051600080516020613d6d83398151915290600090a2604080518681526020810183905281516001600160a01b038716927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2509392505050565b6000546001600160a01b03163314612303576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b6023805460ff1916911515919091179055565b600a6020526000908152604090205463ffffffff1681565b601a6020526000908152604090205463ffffffff1681565b60028181548110610f8257600080fd5b3360009081526019602052604090205460ff166123a9576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16612405576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b61241a6001600160a01b0382163330856137ac565b600061242682846115a3565b336000908152601b60205260409020549091506124439082613623565b336000908152601b60205260409020556022546124609082613623565b60225560215461247090826136b7565b6021819055604051600080516020613d6d83398151915290600090a2604080518481526020810183905281516001600160a01b0385169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a3505050565b7f000000000000000000000000a41d2f8ee4f47d3b860a149765a7df8c3287b7f081565b6000546001600160a01b0316331461254a576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b6001600160a01b0381166125a5576040805162461bcd60e51b815260206004820152601960248201527f496e76616c696420726563697069656e74206164647265737300000000000000604482015290519081900360640190fd5b60405147906000906001600160a01b0384169083908381818185875af1925050503d80600081146125f2576040519150601f19603f3d011682016040523d82523d6000602084013e6125f7565b606091505b505090508061263f576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b505050565b60166020526000908152604090205460ff1681565b600080546001600160a01b031633146126a7576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b6001600160a01b0382166126ba57600080fd5b60008360098111156126c857fe5b1415612723576001546126ee9063ffffffff42811691600160a01b900481169061380c16565b6001600160a01b0383166000908152600760205260409020805463ffffffff191663ffffffff92909216919091179055612acd565b600183600981111561273157fe5b141561278c576001546127579063ffffffff42811691600160a01b900481169061380c16565b6001600160a01b0383166000908152600a60205260409020805463ffffffff191663ffffffff92909216919091179055612acd565b600283600981111561279a57fe5b14156127f5576001546127c09063ffffffff42811691600160a01b900481169061380c16565b6001600160a01b0383166000908152600460205260409020805463ffffffff191663ffffffff92909216919091179055612acd565b600383600981111561280357fe5b14156128725760015461283d9061282d9063ffffffff600160a01b90910481169060029061386f16565b63ffffffff428116919061380c16565b6001600160a01b0383166000908152601460205260409020805463ffffffff191663ffffffff92909216919091179055612acd565b600483600981111561288057fe5b14156128db576001546128a69063ffffffff42811691600160a01b900481169061380c16565b6001600160a01b0383166000908152601060205260409020805463ffffffff191663ffffffff92909216919091179055612acd565b60058360098111156128e957fe5b14156129445760015461290f9063ffffffff42811691600160a01b900481169061380c16565b6001600160a01b0383166000908152600d60205260409020805463ffffffff191663ffffffff92909216919091179055612acd565b600683600981111561295257fe5b14156129b15760015461297c9061282d9063ffffffff600160a01b90910481169060029061386f16565b6001600160a01b0383166000908152601760205260409020805463ffffffff191663ffffffff92909216919091179055612acd565b60078360098111156129bf57fe5b1415612a1a576001546129e59063ffffffff42811691600160a01b900481169061380c16565b6001600160a01b0383166000908152601a60205260409020805463ffffffff191663ffffffff92909216919091179055612acd565b6008836009811115612a2857fe5b1415612a8357600154612a4e9063ffffffff42811691600160a01b900481169061380c16565b6001600160a01b0383166000908152601e60205260409020805463ffffffff191663ffffffff92909216919091179055612acd565b6009836009811115612a9157fe5b1415612ac557600154612ab79063ffffffff42811691600160a01b900481169061380c16565b63ffffffff16602055612acd565b50600061182c565b826009811115612ad957fe5b604080516001600160a01b038516815290517f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf9181900360200190a250600192915050565b3360009081526019602052604090205460ff16612b71576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6040805163079cc67960e41b81523360048201526024810183905290516001600160a01b037f000000000000000000000000a41d2f8ee4f47d3b860a149765a7df8c3287b7f016916379cc679091604480830192600092919082900301818387803b158015612bdf57600080fd5b505af1158015612bf3573d6000803e3d6000fd5b5050336000908152601b6020526040902054612c129250905082613623565b336000908152601b6020526040902055602254612c2f9082613623565b602255604080518281526020810183905281516001600160a01b037f000000000000000000000000a41d2f8ee4f47d3b860a149765a7df8c3287b7f0169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a350565b60136020526000908152604090205460ff1681565b60196020526000908152604090205460ff1681565b601e6020526000908152604090205463ffffffff1681565b600080546001600160a01b03163314612d2d576040805162461bcd60e51b81526020600482018190526024820152600080516020613d4d833981519152604482015290519081900360640190fd5b6001600160a01b038316612d4057600080fd5b600080856009811115612d4f57fe5b1415612e1557612d6260076006866138e0565b15612de5576001600160a01b0384166000908152600760205260409020805463ffffffff19169055612d956005856139d9565b612de557600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600660205260409020805460ff81161560ff199091168117909155613597565b6001856009811115612e2357fe5b1415612ee957612e36600a6009866138e0565b15612eb9576001600160a01b0384166000908152600a60205260409020805463ffffffff19169055612e696008856139d9565b612eb957600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600960205260409020805460ff81161560ff199091168117909155613597565b6002856009811115612ef757fe5b1415612fbd57612f0a60046003866138e0565b15612f8d576001600160a01b0384166000908152600460205260409020805463ffffffff19169055612f3d6002856139d9565b612f8d57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600360205260409020805460ff81161560ff199091168117909155613597565b6003856009811115612fcb57fe5b14156130ce57612fde60146013866138e0565b1561309e57601280546001810182557fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0387169081179091556000908152601460205260409020805463ffffffff1916905561304e90856139d9565b61309e57601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601360205260409020805460ff81161560ff199091168117909155613597565b60048560098111156130dc57fe5b14156131df576130ef6010600f866138e0565b156131af57600e80546001810182557fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0387169081179091556000908152601060205260409020805463ffffffff1916905561315f90856139d9565b6131af57600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600f60205260409020805460ff81161560ff199091168117909155613597565b60058560098111156131ed57fe5b14156132d557613200600d600c866138e0565b15613283576001600160a01b0384166000908152600d60205260409020805463ffffffff19169055613233600b856139d9565b61328357600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b038381166000908152600c60209081526040808320805460ff81161560ff199091168117909155601190925290912080546001600160a01b03191692851692909217909155613597565b60068560098111156132e357fe5b14156133a9576132f660176016866138e0565b15613379576001600160a01b0384166000908152601760205260409020805463ffffffff191690556133296015856139d9565b61337957601580546001810182556000919091527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601660205260409020805460ff81161560ff199091168117909155613597565b60078560098111156133b757fe5b141561347d576133ca601a6019866138e0565b1561344d576001600160a01b0384166000908152601a60205260409020805463ffffffff191690556133fd6018856139d9565b61344d57601880546001810182556000919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601960205260409020805460ff81161560ff199091168117909155613597565b600885600981111561348b57fe5b14156135515761349e601e601d866138e0565b15613521576001600160a01b0384166000908152601e60205260409020805463ffffffff191690556134d1601c856139d9565b61352157601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601d60205260409020805460ff81161560ff199091168117909155613597565b600985600981111561355f57fe5b141561358d57506000602055601f80546001600160a01b0319166001600160a01b0385161790556001613597565b60009150506135ee565b8460098111156135a357fe5b604080516001600160a01b0387168152831515602082015281517f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc477929181900390910190a260019150505b9392505050565b60225481565b600b8181548110610f8257600080fd5b60106020526000908152604090205463ffffffff1681565b60006135ee83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a29565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261263f908490613ac0565b6000828201838110156135ee576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000826137205750600061182c565b8282028284828161372d57fe5b04146135ee5760405162461bcd60e51b8152600401808060200182810382526021815260200180613d2c6021913960400191505060405180910390fd5b60006135ee83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c78565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052613806908590613ac0565b50505050565b600082820163ffffffff80851690821610156135ee576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600063ffffffff83166138845750600061182c565b82820263ffffffff808416908086169083168161389d57fe5b0463ffffffff16146135ee5760405162461bcd60e51b8152600401808060200182810382526021815260200180613d2c6021913960400191505060405180910390fd5b6001600160a01b03811660009081526020839052604081205460ff166139cf576001600160a01b03821660009081526020859052604090205463ffffffff1661395d576040805162461bcd60e51b815260206004820152600a6024820152694d75737420717565756560b01b604482015290519081900360640190fd5b6001600160a01b03821660009081526020859052604090205463ffffffff428116911611156139c7576040805162461bcd60e51b8152602060048201526011602482015270145d595d59481b9bdd08195e1c1a5c9959607a1b604482015290519081900360640190fd5b5060016135ee565b5060009392505050565b6000805b83548110156139cf57826001600160a01b03168482815481106139fc57fe5b6000918252602090912001546001600160a01b03161415613a2157600191505061182c565b6001016139dd565b60008184841115613ab85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613a7d578181015183820152602001613a65565b50505050905090810190601f168015613aaa5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b613ad2826001600160a01b0316613cdd565b613b23576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310613b615780518252601f199092019160209182019101613b42565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613bc3576040519150601f19603f3d011682016040523d82523d6000602084013e613bc8565b606091505b509150915081613c1f576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561380657808060200190516020811015613c3b57600080fd5b50516138065760405162461bcd60e51b815260040180806020018281038252602a815260200180613d8d602a913960400191505060405180910390fd5b60008183613cc75760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613a7d578181015183820152602001613a65565b506000838581613cd357fe5b0495945050505050565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657293bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d665361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220fcc4b73b09c26ca06f20c9c3cd807f9c848200607d5d4f7971ab2ad2eee470ea64736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a41d2f8ee4f47d3b860a149765a7df8c3287b7f0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000003aba3807454c4c62a48f13d4725359ba58eea610
-----Decoded View---------------
Arg [0] : _Sync (address): 0xa41d2f8Ee4F47D3B860A149765A7dF8c3287b7F0
Arg [1] : _USDC (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [2] : _etherCalculator (address): 0x3Aba3807454C4C62A48f13D4725359ba58eeA610
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000a41d2f8ee4f47d3b860a149765a7df8c3287b7f0
Arg [1] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [2] : 0000000000000000000000003aba3807454c4c62a48f13d4725359ba58eea610
Loading...
Loading
Loading...
Loading
OVERVIEW
Syncus' Treasury wallet.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.