More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 104 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Recover Wrong To... | 2727409 | 945 days ago | IN | 0 CRO | 0.25358292 | ||||
Recover Wrong To... | 2727404 | 945 days ago | IN | 0 CRO | 0.25348793 | ||||
Recover Wrong To... | 2727390 | 945 days ago | IN | 0 CRO | 0.19344435 | ||||
Recover Wrong To... | 2727380 | 945 days ago | IN | 0 CRO | 0.25353296 | ||||
Recover Wrong To... | 2727362 | 945 days ago | IN | 0 CRO | 0.25358297 | ||||
Recover Wrong To... | 2727344 | 945 days ago | IN | 0 CRO | 0.159718 | ||||
Recover Wrong To... | 2727331 | 945 days ago | IN | 0 CRO | 0.25343803 | ||||
Recover Wrong To... | 2727315 | 945 days ago | IN | 0 CRO | 0.25363302 | ||||
Recover Wrong To... | 2727302 | 945 days ago | IN | 0 CRO | 0.25358303 | ||||
Recover Wrong To... | 2727288 | 945 days ago | IN | 0 CRO | 0.25343806 | ||||
Recover Wrong To... | 2727247 | 945 days ago | IN | 0 CRO | 0.25353309 | ||||
Recover Wrong To... | 2727237 | 945 days ago | IN | 0 CRO | 0.19329949 | ||||
Recover Wrong To... | 2727229 | 945 days ago | IN | 0 CRO | 0.25334313 | ||||
Recover Wrong To... | 2727211 | 945 days ago | IN | 0 CRO | 0.25343814 | ||||
Recover Wrong To... | 2727201 | 945 days ago | IN | 0 CRO | 0.25343814 | ||||
Recover Wrong To... | 2727185 | 945 days ago | IN | 0 CRO | 0.19339951 | ||||
Recover Wrong To... | 2727177 | 945 days ago | IN | 0 CRO | 0.25343815 | ||||
Recover Wrong To... | 2727170 | 945 days ago | IN | 0 CRO | 0.25343817 | ||||
Recover Wrong To... | 2727138 | 945 days ago | IN | 0 CRO | 0.25348819 | ||||
Recover Wrong To... | 2727121 | 945 days ago | IN | 0 CRO | 0.19329956 | ||||
Recover Wrong To... | 2727112 | 945 days ago | IN | 0 CRO | 0.25343822 | ||||
Recover Wrong To... | 2727088 | 945 days ago | IN | 0 CRO | 0.25358322 | ||||
Recover Wrong To... | 2727072 | 945 days ago | IN | 0 CRO | 0.25343825 | ||||
Recover Wrong To... | 2727052 | 945 days ago | IN | 0 CRO | 0.25334327 | ||||
Recover Wrong To... | 2727039 | 945 days ago | IN | 0 CRO | 0.25348827 |
Loading...
Loading
Contract Name:
CronaMaker
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-02-23 */ // Dependency file: contracts/libraries/SafeMath.sol // SPDX-License-Identifier: MIT // pragma solidity 0.6.12; // a library for performing overflow-safe math, updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256 c) {require((c = a + b) >= b, "SafeMath: Add Overflow");} function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {require((c = a - b) <= a, "SafeMath: Underflow");} function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {require(b == 0 || (c = a * b)/b == a, "SafeMath: Mul Overflow");} function to128(uint256 a) internal pure returns (uint128 c) { require(a <= uint128(-1), "SafeMath: uint128 Overflow"); c = uint128(a); } } library SafeMath128 { function add(uint128 a, uint128 b) internal pure returns (uint128 c) {require((c = a + b) >= b, "SafeMath: Add Overflow");} function sub(uint128 a, uint128 b) internal pure returns (uint128 c) {require((c = a - b) <= a, "SafeMath: Underflow");} } // Dependency file: contracts/interfaces/IERC20.sol // pragma solidity >=0.5.0; interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); // EIP 2612 function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; } // Dependency file: contracts/libraries/SafeERC20.sol // pragma solidity 0.6.12; // import "contracts/interfaces/IERC20.sol"; library SafeERC20 { function safeSymbol(IERC20 token) internal view returns(string memory) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x95d89b41)); return success && data.length > 0 ? abi.decode(data, (string)) : "???"; } function safeName(IERC20 token) internal view returns(string memory) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x06fdde03)); return success && data.length > 0 ? abi.decode(data, (string)) : "???"; } function safeDecimals(IERC20 token) public view returns (uint8) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x313ce567)); return success && data.length == 32 ? abi.decode(data, (uint8)) : 18; } function safeTransfer(IERC20 token, address to, uint256 amount) internal { (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0xa9059cbb, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "SafeERC20: Transfer failed"); } function safeTransferFrom(IERC20 token, address from, uint256 amount) internal { (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0x23b872dd, from, address(this), amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "SafeERC20: TransferFrom failed"); } } // Dependency file: contracts/interfaces/ICronaSwapERC20.sol // pragma solidity >=0.5.0; interface ICronaSwapERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; } // Dependency file: contracts/interfaces/ICronaSwapPair.sol // pragma solidity >=0.5.0; interface ICronaSwapPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function pairFee() external view returns (uint32); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; function setPairFee(uint32) external; } // Dependency file: contracts/interfaces/ICronaSwapFactory.sol // pragma solidity >=0.5.0; interface ICronaSwapFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function setPairFee(address pair, uint32 pairFee) external; } // Dependency file: @openzeppelin/contracts/utils/Context.sol // pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // Dependency file: @openzeppelin/contracts/access/Ownable.sol // pragma solidity >=0.6.0 <0.8.0; // import "@openzeppelin/contracts/utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // Root file: contracts/CronaMaker.sol // P1 - P3: OK pragma solidity 0.6.12; // import "contracts/libraries/SafeMath.sol"; // import "contracts/libraries/SafeERC20.sol"; // import "contracts/interfaces/ICronaSwapERC20.sol"; // import "contracts/interfaces/ICronaSwapPair.sol"; // import "contracts/interfaces/ICronaSwapFactory.sol"; // import "@openzeppelin/contracts/access/Ownable.sol"; // CronaMaker is MasterChef's left hand and kinda a wizard. He can cook up Crona from pretty much anything! // This contract handles "serving up" rewards for xCrona holders by trading tokens collected from fees for Crona. // T1 - T4: OK contract CronaMaker is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; // V1 - V5: OK ICronaSwapFactory public immutable factory; //0x73A48f8f521EB31c55c0e1274dB0898dE599Cb11 // V1 - V5: OK address public immutable dest; //0xB6E6d031db616cF8aC338293dC2ecFa0F01C55EC // V1 - V5: OK address private immutable crona; //0xadbd1231fb360047525BEdF962581F3eee7b49fe // V1 - V5: OK address private immutable wcro; //0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23 address private immutable usdc; //0xc21223249CA28397B4B6541dfFaEcC539BfF0c59 // V1 - V5: OK mapping(address => address) internal _bridges; // E1: OK event LogBridgeSet(address indexed token, address indexed bridge); // Admin recovers token event AdminTokenRecovery(address tokenAddress, uint256 amountTokens); // E1: OK event LogConvert( address indexed server, address indexed token0, address indexed token1, uint256 amount0, uint256 amount1, uint256 amountCRONA ); constructor( address _factory, address _dest, address _crona, address _usdc, address _wcro ) public { factory = ICronaSwapFactory(_factory); dest = _dest; crona = _crona; wcro = _wcro; usdc = _usdc; } // F1 - F10: OK // C1 - C24: OK function bridgeFor(address token) public view returns (address bridge) { bridge = _bridges[token]; if (bridge == address(0)) { bridge = wcro; } } // F1 - F10: OK // C1 - C24: OK function setBridge(address token, address bridge) external onlyOwner { // Checks require( token != crona && token != wcro && token != bridge, "CronaMaker: Invalid bridge" ); // Effects _bridges[token] = bridge; emit LogBridgeSet(token, bridge); } // M1 - M5: OK // C1 - C24: OK // C6: It's not a fool proof solution, but it prevents flash loans, so here it's ok to use tx.origin modifier onlyEOA() { // Try to make flash-loan exploit harder to do by only allowing externally owned addresses. require(msg.sender == tx.origin, "CronaMaker: must use EOA"); _; } // F1 - F10: OK // F3: _convert is separate to save gas by only checking the 'onlyEOA' modifier once in case of convertMultiple // F6: There is an exploit to add lots of CRONA to the dest, run convert, then remove the CRONA again. // As the size of the CronaBar has grown, this requires large amounts of funds and isn't super profitable anymore // The onlyEOA modifier prevents this being done with a flash loan. // C1 - C24: OK function convert(address token0, address token1) external onlyEOA() { _convert(token0, token1); } // F1 - F10: OK, see convert // C1 - C24: OK // C3: Loop is under control of the caller function convertMultiple( address[] calldata token0, address[] calldata token1 ) external onlyEOA() { // TODO: This can be optimized a fair bit, but this is safer and simpler for now uint256 len = token0.length; for (uint256 i = 0; i < len; i++) { _convert(token0[i], token1[i]); } } // F1 - F10: OK // C1- C24: OK function _convert(address token0, address token1) internal { // Interactions // S1 - S4: OK ICronaSwapPair pair = ICronaSwapPair(factory.getPair(token0, token1)); require(address(pair) != address(0), "CronaMaker: Invalid pair"); // balanceOf: S1 - S4: OK // transfer: X1 - X5: OK IERC20(address(pair)).safeTransfer( address(pair), pair.balanceOf(address(this)) ); // X1 - X5: OK (uint256 amount0, uint256 amount1) = pair.burn(address(this)); if (token0 != pair.token0()) { (amount0, amount1) = (amount1, amount0); } emit LogConvert( msg.sender, token0, token1, amount0, amount1, _convertStep(token0, token1, amount0, amount1) ); } // F1 - F10: OK // C1 - C24: OK // All safeTransfer, _swap, _toCRONA, _convertStep: X1 - X5: OK function _convertStep( address token0, address token1, uint256 amount0, uint256 amount1 ) internal returns (uint256 cronaOut) { // Interactions if (token0 == token1) { uint256 amount = amount0.add(amount1); if (token0 == crona) { IERC20(crona).safeTransfer(dest, amount); cronaOut = amount; } else if (token0 == wcro) { cronaOut = _toCRONA(wcro, amount); } else { address bridge = bridgeFor(token0); amount = _swap(token0, bridge, amount, address(this)); cronaOut = _convertStep(bridge, bridge, amount, 0); } } else if (token0 == crona) { // eg. CRONA - CRO IERC20(crona).safeTransfer(dest, amount0); cronaOut = _toCRONA(token1, amount1).add(amount0); } else if (token1 == crona) { // eg. USDT - CRONA IERC20(crona).safeTransfer(dest, amount1); cronaOut = _toCRONA(token0, amount0).add(amount1); } else if (token0 == wcro) { // eg. CRO - USDC cronaOut = _toCRONA( wcro, _swap(token1, wcro, amount1, address(this)).add(amount0) ); } else if (token1 == wcro) { // eg. USDT - CRO cronaOut = _toCRONA( wcro, _swap(token0, wcro, amount0, address(this)).add(amount1) ); } else { // eg. MIC - USDT address bridge0 = bridgeFor(token0); address bridge1 = bridgeFor(token1); if (bridge0 == token1) { // eg. MIC - USDT - and bridgeFor(MIC) = USDT cronaOut = _convertStep( bridge0, token1, _swap(token0, bridge0, amount0, address(this)), amount1 ); } else if (bridge1 == token0) { // eg. WBTC - DSD - and bridgeFor(DSD) = WBTC cronaOut = _convertStep( token0, bridge1, amount0, _swap(token1, bridge1, amount1, address(this)) ); } else { cronaOut = _convertStep( bridge0, bridge1, // eg. USDT - DSD - and bridgeFor(DSD) = WBTC _swap(token0, bridge0, amount0, address(this)), _swap(token1, bridge1, amount1, address(this)) ); } } } // F1 - F10: OK // C1 - C24: OK // All safeTransfer, swap: X1 - X5: OK function _swap( address fromToken, address toToken, uint256 amountIn, address to ) internal returns (uint256 amountOut) { // Checks // X1 - X5: OK ICronaSwapPair pair = ICronaSwapPair(factory.getPair(fromToken, toToken)); require(address(pair) != address(0), "CronaMaker: Cannot convert"); // Interactions // X1 - X5: OK (uint256 reserve0, uint256 reserve1, ) = pair.getReserves(); uint256 amountInWithFee = amountIn.mul(9975); if (fromToken == pair.token0()) { amountOut = amountInWithFee.mul(reserve1) / reserve0.mul(10000).add(amountInWithFee); IERC20(fromToken).safeTransfer(address(pair), amountIn); pair.swap(0, amountOut, to, new bytes(0)); // TODO: Add maximum slippage? } else { amountOut = amountInWithFee.mul(reserve0) / reserve1.mul(10000).add(amountInWithFee); IERC20(fromToken).safeTransfer(address(pair), amountIn); pair.swap(amountOut, 0, to, new bytes(0)); // TODO: Add maximum slippage? } } // F1 - F10: OK // C1 - C24: OK function _toCRONA(address token, uint256 amountIn) internal returns (uint256 amountOut) { // X1 - X5: OK // amountOut = _swap(token, crona, amountIn, dest); amountOut = _swap(token, usdc, amountIn, dest); } function recoverWrongTokens(address _tokenAddress, uint256 _tokenAmount) external onlyOwner { IERC20(_tokenAddress).safeTransfer(dest, _tokenAmount); emit AdminTokenRecovery(_tokenAddress, _tokenAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_dest","type":"address"},{"internalType":"address","name":"_crona","type":"address"},{"internalType":"address","name":"_usdc","type":"address"},{"internalType":"address","name":"_wcro","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AdminTokenRecovery","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"bridge","type":"address"}],"name":"LogBridgeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"server","type":"address"},{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountCRONA","type":"uint256"}],"name":"LogConvert","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"bridgeFor","outputs":[{"internalType":"address","name":"bridge","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"name":"convert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"token0","type":"address[]"},{"internalType":"address[]","name":"token1","type":"address[]"}],"name":"convertMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dest","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract ICronaSwapFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"recoverWrongTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"bridge","type":"address"}],"name":"setBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
61012060405234801561001157600080fd5b506040516118bc3803806118bc833981810160405260a081101561003457600080fd5b50805160208201516040830151606084015160809094015192939192909190600061005d6100df565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160601b0319606095861b811660805293851b841660a05291841b831660c05290831b821660e05290911b16610100526100e3565b3390565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c61171d61019f60003980611182525080610580528061069e5280610d745280610db15280610f565280610f935280610fbc5280610fe95280611026528061104f5250806105435280610cde5280610d235280610e115280610e565280610eba5280610eff52508061039352806104ae5280610d455280610e785280610f2152806111a4525080610722528061084a52806111d4525061171d6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80639d22ae8c116100665780639d22ae8c146101c7578063a761a939146101f5578063bd1b820c1461021b578063c45a015514610249578063f2fde38b146102515761009e565b8063303e6aa4146100a35780633f138d4b14610167578063715018a61461019357806384b366dc1461019b5780638da5cb5b146101bf575b600080fd5b610165600480360360408110156100b957600080fd5b8101906020810181356401000000008111156100d457600080fd5b8201836020820111156100e657600080fd5b8035906020019184602083028401116401000000008311171561010857600080fd5b91939092909160208101903564010000000081111561012657600080fd5b82018360208201111561013857600080fd5b8035906020019184602083028401116401000000008311171561015a57600080fd5b509092509050610277565b005b6101656004803603604081101561017d57600080fd5b506001600160a01b038135169060200135610322565b610165610400565b6101a36104ac565b604080516001600160a01b039092168252519081900360200190f35b6101a36104d0565b610165600480360360408110156101dd57600080fd5b506001600160a01b03813581169160200135166104df565b6101a36004803603602081101561020b57600080fd5b50356001600160a01b031661067b565b6101656004803603604081101561023157600080fd5b506001600160a01b03813581169160200135166106c3565b6101a3610720565b6101656004803603602081101561026757600080fd5b50356001600160a01b0316610744565b3332146102c6576040805162461bcd60e51b815260206004820152601860248201527743726f6e614d616b65723a206d7573742075736520454f4160401b604482015290519081900360640190fd5b8260005b8181101561031a576103128686838181106102e157fe5b905060200201356001600160a01b03168585848181106102fd57fe5b905060200201356001600160a01b0316610846565b6001016102ca565b505050505050565b61032a610b44565b6001600160a01b031661033b6104d0565b6001600160a01b031614610384576040805162461bcd60e51b815260206004820181905260248201526000805160206116c8833981519152604482015290519081900360640190fd5b6103b86001600160a01b0383167f000000000000000000000000000000000000000000000000000000000000000083610b48565b604080516001600160a01b03841681526020810183905281517f74545154aac348a3eac92596bd1971957ca94795f4e954ec5f613b55fab78129929181900390910190a15050565b610408610b44565b6001600160a01b03166104196104d0565b6001600160a01b031614610462576040805162461bcd60e51b815260206004820181905260248201526000805160206116c8833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031690565b6104e7610b44565b6001600160a01b03166104f86104d0565b6001600160a01b031614610541576040805162461bcd60e51b815260206004820181905260248201526000805160206116c8833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141580156105b557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156105d35750806001600160a01b0316826001600160a01b031614155b610624576040805162461bcd60e51b815260206004820152601a60248201527f43726f6e614d616b65723a20496e76616c696420627269646765000000000000604482015290519081900360640190fd5b6001600160a01b0382811660008181526001602052604080822080546001600160a01b0319169486169485179055517f2e103aa707acc565f9a1547341914802b2bfe977fd79c595209f248ae4b006139190a35050565b6001600160a01b0380821660009081526001602052604090205416806106be57507f00000000000000000000000000000000000000000000000000000000000000005b919050565b333214610712576040805162461bcd60e51b815260206004820152601860248201527743726f6e614d616b65723a206d7573742075736520454f4160401b604482015290519081900360640190fd5b61071c8282610846565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61074c610b44565b6001600160a01b031661075d6104d0565b6001600160a01b0316146107a6576040805162461bcd60e51b815260206004820181905260248201526000805160206116c8833981519152604482015290519081900360640190fd5b6001600160a01b0381166107eb5760405162461bcd60e51b81526004018080602001828103825260268152602001806116a26026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a4390584846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156108c657600080fd5b505afa1580156108da573d6000803e3d6000fd5b505050506040513d60208110156108f057600080fd5b505190506001600160a01b03811661094f576040805162461bcd60e51b815260206004820152601860248201527f43726f6e614d616b65723a20496e76616c696420706169720000000000000000604482015290519081900360640190fd5b6109dd81826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156109a057600080fd5b505afa1580156109b4573d6000803e3d6000fd5b505050506040513d60208110156109ca57600080fd5b50516001600160a01b0384169190610b48565b600080826001600160a01b03166389afcb44306040518263ffffffff1660e01b815260040180826001600160a01b031681526020019150506040805180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d6040811015610a5857600080fd5b50805160209182015160408051630dfe168160e01b815290519295509093506001600160a01b03861692630dfe168192600480840193829003018186803b158015610aa257600080fd5b505afa158015610ab6573d6000803e3d6000fd5b505050506040513d6020811015610acc57600080fd5b50516001600160a01b03868116911614610ae257905b6001600160a01b03808516908616337fd06b1d7ed79b664d17472c6f6997b929f1abe463ccccb4e5b6a0038f2f730c158585610b208b8b8484610cb2565b60408051938452602084019290925282820152519081900360600190a45050505050565b3390565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610bc55780518252601f199092019160209182019101610ba6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610c27576040519150601f19603f3d011682016040523d82523d6000602084013e610c2c565b606091505b5091509150818015610c5a575080511580610c5a5750808060200190516020811015610c5757600080fd5b50515b610cab576040805162461bcd60e51b815260206004820152601a60248201527f5361666545524332303a205472616e73666572206661696c6564000000000000604482015290519081900360640190fd5b5050505050565b6000836001600160a01b0316856001600160a01b03161415610e0f576000610cda8484611123565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161415610d7257610d6a6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083610b48565b809150610e09565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161415610ddd57610dd67f00000000000000000000000000000000000000000000000000000000000000008261117a565b9150610e09565b6000610de88761067b565b9050610df6878284306111cf565b9150610e058182846000610cb2565b9250505b5061111b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161415610eb857610e9d6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000085610b48565b610eb183610eab868561117a565b90611123565b905061111b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161415610f5457610f466001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000084610b48565b610eb182610eab878661117a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161415610fe757610eb17f0000000000000000000000000000000000000000000000000000000000000000610fe285610eab887f000000000000000000000000000000000000000000000000000000000000000088306111cf565b61117a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316141561107557610eb17f0000000000000000000000000000000000000000000000000000000000000000610fe284610eab897f000000000000000000000000000000000000000000000000000000000000000089306111cf565b60006110808661067b565b9050600061108d8661067b565b9050856001600160a01b0316826001600160a01b031614156110c7576110c082876110ba8a868a306111cf565b87610cb2565b9250611118565b866001600160a01b0316816001600160a01b031614156110f8576110c08782876110f38a868a306111cf565b610cb2565b61111582826111098a868a306111cf565b6110f38a868a306111cf565b92505b50505b949350505050565b81810181811015611174576040805162461bcd60e51b8152602060048201526016602482015275536166654d6174683a20416464204f766572666c6f7760501b604482015290519081900360640190fd5b92915050565b60006111c8837f0000000000000000000000000000000000000000000000000000000000000000847f00000000000000000000000000000000000000000000000000000000000000006111cf565b9392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a4390587876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561125057600080fd5b505afa158015611264573d6000803e3d6000fd5b505050506040513d602081101561127a57600080fd5b505190506001600160a01b0381166112d9576040805162461bcd60e51b815260206004820152601a60248201527f43726f6e614d616b65723a2043616e6e6f7420636f6e76657274000000000000604482015290519081900360640190fd5b600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561131557600080fd5b505afa158015611329573d6000803e3d6000fd5b505050506040513d606081101561133f57600080fd5b5080516020909101516dffffffffffffffffffffffffffff9182169350169050600061136d876126f761163c565b9050836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156113a857600080fd5b505afa1580156113bc573d6000803e3d6000fd5b505050506040513d60208110156113d257600080fd5b50516001600160a01b038a81169116141561150d576113f781610eab8561271061163c565b611401828461163c565b8161140857fe5b04945061141f6001600160a01b038a168589610b48565b604080516000808252602082019283905263022c0d9f60e01b835260248201818152604483018990526001600160a01b038a81166064850152608060848501908152845160a48601819052918a169563022c0d9f958c948e9491939092909160c4850191908083838b5b838110156114a1578181015183820152602001611489565b50505050905090810190601f1680156114ce5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156114f057600080fd5b505af1158015611504573d6000803e3d6000fd5b50505050611630565b61151d81610eab8461271061163c565b611527828561163c565b8161152e57fe5b0494506115456001600160a01b038a168589610b48565b604080516000808252602082019283905263022c0d9f60e01b835260248201888152604483018290526001600160a01b038a81166064850152608060848501908152845160a48601819052918a169563022c0d9f958c95948e9491939092909160c4850191908083838a5b838110156115c85781810151838201526020016115b0565b50505050905090810190601f1680156115f55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561161757600080fd5b505af115801561162b573d6000803e3d6000fd5b505050505b50505050949350505050565b60008115806116575750508082028282828161165457fe5b04145b611174576040805162461bcd60e51b8152602060048201526016602482015275536166654d6174683a204d756c204f766572666c6f7760501b604482015290519081900360640190fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220f3bfb9ba7ea215b248168b7942899ed8db930570e8e48203ff55aa7b6d44712b64736f6c634300060c003300000000000000000000000073a48f8f521eb31c55c0e1274db0898de599cb11000000000000000000000000b6e6d031db616cf8ac338293dc2ecfa0f01c55ec000000000000000000000000adbd1231fb360047525bedf962581f3eee7b49fe000000000000000000000000c21223249ca28397b4b6541dffaecc539bff0c590000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80639d22ae8c116100665780639d22ae8c146101c7578063a761a939146101f5578063bd1b820c1461021b578063c45a015514610249578063f2fde38b146102515761009e565b8063303e6aa4146100a35780633f138d4b14610167578063715018a61461019357806384b366dc1461019b5780638da5cb5b146101bf575b600080fd5b610165600480360360408110156100b957600080fd5b8101906020810181356401000000008111156100d457600080fd5b8201836020820111156100e657600080fd5b8035906020019184602083028401116401000000008311171561010857600080fd5b91939092909160208101903564010000000081111561012657600080fd5b82018360208201111561013857600080fd5b8035906020019184602083028401116401000000008311171561015a57600080fd5b509092509050610277565b005b6101656004803603604081101561017d57600080fd5b506001600160a01b038135169060200135610322565b610165610400565b6101a36104ac565b604080516001600160a01b039092168252519081900360200190f35b6101a36104d0565b610165600480360360408110156101dd57600080fd5b506001600160a01b03813581169160200135166104df565b6101a36004803603602081101561020b57600080fd5b50356001600160a01b031661067b565b6101656004803603604081101561023157600080fd5b506001600160a01b03813581169160200135166106c3565b6101a3610720565b6101656004803603602081101561026757600080fd5b50356001600160a01b0316610744565b3332146102c6576040805162461bcd60e51b815260206004820152601860248201527743726f6e614d616b65723a206d7573742075736520454f4160401b604482015290519081900360640190fd5b8260005b8181101561031a576103128686838181106102e157fe5b905060200201356001600160a01b03168585848181106102fd57fe5b905060200201356001600160a01b0316610846565b6001016102ca565b505050505050565b61032a610b44565b6001600160a01b031661033b6104d0565b6001600160a01b031614610384576040805162461bcd60e51b815260206004820181905260248201526000805160206116c8833981519152604482015290519081900360640190fd5b6103b86001600160a01b0383167f000000000000000000000000b6e6d031db616cf8ac338293dc2ecfa0f01c55ec83610b48565b604080516001600160a01b03841681526020810183905281517f74545154aac348a3eac92596bd1971957ca94795f4e954ec5f613b55fab78129929181900390910190a15050565b610408610b44565b6001600160a01b03166104196104d0565b6001600160a01b031614610462576040805162461bcd60e51b815260206004820181905260248201526000805160206116c8833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b7f000000000000000000000000b6e6d031db616cf8ac338293dc2ecfa0f01c55ec81565b6000546001600160a01b031690565b6104e7610b44565b6001600160a01b03166104f86104d0565b6001600160a01b031614610541576040805162461bcd60e51b815260206004820181905260248201526000805160206116c8833981519152604482015290519081900360640190fd5b7f000000000000000000000000adbd1231fb360047525bedf962581f3eee7b49fe6001600160a01b0316826001600160a01b0316141580156105b557507f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b0316826001600160a01b031614155b80156105d35750806001600160a01b0316826001600160a01b031614155b610624576040805162461bcd60e51b815260206004820152601a60248201527f43726f6e614d616b65723a20496e76616c696420627269646765000000000000604482015290519081900360640190fd5b6001600160a01b0382811660008181526001602052604080822080546001600160a01b0319169486169485179055517f2e103aa707acc565f9a1547341914802b2bfe977fd79c595209f248ae4b006139190a35050565b6001600160a01b0380821660009081526001602052604090205416806106be57507f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae235b919050565b333214610712576040805162461bcd60e51b815260206004820152601860248201527743726f6e614d616b65723a206d7573742075736520454f4160401b604482015290519081900360640190fd5b61071c8282610846565b5050565b7f00000000000000000000000073a48f8f521eb31c55c0e1274db0898de599cb1181565b61074c610b44565b6001600160a01b031661075d6104d0565b6001600160a01b0316146107a6576040805162461bcd60e51b815260206004820181905260248201526000805160206116c8833981519152604482015290519081900360640190fd5b6001600160a01b0381166107eb5760405162461bcd60e51b81526004018080602001828103825260268152602001806116a26026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60007f00000000000000000000000073a48f8f521eb31c55c0e1274db0898de599cb116001600160a01b031663e6a4390584846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156108c657600080fd5b505afa1580156108da573d6000803e3d6000fd5b505050506040513d60208110156108f057600080fd5b505190506001600160a01b03811661094f576040805162461bcd60e51b815260206004820152601860248201527f43726f6e614d616b65723a20496e76616c696420706169720000000000000000604482015290519081900360640190fd5b6109dd81826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156109a057600080fd5b505afa1580156109b4573d6000803e3d6000fd5b505050506040513d60208110156109ca57600080fd5b50516001600160a01b0384169190610b48565b600080826001600160a01b03166389afcb44306040518263ffffffff1660e01b815260040180826001600160a01b031681526020019150506040805180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d6040811015610a5857600080fd5b50805160209182015160408051630dfe168160e01b815290519295509093506001600160a01b03861692630dfe168192600480840193829003018186803b158015610aa257600080fd5b505afa158015610ab6573d6000803e3d6000fd5b505050506040513d6020811015610acc57600080fd5b50516001600160a01b03868116911614610ae257905b6001600160a01b03808516908616337fd06b1d7ed79b664d17472c6f6997b929f1abe463ccccb4e5b6a0038f2f730c158585610b208b8b8484610cb2565b60408051938452602084019290925282820152519081900360600190a45050505050565b3390565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610bc55780518252601f199092019160209182019101610ba6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610c27576040519150601f19603f3d011682016040523d82523d6000602084013e610c2c565b606091505b5091509150818015610c5a575080511580610c5a5750808060200190516020811015610c5757600080fd5b50515b610cab576040805162461bcd60e51b815260206004820152601a60248201527f5361666545524332303a205472616e73666572206661696c6564000000000000604482015290519081900360640190fd5b5050505050565b6000836001600160a01b0316856001600160a01b03161415610e0f576000610cda8484611123565b90507f000000000000000000000000adbd1231fb360047525bedf962581f3eee7b49fe6001600160a01b0316866001600160a01b03161415610d7257610d6a6001600160a01b037f000000000000000000000000adbd1231fb360047525bedf962581f3eee7b49fe167f000000000000000000000000b6e6d031db616cf8ac338293dc2ecfa0f01c55ec83610b48565b809150610e09565b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b0316866001600160a01b03161415610ddd57610dd67f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae238261117a565b9150610e09565b6000610de88761067b565b9050610df6878284306111cf565b9150610e058182846000610cb2565b9250505b5061111b565b7f000000000000000000000000adbd1231fb360047525bedf962581f3eee7b49fe6001600160a01b0316856001600160a01b03161415610eb857610e9d6001600160a01b037f000000000000000000000000adbd1231fb360047525bedf962581f3eee7b49fe167f000000000000000000000000b6e6d031db616cf8ac338293dc2ecfa0f01c55ec85610b48565b610eb183610eab868561117a565b90611123565b905061111b565b7f000000000000000000000000adbd1231fb360047525bedf962581f3eee7b49fe6001600160a01b0316846001600160a01b03161415610f5457610f466001600160a01b037f000000000000000000000000adbd1231fb360047525bedf962581f3eee7b49fe167f000000000000000000000000b6e6d031db616cf8ac338293dc2ecfa0f01c55ec84610b48565b610eb182610eab878661117a565b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b0316856001600160a01b03161415610fe757610eb17f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23610fe285610eab887f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae2388306111cf565b61117a565b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b0316846001600160a01b0316141561107557610eb17f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23610fe284610eab897f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae2389306111cf565b60006110808661067b565b9050600061108d8661067b565b9050856001600160a01b0316826001600160a01b031614156110c7576110c082876110ba8a868a306111cf565b87610cb2565b9250611118565b866001600160a01b0316816001600160a01b031614156110f8576110c08782876110f38a868a306111cf565b610cb2565b61111582826111098a868a306111cf565b6110f38a868a306111cf565b92505b50505b949350505050565b81810181811015611174576040805162461bcd60e51b8152602060048201526016602482015275536166654d6174683a20416464204f766572666c6f7760501b604482015290519081900360640190fd5b92915050565b60006111c8837f000000000000000000000000c21223249ca28397b4b6541dffaecc539bff0c59847f000000000000000000000000b6e6d031db616cf8ac338293dc2ecfa0f01c55ec6111cf565b9392505050565b6000807f00000000000000000000000073a48f8f521eb31c55c0e1274db0898de599cb116001600160a01b031663e6a4390587876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561125057600080fd5b505afa158015611264573d6000803e3d6000fd5b505050506040513d602081101561127a57600080fd5b505190506001600160a01b0381166112d9576040805162461bcd60e51b815260206004820152601a60248201527f43726f6e614d616b65723a2043616e6e6f7420636f6e76657274000000000000604482015290519081900360640190fd5b600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561131557600080fd5b505afa158015611329573d6000803e3d6000fd5b505050506040513d606081101561133f57600080fd5b5080516020909101516dffffffffffffffffffffffffffff9182169350169050600061136d876126f761163c565b9050836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156113a857600080fd5b505afa1580156113bc573d6000803e3d6000fd5b505050506040513d60208110156113d257600080fd5b50516001600160a01b038a81169116141561150d576113f781610eab8561271061163c565b611401828461163c565b8161140857fe5b04945061141f6001600160a01b038a168589610b48565b604080516000808252602082019283905263022c0d9f60e01b835260248201818152604483018990526001600160a01b038a81166064850152608060848501908152845160a48601819052918a169563022c0d9f958c948e9491939092909160c4850191908083838b5b838110156114a1578181015183820152602001611489565b50505050905090810190601f1680156114ce5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156114f057600080fd5b505af1158015611504573d6000803e3d6000fd5b50505050611630565b61151d81610eab8461271061163c565b611527828561163c565b8161152e57fe5b0494506115456001600160a01b038a168589610b48565b604080516000808252602082019283905263022c0d9f60e01b835260248201888152604483018290526001600160a01b038a81166064850152608060848501908152845160a48601819052918a169563022c0d9f958c95948e9491939092909160c4850191908083838a5b838110156115c85781810151838201526020016115b0565b50505050905090810190601f1680156115f55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561161757600080fd5b505af115801561162b573d6000803e3d6000fd5b505050505b50505050949350505050565b60008115806116575750508082028282828161165457fe5b04145b611174576040805162461bcd60e51b8152602060048201526016602482015275536166654d6174683a204d756c204f766572666c6f7760501b604482015290519081900360640190fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220f3bfb9ba7ea215b248168b7942899ed8db930570e8e48203ff55aa7b6d44712b64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000073a48f8f521eb31c55c0e1274db0898de599cb11000000000000000000000000b6e6d031db616cf8ac338293dc2ecfa0f01c55ec000000000000000000000000adbd1231fb360047525bedf962581f3eee7b49fe000000000000000000000000c21223249ca28397b4b6541dffaecc539bff0c590000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
-----Decoded View---------------
Arg [0] : _factory (address): 0x73A48f8f521EB31c55c0e1274dB0898dE599Cb11
Arg [1] : _dest (address): 0xB6E6d031db616cF8aC338293dC2ecFa0F01C55EC
Arg [2] : _crona (address): 0xadbd1231fb360047525BEdF962581F3eee7b49fe
Arg [3] : _usdc (address): 0xc21223249CA28397B4B6541dfFaEcC539BfF0c59
Arg [4] : _wcro (address): 0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000073a48f8f521eb31c55c0e1274db0898de599cb11
Arg [1] : 000000000000000000000000b6e6d031db616cf8ac338293dc2ecfa0f01c55ec
Arg [2] : 000000000000000000000000adbd1231fb360047525bedf962581f3eee7b49fe
Arg [3] : 000000000000000000000000c21223249ca28397b4b6541dffaecc539bff0c59
Arg [4] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
Deployed Bytecode Sourcemap
12526:9117:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15646:360;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15646:360:0;;-1:-1:-1;15646:360:0;-1:-1:-1;15646:360:0;:::i;:::-;;21410:230;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21410:230:0;;;;;;;;:::i;11319:148::-;;;:::i;12771:29::-;;;:::i;:::-;;;;-1:-1:-1;;;;;12771:29:0;;;;;;;;;;;;;;10668:87;;;:::i;14250:333::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14250:333:0;;;;;;;;;;:::i;14010:190::-;;;;;;;;;;;;;;;;-1:-1:-1;14010:190:0;-1:-1:-1;;;;;14010:190:0;;:::i;15424:111::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15424:111:0;;;;;;;;;;:::i;12652:42::-;;;:::i;11622:244::-;;;;;;;;;;;;;;;;-1:-1:-1;11622:244:0;-1:-1:-1;;;;;11622:244:0;;:::i;15646:360::-;14877:10;14891:9;14877:23;14869:60;;;;;-1:-1:-1;;;14869:60:0;;;;;;;;;;;;-1:-1:-1;;;14869:60:0;;;;;;;;;;;;;;;15884:6;15870:11:::1;15908:91;15932:3;15928:1;:7;15908:91;;;15957:30;15966:6;;15973:1;15966:9;;;;;;;;;;;;;-1:-1:-1::0;;;;;15966:9:0::1;15977:6;;15984:1;15977:9;;;;;;;;;;;;;-1:-1:-1::0;;;;;15977:9:0::1;15957:8;:30::i;:::-;15937:3;;15908:91;;;;14940:1;15646:360:::0;;;;:::o;21410:230::-;10899:12;:10;:12::i;:::-;-1:-1:-1;;;;;10888:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10888:23:0;;10880:68;;;;;-1:-1:-1;;;10880:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10880:68:0;;;;;;;;;;;;;;;21513:54:::1;-1:-1:-1::0;;;;;21513:34:0;::::1;21548:4;21554:12:::0;21513:34:::1;:54::i;:::-;21585:47;::::0;;-1:-1:-1;;;;;21585:47:0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;21410:230:::0;;:::o;11319:148::-;10899:12;:10;:12::i;:::-;-1:-1:-1;;;;;10888:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10888:23:0;;10880:68;;;;;-1:-1:-1;;;10880:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10880:68:0;;;;;;;;;;;;;;;11426:1:::1;11410:6:::0;;11389:40:::1;::::0;-1:-1:-1;;;;;11410:6:0;;::::1;::::0;11389:40:::1;::::0;11426:1;;11389:40:::1;11457:1;11440:19:::0;;-1:-1:-1;;;;;;11440:19:0::1;::::0;;11319:148::o;12771:29::-;;;:::o;10668:87::-;10714:7;10741:6;-1:-1:-1;;;;;10741:6:0;10668:87;:::o;14250:333::-;10899:12;:10;:12::i;:::-;-1:-1:-1;;;;;10888:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10888:23:0;;10880:68;;;;;-1:-1:-1;;;10880:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10880:68:0;;;;;;;;;;;;;;;14380:5:::1;-1:-1:-1::0;;;;;14371:14:0::1;:5;-1:-1:-1::0;;;;;14371:14:0::1;;;:31;;;;;14398:4;-1:-1:-1::0;;;;;14389:13:0::1;:5;-1:-1:-1::0;;;;;14389:13:0::1;;;14371:31;:50;;;;;14415:6;-1:-1:-1::0;;;;;14406:15:0::1;:5;-1:-1:-1::0;;;;;14406:15:0::1;;;14371:50;14349:126;;;::::0;;-1:-1:-1;;;14349:126:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;14508:15:0;;::::1;;::::0;;;:8:::1;:15;::::0;;;;;:24;;-1:-1:-1;;;;;;14508:24:0::1;::::0;;::::1;::::0;;::::1;::::0;;14548:27;::::1;::::0;14508:15;14548:27:::1;14250:333:::0;;:::o;14010:190::-;-1:-1:-1;;;;;14101:15:0;;;14065:14;14101:15;;;:8;:15;;;;;;;14131:20;14127:66;;-1:-1:-1;14177:4:0;14127:66;14010:190;;;:::o;15424:111::-;14877:10;14891:9;14877:23;14869:60;;;;;-1:-1:-1;;;14869:60:0;;;;;;;;;;;;-1:-1:-1;;;14869:60:0;;;;;;;;;;;;;;;15503:24:::1;15512:6;15520;15503:8;:24::i;:::-;15424:111:::0;;:::o;12652:42::-;;;:::o;11622:244::-;10899:12;:10;:12::i;:::-;-1:-1:-1;;;;;10888:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10888:23:0;;10880:68;;;;;-1:-1:-1;;;10880:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10880:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;11711:22:0;::::1;11703:73;;;;-1:-1:-1::0;;;11703:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11813:6;::::0;;11792:38:::1;::::0;-1:-1:-1;;;;;11792:38:0;;::::1;::::0;11813:6;::::1;::::0;11792:38:::1;::::0;::::1;11841:6;:17:::0;;-1:-1:-1;;;;;;11841:17:0::1;-1:-1:-1::0;;;;;11841:17:0;;;::::1;::::0;;;::::1;::::0;;11622:244::o;16055:878::-;16174:19;16211:7;-1:-1:-1;;;;;16211:15:0;;16227:6;16235;16211:31;;;;;;;;;;;;;-1:-1:-1;;;;;16211:31:0;;;;;;-1:-1:-1;;;;;16211:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16211:31:0;;-1:-1:-1;;;;;;16262:27:0;;16254:64;;;;;-1:-1:-1;;;16254:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16398:117;16455:4;16475;-1:-1:-1;;;;;16475:14:0;;16498:4;16475:29;;;;;;;;;;;;;-1:-1:-1;;;;;16475:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16475:29:0;-1:-1:-1;;;;;16398:34:0;;;:117;:34;:117::i;:::-;16551:15;16568;16587:4;-1:-1:-1;;;;;16587:9:0;;16605:4;16587:24;;;;;;;;;;;;;-1:-1:-1;;;;;16587:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16587:24:0;;;;;;;;16636:13;;-1:-1:-1;;;16636:13:0;;;;16587:24;;-1:-1:-1;16587:24:0;;-1:-1:-1;;;;;;16636:11:0;;;;;:13;;;;;;;;;;:11;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16636:13:0;-1:-1:-1;;;;;16626:23:0;;;;;;16622:95;;16688:7;16622:95;-1:-1:-1;;;;;16732:193:0;;;;;;16757:10;16732:193;16824:7;16846;16868:46;16782:6;16803;16824:7;16846;16868:12;:46::i;:::-;16732:193;;;;;;;;;;;;;;;;;;;;;;;;;;16055:878;;;;;:::o;9133:106::-;9221:10;9133:106;:::o;3138:302::-;3278:46;;;-1:-1:-1;;;;;3278:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3278:46:0;-1:-1:-1;;;3278:46:0;;;3258:67;;;;3223:12;;3237:17;;3258:19;;;;3278:46;3258:67;;;3278:46;3258:67;;3278:46;3258:67;;;;;;;;;;-1:-1:-1;;3258:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3222:103;;;;3344:7;:57;;;;-1:-1:-1;3356:11:0;;:16;;:44;;;3387:4;3376:24;;;;;;;;;;;;;;;-1:-1:-1;3376:24:0;3356:44;3336:96;;;;;-1:-1:-1;;;3336:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3138:302;;;;;:::o;17052:2705::-;17201:16;17269:6;-1:-1:-1;;;;;17259:16:0;:6;-1:-1:-1;;;;;17259:16:0;;17255:2495;;;17292:14;17309:20;:7;17321;17309:11;:20::i;:::-;17292:37;;17358:5;-1:-1:-1;;;;;17348:15:0;:6;-1:-1:-1;;;;;17348:15:0;;17344:442;;;17384:40;-1:-1:-1;;;;;17391:5:0;17384:26;17411:4;17417:6;17384:26;:40::i;:::-;17454:6;17443:17;;17344:442;;;17496:4;-1:-1:-1;;;;;17486:14:0;:6;-1:-1:-1;;;;;17486:14:0;;17482:304;;;17532:22;17541:4;17547:6;17532:8;:22::i;:::-;17521:33;;17482:304;;;17595:14;17612:17;17622:6;17612:9;:17::i;:::-;17595:34;;17657:44;17663:6;17671;17679;17695:4;17657:5;:44::i;:::-;17648:53;;17731:39;17744:6;17752;17760;17768:1;17731:12;:39::i;:::-;17720:50;;17482:304;;17255:2495;;;;17817:5;-1:-1:-1;;;;;17807:15:0;:6;-1:-1:-1;;;;;17807:15:0;;17803:1947;;;17871:41;-1:-1:-1;;;;;17878:5:0;17871:26;17898:4;17904:7;17871:26;:41::i;:::-;17938:38;17968:7;17938:25;17947:6;17955:7;17938:8;:25::i;:::-;:29;;:38::i;:::-;17927:49;;17803:1947;;;18008:5;-1:-1:-1;;;;;17998:15:0;:6;-1:-1:-1;;;;;17998:15:0;;17994:1756;;;18063:41;-1:-1:-1;;;;;18070:5:0;18063:26;18090:4;18096:7;18063:26;:41::i;:::-;18130:38;18160:7;18130:25;18139:6;18147:7;18130:8;:25::i;17994:1756::-;18200:4;-1:-1:-1;;;;;18190:14:0;:6;-1:-1:-1;;;;;18190:14:0;;18186:1564;;;18263:121;18290:4;18313:56;18361:7;18313:43;18319:6;18327:4;18333:7;18350:4;18313:5;:43::i;:56::-;18263:8;:121::i;18186:1564::-;18416:4;-1:-1:-1;;;;;18406:14:0;:6;-1:-1:-1;;;;;18406:14:0;;18402:1348;;;18479:121;18506:4;18529:56;18577:7;18529:43;18535:6;18543:4;18549:7;18566:4;18529:5;:43::i;18402:1348::-;18664:15;18682:17;18692:6;18682:9;:17::i;:::-;18664:35;;18714:15;18732:17;18742:6;18732:9;:17::i;:::-;18714:35;;18779:6;-1:-1:-1;;;;;18768:17:0;:7;-1:-1:-1;;;;;18768:17:0;;18764:975;;;18880:189;18915:7;18945:6;18974:46;18980:6;18988:7;18997;19014:4;18974:5;:46::i;:::-;19043:7;18880:12;:189::i;:::-;18869:200;;18764:975;;;19106:6;-1:-1:-1;;;;;19095:17:0;:7;-1:-1:-1;;;;;19095:17:0;;19091:648;;;19207:189;19242:6;19271:7;19301;19331:46;19337:6;19345:7;19354;19371:4;19331:5;:46::i;:::-;19207:12;:189::i;19091:648::-;19448:275;19483:7;19513;19589:46;19595:6;19603:7;19612;19629:4;19589:5;:46::i;:::-;19658;19664:6;19672:7;19681;19698:4;19658:5;:46::i;19448:275::-;19437:286;;19091:648;18402:1348;;;17052:2705;;;;;;:::o;268:123::-;351:5;;;346:16;;;;338:51;;;;;-1:-1:-1;;;338:51:0;;;;;;;;;;;;-1:-1:-1;;;338:51:0;;;;;;;;;;;;;;;268:123;;;;:::o;21141:261::-;21228:17;21360:34;21366:5;21373:4;21379:8;21389:4;21360:5;:34::i;:::-;21348:46;21141:261;-1:-1:-1;;;21141:261:0:o;19851:1240::-;19993:17;20066:19;20116:7;-1:-1:-1;;;;;20116:15:0;;20132:9;20143:7;20116:35;;;;;;;;;;;;;-1:-1:-1;;;;;20116:35:0;;;;;;-1:-1:-1;;;;;20116:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20116:35:0;;-1:-1:-1;;;;;;20171:27:0;;20163:66;;;;;-1:-1:-1;;;20163:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20292:16;20310;20332:4;-1:-1:-1;;;;;20332:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20332:18:0;;;;;;;20291:59;;;;;-1:-1:-1;20291:59:0;;-1:-1:-1;20361:23:0;20387:18;:8;20400:4;20387:12;:18::i;:::-;20361:44;;20433:4;-1:-1:-1;;;;;20433:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20433:13:0;-1:-1:-1;;;;;20420:26:0;;;;;;20416:668;;;20541:40;20565:15;20541:19;:8;20554:5;20541:12;:19::i;:40::-;20492:29;:15;20512:8;20492:19;:29::i;:::-;:89;;;;;;;-1:-1:-1;20596:55:0;-1:-1:-1;;;;;20596:30:0;;20635:4;20642:8;20596:30;:55::i;:::-;20694:12;;;20676:1;20694:12;;;;;;;;;;-1:-1:-1;;;20666:41:0;;;;;;;;;;;;;;-1:-1:-1;;;;;20666:41:0;;;;;;;;;;;;;;;;;;;;;;:9;;;;;;20679;;20690:2;;20694:12;;20666:41;;;;;;;;20694:12;20666:41;;20694:12;20676:1;20666:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20416:668;;;20862:40;20886:15;20862:19;:8;20875:5;20862:12;:19::i;:40::-;20813:29;:15;20833:8;20813:19;:29::i;:::-;:89;;;;;;;-1:-1:-1;20917:55:0;-1:-1:-1;;;;;20917:30:0;;20956:4;20963:8;20917:30;:55::i;:::-;21015:12;;;21008:1;21015:12;;;;;;;;;;-1:-1:-1;;;20987:41:0;;;;;;;;;;;;;;-1:-1:-1;;;;;20987:41:0;;;;;;;;;;;;;;;;;;;;;;:9;;;;;;20997;;21008:1;21011:2;;21015:12;;20987:41;;;;;;;;21015:12;20987:41;;21015:12;21008:1;20987:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20416:668;19851:1240;;;;;;;;;;:::o;523:135::-;581:9;601:6;;;:28;;-1:-1:-1;;616:5:0;;;628:1;623;616:5;623:1;611:13;;;;;:18;601:28;593:63;;;;;-1:-1:-1;;;593:63:0;;;;;;;;;;;;-1:-1:-1;;;593:63:0;;;;;;;;;;;;;
Swarm Source
ipfs://f3bfb9ba7ea215b248168b7942899ed8db930570e8e48203ff55aa7b6d44712b
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.