More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x42dd06b02e056ac19ccdcecaab20b82ae3d177f26792f1fe065d9d7e0fe716d9 | Buy Token | (pending) | 46 secs ago | IN | 0.004455 ETH | (Pending) | |||
0xbe76ab7f7c9a6a336a29200412a2d74d1d0a51379503e79d969c18f1727972c0 | Buy Token | (pending) | 22 hrs ago | IN | 0.0036 ETH | (Pending) | |||
Buy Token | 22313414 | 40 mins ago | IN | 0.00008 ETH | 0.00007961 | ||||
Buy Token | 22313337 | 56 mins ago | IN | 0.53 ETH | 0.00012155 | ||||
Buy Token | 22313336 | 56 mins ago | IN | 0.012246 ETH | 0.0000767 | ||||
Buy Token | 22313321 | 1 hrs ago | IN | 0.043 ETH | 0.00008148 | ||||
Buy Token | 22313277 | 1 hr ago | IN | 0.04 ETH | 0.00012298 | ||||
Buy Token | 22313187 | 1 hr ago | IN | 0.2482 ETH | 0.00007927 | ||||
Buy Token | 22313074 | 1 hr ago | IN | 0 ETH | 0.0000956 | ||||
Buy Token | 22313074 | 1 hr ago | IN | 0.0261 ETH | 0.00004741 | ||||
Buy Token | 22313062 | 1 hr ago | IN | 0.001028 ETH | 0.00025259 | ||||
Buy Token | 22313021 | 2 hrs ago | IN | 0.6229 ETH | 0.00007882 | ||||
Buy Token | 22312998 | 2 hrs ago | IN | 0.061 ETH | 0.00003346 | ||||
Buy Token | 22312935 | 2 hrs ago | IN | 0.02487 ETH | 0.00003727 | ||||
Buy Token | 22312924 | 2 hrs ago | IN | 0.03 ETH | 0.00007883 | ||||
Buy Token | 22312872 | 2 hrs ago | IN | 0.255 ETH | 0.00008382 | ||||
Buy Token | 22312866 | 2 hrs ago | IN | 0.01 ETH | 0.00007588 | ||||
Buy Token | 22312835 | 2 hrs ago | IN | 0.8 ETH | 0.00007984 | ||||
Buy Token | 22312829 | 2 hrs ago | IN | 0.008915 ETH | 0.0000795 | ||||
Buy Token | 22312815 | 2 hrs ago | IN | 0.061 ETH | 0.00007352 | ||||
Buy Token | 22312808 | 2 hrs ago | IN | 0.001 ETH | 0.00007894 | ||||
Buy Token | 22312719 | 3 hrs ago | IN | 0.02413 ETH | 0.00004117 | ||||
Buy Token | 22312677 | 3 hrs ago | IN | 0.056247 ETH | 0.00021166 | ||||
Buy Token | 22312599 | 3 hrs ago | IN | 0.001 ETH | 0.00012544 | ||||
Buy Token | 22312572 | 3 hrs ago | IN | 0.06 ETH | 0.00012927 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Transfer | 22313414 | 40 mins ago | 0.000076 ETH | ||||
Transfer | 22313414 | 40 mins ago | 0.000004 ETH | ||||
Transfer | 22313337 | 56 mins ago | 0.5035 ETH | ||||
Transfer | 22313337 | 56 mins ago | 0.0265 ETH | ||||
Transfer | 22313336 | 56 mins ago | 0.0116337 ETH | ||||
Transfer | 22313336 | 56 mins ago | 0.0006123 ETH | ||||
Transfer | 22313321 | 1 hrs ago | 0.04085 ETH | ||||
Transfer | 22313321 | 1 hrs ago | 0.00215 ETH | ||||
Transfer | 22313277 | 1 hr ago | 0.038 ETH | ||||
Transfer | 22313277 | 1 hr ago | 0.002 ETH | ||||
Transfer | 22313187 | 1 hr ago | 0.23579 ETH | ||||
Transfer | 22313187 | 1 hr ago | 0.01241 ETH | ||||
Transfer | 22313074 | 1 hr ago | 0.024795 ETH | ||||
Transfer | 22313074 | 1 hr ago | 0.001305 ETH | ||||
Transfer | 22313062 | 1 hr ago | 0.0009766 ETH | ||||
Transfer | 22313062 | 1 hr ago | 0.0000514 ETH | ||||
Transfer | 22313021 | 2 hrs ago | 0.591755 ETH | ||||
Transfer | 22313021 | 2 hrs ago | 0.031145 ETH | ||||
Transfer | 22312998 | 2 hrs ago | 0.05795 ETH | ||||
Transfer | 22312998 | 2 hrs ago | 0.00305 ETH | ||||
Transfer | 22312935 | 2 hrs ago | 0.0236265 ETH | ||||
Transfer | 22312935 | 2 hrs ago | 0.0012435 ETH | ||||
Transfer | 22312924 | 2 hrs ago | 0.0285 ETH | ||||
Transfer | 22312924 | 2 hrs ago | 0.0015 ETH | ||||
Transfer | 22312872 | 2 hrs ago | 0.24225 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
LightchainPresale
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-11-26 */ // SPDX-License-Identifier: MIT /* _ _ _ _ _ _ _ ___ | | (_) __ _| |__ | |_ ___| |__ __ _(_)_ __ / \ |_ _| | | | |/ _` | '_ \| __/ __| '_ \ / _` | | '_ \ / _ \ | | | |___| | (_| | | | | || (__| | | | (_| | | | | | / ___ \ | | |_____|_|\__, |_| |_|\__\___|_| |_|\__,_|_|_| |_| /_/ \_\___| |___/ */ pragma solidity ^0.8.20; /** * @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 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) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File @openzeppelin/contracts/access/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; abstract contract Ownable is Context { address private immutable _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev Initializes the contract setting the deployer as the owner. */ constructor(address initialOwner) { require(initialOwner != address(0), "Ownable: Invalid owner address"); _owner = initialOwner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { if (_owner != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } } // File @openzeppelin/contracts/token/ERC20/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 ); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 value ) external returns (bool); } // File @openzeppelin/contracts/utils/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol) pragma solidity ^0.8.20; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev The ETH balance of the account is not enough to perform the operation. */ error AddressInsufficientBalance(address account); /** * @dev There's no code at `target` (it is not a contract). */ error AddressEmptyCode(address target); /** * @dev A call to an address target failed. The target may have reverted. */ error FailedInnerCall(); /** * @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://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { if (address(this).balance < amount) { revert AddressInsufficientBalance(address(this)); } (bool success, ) = recipient.call{value: amount}(""); if (!success) { revert FailedInnerCall(); } } /** * @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 or custom error, it is bubbled * up by this function (like regular Solidity function calls). However, if * the call reverted with no returned reason, this function reverts with a * {FailedInnerCall} error. * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. */ function functionCall( address target, bytes memory data ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0); } /** * @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`. */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { if (address(this).balance < value) { revert AddressInsufficientBalance(address(this)); } (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. */ function functionStaticCall( address target, bytes memory data ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. */ function functionDelegateCall( address target, bytes memory data ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an * unsuccessful call. */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata ) internal view returns (bytes memory) { if (!success) { _revert(returndata); } else { // only check if target is a contract if the call was successful and the return data is empty // otherwise we already know that it was a contract if (returndata.length == 0 && target.code.length == 0) { revert AddressEmptyCode(target); } return returndata; } } /** * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the * revert reason or with a default {FailedInnerCall} error. */ function verifyCallResult( bool success, bytes memory returndata ) internal pure returns (bytes memory) { if (!success) { _revert(returndata); } else { return returndata; } } /** * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}. */ function _revert(bytes memory returndata) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert FailedInnerCall(); } } } // File @openzeppelin/contracts/token/ERC20/utils/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.20; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; /** * @dev An operation with an ERC20 token failed. */ error SafeERC20FailedOperation(address token); /** * @dev Indicates a failed `decreaseAllowance` request. */ error SafeERC20FailedDecreaseAllowance( address spender, uint256 currentAllowance, uint256 requestedDecrease ); /** * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value))); } /** * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful. */ function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeCall(token.transferFrom, (from, to, value)) ); } /** * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 oldAllowance = token.allowance(address(this), spender); forceApprove(token, spender, oldAllowance + value); } /** * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no * value, non-reverting calls are assumed to be successful. */ function safeDecreaseAllowance( IERC20 token, address spender, uint256 requestedDecrease ) internal { unchecked { uint256 currentAllowance = token.allowance(address(this), spender); if (currentAllowance < requestedDecrease) { revert SafeERC20FailedDecreaseAllowance( spender, currentAllowance, requestedDecrease ); } forceApprove(token, spender, currentAllowance - requestedDecrease); } } /** * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval * to be set to zero before setting it to a non-zero value, such as USDT. */ function forceApprove( IERC20 token, address spender, uint256 value ) internal { bytes memory approvalCall = abi.encodeCall( token.approve, (spender, value) ); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn( token, abi.encodeCall(token.approve, (spender, 0)) ); _callOptionalReturn(token, approvalCall); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data); if (returndata.length != 0 && !abi.decode(returndata, (bool))) { revert SafeERC20FailedOperation(address(token)); } } /** * @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). * * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead. */ function _callOptionalReturnBool( IERC20 token, bytes memory data ) private returns (bool) { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false // and not revert is the subcall reverts. (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0; } } pragma solidity ^0.8.0; interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } // Original license: SPDX_License_Identifier: MIT pragma solidity ^0.8.20; contract LightchainPresale is Ownable { using SafeERC20 for IERC20; using SafeERC20 for IERC20Metadata; uint256 public rate; address public saleToken; uint public saleTokenDec; uint256 public totalTokensforSale; mapping(address => bool) public payableTokens; mapping(address => uint256) public tokenPrices; bool public saleStatus; address[] public buyers; mapping(address => bool) public buyersExists; mapping(address => uint256) public buyersAmount; uint256 public totalBuyers; uint256 public totalTokensSold; address public ICO; address public DEV; struct BuyerDetails { address buyer; uint amount; } event BuyToken( address indexed buyer, address indexed token, uint256 paidAmount, uint256 purchasedAmount ); constructor( address _ICO, address _DEV ) Ownable(msg.sender) { saleStatus = false; ICO = _ICO; DEV = _DEV; } modifier saleEnabled() { require(saleStatus == true, "LightchainAI: is not enabled"); _; } modifier saleStoped() { require(saleStatus == false, "LightchainAI: is not stopped"); _; } function setSaleToken( address _saleToken, uint256 _totalTokensforSale, uint256 _rate, bool _saleStatus ) external onlyOwner { require(_rate != 0); rate = _rate; saleToken = _saleToken; saleStatus = _saleStatus; saleTokenDec = IERC20Metadata(_saleToken).decimals(); totalTokensforSale = _totalTokensforSale; IERC20(_saleToken).safeTransferFrom( msg.sender, address(this), _totalTokensforSale ); } function stopSale() external onlyOwner saleEnabled { saleStatus = false; } function resumeSale() external onlyOwner saleStoped { saleStatus = true; } function addPayableTokens( address[] memory _tokens, uint256[] memory _prices ) external onlyOwner { require( _tokens.length == _prices.length, "LightchainAI: tokens & prices arrays length mismatch" ); for (uint256 i = 0; i < _tokens.length; i++) { require(_prices[i] != 0); payableTokens[_tokens[i]] = true; tokenPrices[_tokens[i]] = _prices[i]; } } function payableTokenStatus( address _token, bool _status ) external onlyOwner { require(payableTokens[_token] != _status); payableTokens[_token] = _status; } function updateTokenRate( address[] memory _tokens, uint256[] memory _prices, uint256 _rate ) external onlyOwner { require( _tokens.length == _prices.length, "LightchainAI: tokens & prices arrays length mismatch" ); if (_rate != 0) { rate = _rate; } for (uint256 i = 0; i < _tokens.length; i += 1) { require(payableTokens[_tokens[i]] == true); require(_prices[i] != 0); tokenPrices[_tokens[i]] = _prices[i]; } } function getTokenAmount( address token, uint256 amount ) public view returns (uint256) { uint256 amtOut; if (token != address(0)) { require( payableTokens[token] == true, "LightchainAI: Token not allowed" ); uint256 price = tokenPrices[token]; amtOut = (amount * (10 ** saleTokenDec)) / (price); } else { amtOut = (amount * (10 ** saleTokenDec)) / (rate); } return amtOut; } function getPayAmount( address token, uint256 amount ) public view returns (uint256) { uint256 amtOut; if (token != address(0)) { require( payableTokens[token] == true, "LightchainAI: Token not allowed" ); uint256 price = tokenPrices[token]; amtOut = (amount * (price)) / (10 ** saleTokenDec); } else { amtOut = (amount * (rate)) / (10 ** saleTokenDec); } return amtOut; } function transferETH(uint256 _amount) internal { uint256 DEVAmt = (_amount * 5) / 100; payable(DEV).transfer(DEVAmt); payable(ICO).transfer(_amount - DEVAmt); } function transferToken(address _token, uint256 _amount) internal { uint256 DEVAmt = (_amount * 5) / 100; IERC20(_token).safeTransferFrom( msg.sender, DEV, DEVAmt ); IERC20(_token).safeTransferFrom( msg.sender, ICO, _amount - DEVAmt ); } function buyToken( address _token, uint256 _amount ) external payable saleEnabled { uint256 amount = _token != address(0) ? _amount : msg.value; uint256 saleTokenAmt = getTokenAmount(_token, amount); require(saleTokenAmt != 0, "LightchainAI: Amount is 0"); require( (totalTokensSold + saleTokenAmt) < totalTokensforSale, "LightchainAI: Not enough tokens to be sold" ); if (_token != address(0)) { transferToken(_token, _amount); } else { transferETH(msg.value); } IERC20(saleToken).safeTransfer(msg.sender, saleTokenAmt); totalTokensSold += saleTokenAmt; if (!buyersExists[msg.sender]) { buyers.push(msg.sender); buyersExists[msg.sender] = true; totalBuyers += 1; } buyersAmount[msg.sender] += saleTokenAmt; emit BuyToken(msg.sender, _token, amount, saleTokenAmt); } function buyersDetailsList( uint _from, uint _to ) external view returns (BuyerDetails[] memory) { require(_from < _to, "LightchainAI: _from should be less than _to"); uint to = _to > totalBuyers ? totalBuyers : _to; uint from = _from > totalBuyers ? totalBuyers : _from; BuyerDetails[] memory buyersAmt = new BuyerDetails[](to - from); for (uint i = from; i < to; i += 1) { buyersAmt[i] = BuyerDetails(buyers[i], buyersAmount[buyers[i]]); } return buyersAmt; } function withdrawFunds(address token, uint256 amount) external onlyOwner { if (token == address(0)) { // Withdraw Ether uint256 balance = address(this).balance; require( balance >= amount, "LCAIPresale: Insufficient Ether balance" ); payable(owner()).transfer(amount); } else { // Withdraw ERC20 tokens uint256 balance = IERC20(token).balanceOf(address(this)); require( balance >= amount, "LCAIPresale: Insufficient token balance" ); IERC20(token).safeTransfer(owner(), amount); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_ICO","type":"address"},{"internalType":"address","name":"_DEV","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"paidAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"purchasedAmount","type":"uint256"}],"name":"BuyToken","type":"event"},{"inputs":[],"name":"DEV","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ICO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"}],"name":"addPayableTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buyToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buyersAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"buyersDetailsList","outputs":[{"components":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct LightchainPresale.BuyerDetails[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buyersExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getPayAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"payableTokenStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"payableTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resumeSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleTokenDec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_saleToken","type":"address"},{"internalType":"uint256","name":"_totalTokensforSale","type":"uint256"},{"internalType":"uint256","name":"_rate","type":"uint256"},{"internalType":"bool","name":"_saleStatus","type":"bool"}],"name":"setSaleToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenPrices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensforSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"},{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"updateTokenRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405234801561000f575f80fd5b506040516133e73803806133e7833981810160405281019061003191906101d3565b335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100979061026b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505f60065f6101000a81548160ff02191690831515021790555081600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050610289565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101a282610179565b9050919050565b6101b281610198565b81146101bc575f80fd5b50565b5f815190506101cd816101a9565b92915050565b5f80604083850312156101e9576101e8610175565b5b5f6101f6858286016101bf565b9250506020610207858286016101bf565b9150509250929050565b5f82825260208201905092915050565b7f4f776e61626c653a20496e76616c6964206f776e6572206164647265737300005f82015250565b5f610255601e83610211565b915061026082610221565b602082019050919050565b5f6020820190508181035f83015261028281610249565b9050919050565b6080516131156102d25f395f81816107d80152818161092b01528181610b4e01528181610c5c01528181610e1a01528181611600015281816117cd0152611a5101526131155ff3fe608060405260043610610180575f3560e01c80636bcedf9c116100d0578063ba41b21011610089578063e36b0b3711610063578063e36b0b3714610572578063e985e36714610588578063f2aa8218146105b2578063f9020e33146105ee57610180565b8063ba41b210146104e4578063c107532914610520578063c1eb5ddd1461054857610180565b80636bcedf9c146103b257806376ca67a5146103dc57806380655eef146104185780638da5cb5b146104545780639344f5c11461047e578063ace1741c146104ba57610180565b806333e364cb1161013d5780635413c1c8116101175780635413c1c81461030857806354a9f1021461033057806363b201171461036c57806368f8fc101461039657610180565b806333e364cb146102a05780633874e325146102b65780633abd0136146102de57610180565b8063115ece4c14610184578063204120bc146101c0578063273ba6bb146101fc57806329d429a8146102265780632c4e722e1461024e5780633115329e14610278575b5f80fd5b34801561018f575f80fd5b506101aa60048036038101906101a59190612186565b610618565b6040516101b791906121d3565b60405180910390f35b3480156101cb575f80fd5b506101e660048036038101906101e191906121ec565b61077e565b6040516101f391906121d3565b60405180910390f35b348015610207575f80fd5b50610210610793565b60405161021d9190612226565b60405180910390f35b348015610231575f80fd5b5061024c60048036038101906102479190612274565b6107b8565b005b348015610259575f80fd5b50610262610906565b60405161026f91906121d3565b60405180910390f35b348015610283575f80fd5b5061029e600480360381019061029991906124c2565b61090b565b005b3480156102ab575f80fd5b506102b4610b2e565b005b3480156102c1575f80fd5b506102dc60048036038101906102d7919061254a565b610c3c565b005b3480156102e9575f80fd5b506102f2610df4565b6040516102ff91906121d3565b60405180910390f35b348015610313575f80fd5b5061032e600480360381019061032991906125ae565b610dfa565b005b34801561033b575f80fd5b50610356600480360381019061035191906121ec565b611003565b60405161036391906121d3565b60405180910390f35b348015610377575f80fd5b50610380611018565b60405161038d91906121d3565b60405180910390f35b6103b060048036038101906103ab9190612186565b61101e565b005b3480156103bd575f80fd5b506103c66113de565b6040516103d391906121d3565b60405180910390f35b3480156103e7575f80fd5b5061040260048036038101906103fd9190612624565b6113e4565b60405161040f9190612755565b60405180910390f35b348015610423575f80fd5b5061043e600480360381019061043991906121ec565b6115e0565b60405161044b9190612784565b60405180910390f35b34801561045f575f80fd5b506104686115fd565b6040516104759190612226565b60405180910390f35b348015610489575f80fd5b506104a4600480360381019061049f9190612186565b611624565b6040516104b191906121d3565b60405180910390f35b3480156104c5575f80fd5b506104ce61178a565b6040516104db91906121d3565b60405180910390f35b3480156104ef575f80fd5b5061050a600480360381019061050591906121ec565b611790565b6040516105179190612784565b60405180910390f35b34801561052b575f80fd5b5061054660048036038101906105419190612186565b6117ad565b005b348015610553575f80fd5b5061055c611a0c565b6040516105699190612226565b60405180910390f35b34801561057d575f80fd5b50610586611a31565b005b348015610593575f80fd5b5061059c611b3f565b6040516105a99190612226565b60405180910390f35b3480156105bd575f80fd5b506105d860048036038101906105d3919061279d565b611b64565b6040516105e59190612226565b60405180910390f35b3480156105f9575f80fd5b50610602611b9f565b60405161060f9190612784565b60405180910390f35b5f805f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461074b576001151560045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515146106dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d490612822565b60405180910390fd5b5f60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905080600254600a61072e919061299c565b8561073991906129e6565b6107439190612a54565b915050610774565b5f54600254600a61075c919061299c565b8461076791906129e6565b6107719190612a54565b90505b8091505092915050565b6005602052805f5260405f205f915090505481565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6107c0611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146108565761081a611bb1565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161084d9190612226565b60405180910390fd5b80151560045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036108ae575f80fd5b8060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f5481565b610913611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146109a95761096d611bb1565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016109a09190612226565b60405180910390fd5b81518351146109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e490612af4565b60405180910390fd5b5f81146109fb57805f819055505b5f5b8351811015610b28576001151560045f868481518110610a2057610a1f612b12565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151514610a79575f80fd5b5f838281518110610a8d57610a8c612b12565b5b602002602001015103610a9e575f80fd5b828181518110610ab157610ab0612b12565b5b602002602001015160055f868481518110610acf57610ace612b12565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600181610b219190612b3f565b90506109fd565b50505050565b610b36611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610bcc57610b90611bb1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610bc39190612226565b60405180910390fd5b5f151560065f9054906101000a900460ff16151514610c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1790612bbc565b60405180910390fd5b600160065f6101000a81548160ff021916908315150217905550565b610c44611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610cda57610c9e611bb1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610cd19190612226565b60405180910390fd5b5f8203610ce5575f80fd5b815f819055508360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060065f6101000a81548160ff0219169083151502179055508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db19190612c10565b60ff1660028190555082600381905550610dee3330858773ffffffffffffffffffffffffffffffffffffffff16611bb8909392919063ffffffff16565b50505050565b600a5481565b610e02611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610e9857610e5c611bb1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e8f9190612226565b60405180910390fd5b8051825114610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed390612af4565b60405180910390fd5b5f5b8251811015610ffe575f828281518110610efb57610efa612b12565b5b602002602001015103610f0c575f80fd5b600160045f858481518110610f2457610f23612b12565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550818181518110610f8e57610f8d612b12565b5b602002602001015160055f858481518110610fac57610fab612b12565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508080600101915050610ede565b505050565b6009602052805f5260405f205f915090505481565b600b5481565b6001151560065f9054906101000a900460ff16151514611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a90612c85565b60405180910390fd5b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110ad57346110af565b815b90505f6110bc8483610618565b90505f8103611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790612ced565b60405180910390fd5b60035481600b546111119190612b3f565b10611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114890612d7b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146111935761118e8484611c3a565b61119d565b61119c34611d02565b5b6111e9338260015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611df79092919063ffffffff16565b80600b5f8282546111fa9190612b3f565b9250508190555060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661131e57600733908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f8282546113169190612b3f565b925050819055505b8060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461136a9190612b3f565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167facf531ec465d633652ed6f0179042e0f5105d16b2eb45652517eb8f96e3d199784846040516113d0929190612d99565b60405180910390a350505050565b60035481565b6060818310611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90612e30565b60405180910390fd5b5f600a548311611438578261143c565b600a545b90505f600a54851161144e5784611452565b600a545b90505f81836114619190612e4e565b67ffffffffffffffff81111561147a576114796122c6565b5b6040519080825280602002602001820160405280156114b357816020015b6114a06120ba565b8152602001906001900390816114985790505b5090505f8290505b838110156115d3576040518060400160405280600783815481106114e2576114e1612b12565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160095f6007858154811061153c5761153b612b12565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548152508282815181106115b4576115b3612b12565b5b60200260200101819052506001816115cc9190612b3f565b90506114bb565b5080935050505092915050565b6004602052805f5260405f205f915054906101000a900460ff1681565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b5f805f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611757576001151560045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515146116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e090612822565b60405180910390fd5b5f60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050600254600a611739919061299c565b818561174591906129e6565b61174f9190612a54565b915050611780565b600254600a611766919061299c565b5f548461177391906129e6565b61177d9190612a54565b90505b8091505092915050565b60025481565b6008602052805f5260405f205f915054906101000a900460ff1681565b6117b5611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461184b5761180f611bb1565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016118429190612226565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611916575f479050818110156118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc90612ef1565b60405180910390fd5b6118cd6115fd565b73ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f1935050505015801561190f573d5f803e3d5ffd5b5050611a08565b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119509190612226565b602060405180830381865afa15801561196b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061198f9190612f23565b9050818110156119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90612fbe565b60405180910390fd5b611a066119df6115fd565b838573ffffffffffffffffffffffffffffffffffffffff16611df79092919063ffffffff16565b505b5050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a39611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611acf57611a93611bb1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611ac69190612226565b60405180910390fd5b6001151560065f9054906101000a900460ff16151514611b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1b90612c85565b60405180910390fd5b5f60065f6101000a81548160ff021916908315150217905550565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60078181548110611b73575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065f9054906101000a900460ff1681565b5f33905090565b611c34848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401611bed93929190612fdc565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611e76565b50505050565b5f6064600583611c4a91906129e6565b611c549190612a54565b9050611ca433600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838673ffffffffffffffffffffffffffffffffffffffff16611bb8909392919063ffffffff16565b611cfd33600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168385611cd69190612e4e565b8673ffffffffffffffffffffffffffffffffffffffff16611bb8909392919063ffffffff16565b505050565b5f6064600583611d1291906129e6565b611d1c9190612a54565b9050600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611d82573d5f803e3d5ffd5b50600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8284611dca9190612e4e565b90811502906040515f60405180830381858888f19350505050158015611df2573d5f803e3d5ffd5b505050565b611e71838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401611e2a929190613011565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611e76565b505050565b5f611ea0828473ffffffffffffffffffffffffffffffffffffffff16611f0b90919063ffffffff16565b90505f815114158015611ec4575080806020019051810190611ec2919061304c565b155b15611f0657826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401611efd9190612226565b60405180910390fd5b505050565b6060611f1883835f611f20565b905092915050565b606081471015611f6757306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401611f5e9190612226565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051611f8f91906130c9565b5f6040518083038185875af1925050503d805f8114611fc9576040519150601f19603f3d011682016040523d82523d5f602084013e611fce565b606091505b5091509150611fde868383611fe9565b925050509392505050565b606082611ffe57611ff982612076565b61206e565b5f825114801561202457505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561206657836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161205d9190612226565b60405180910390fd5b81905061206f565b5b9392505050565b5f815111156120885780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612122826120f9565b9050919050565b61213281612118565b811461213c575f80fd5b50565b5f8135905061214d81612129565b92915050565b5f819050919050565b61216581612153565b811461216f575f80fd5b50565b5f813590506121808161215c565b92915050565b5f806040838503121561219c5761219b6120f1565b5b5f6121a98582860161213f565b92505060206121ba85828601612172565b9150509250929050565b6121cd81612153565b82525050565b5f6020820190506121e65f8301846121c4565b92915050565b5f60208284031215612201576122006120f1565b5b5f61220e8482850161213f565b91505092915050565b61222081612118565b82525050565b5f6020820190506122395f830184612217565b92915050565b5f8115159050919050565b6122538161223f565b811461225d575f80fd5b50565b5f8135905061226e8161224a565b92915050565b5f806040838503121561228a576122896120f1565b5b5f6122978582860161213f565b92505060206122a885828601612260565b9150509250929050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6122fc826122b6565b810181811067ffffffffffffffff8211171561231b5761231a6122c6565b5b80604052505050565b5f61232d6120e8565b905061233982826122f3565b919050565b5f67ffffffffffffffff821115612358576123576122c6565b5b602082029050602081019050919050565b5f80fd5b5f61237f61237a8461233e565b612324565b905080838252602082019050602084028301858111156123a2576123a1612369565b5b835b818110156123cb57806123b7888261213f565b8452602084019350506020810190506123a4565b5050509392505050565b5f82601f8301126123e9576123e86122b2565b5b81356123f984826020860161236d565b91505092915050565b5f67ffffffffffffffff82111561241c5761241b6122c6565b5b602082029050602081019050919050565b5f61243f61243a84612402565b612324565b9050808382526020820190506020840283018581111561246257612461612369565b5b835b8181101561248b57806124778882612172565b845260208401935050602081019050612464565b5050509392505050565b5f82601f8301126124a9576124a86122b2565b5b81356124b984826020860161242d565b91505092915050565b5f805f606084860312156124d9576124d86120f1565b5b5f84013567ffffffffffffffff8111156124f6576124f56120f5565b5b612502868287016123d5565b935050602084013567ffffffffffffffff811115612523576125226120f5565b5b61252f86828701612495565b925050604061254086828701612172565b9150509250925092565b5f805f8060808587031215612562576125616120f1565b5b5f61256f8782880161213f565b945050602061258087828801612172565b935050604061259187828801612172565b92505060606125a287828801612260565b91505092959194509250565b5f80604083850312156125c4576125c36120f1565b5b5f83013567ffffffffffffffff8111156125e1576125e06120f5565b5b6125ed858286016123d5565b925050602083013567ffffffffffffffff81111561260e5761260d6120f5565b5b61261a85828601612495565b9150509250929050565b5f806040838503121561263a576126396120f1565b5b5f61264785828601612172565b925050602061265885828601612172565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61269481612118565b82525050565b6126a381612153565b82525050565b604082015f8201516126bd5f85018261268b565b5060208201516126d0602085018261269a565b50505050565b5f6126e183836126a9565b60408301905092915050565b5f602082019050919050565b5f61270382612662565b61270d818561266c565b93506127188361267c565b805f5b8381101561274857815161272f88826126d6565b975061273a836126ed565b92505060018101905061271b565b5085935050505092915050565b5f6020820190508181035f83015261276d81846126f9565b905092915050565b61277e8161223f565b82525050565b5f6020820190506127975f830184612775565b92915050565b5f602082840312156127b2576127b16120f1565b5b5f6127bf84828501612172565b91505092915050565b5f82825260208201905092915050565b7f4c69676874636861696e41493a20546f6b656e206e6f7420616c6c6f776564005f82015250565b5f61280c601f836127c8565b9150612817826127d8565b602082019050919050565b5f6020820190508181035f83015261283981612800565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156128c25780860481111561289e5761289d612840565b5b60018516156128ad5780820291505b80810290506128bb8561286d565b9450612882565b94509492505050565b5f826128da5760019050612995565b816128e7575f9050612995565b81600181146128fd576002811461290757612936565b6001915050612995565b60ff84111561291957612918612840565b5b8360020a9150848211156129305761292f612840565b5b50612995565b5060208310610133831016604e8410600b841016171561296b5782820a90508381111561296657612965612840565b5b612995565b6129788484846001612879565b9250905081840481111561298f5761298e612840565b5b81810290505b9392505050565b5f6129a682612153565b91506129b183612153565b92506129de7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846128cb565b905092915050565b5f6129f082612153565b91506129fb83612153565b9250828202612a0981612153565b91508282048414831517612a2057612a1f612840565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612a5e82612153565b9150612a6983612153565b925082612a7957612a78612a27565b5b828204905092915050565b7f4c69676874636861696e41493a20746f6b656e732026207072696365732061725f8201527f72617973206c656e677468206d69736d61746368000000000000000000000000602082015250565b5f612ade6034836127c8565b9150612ae982612a84565b604082019050919050565b5f6020820190508181035f830152612b0b81612ad2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f612b4982612153565b9150612b5483612153565b9250828201905080821115612b6c57612b6b612840565b5b92915050565b7f4c69676874636861696e41493a206973206e6f742073746f70706564000000005f82015250565b5f612ba6601c836127c8565b9150612bb182612b72565b602082019050919050565b5f6020820190508181035f830152612bd381612b9a565b9050919050565b5f60ff82169050919050565b612bef81612bda565b8114612bf9575f80fd5b50565b5f81519050612c0a81612be6565b92915050565b5f60208284031215612c2557612c246120f1565b5b5f612c3284828501612bfc565b91505092915050565b7f4c69676874636861696e41493a206973206e6f7420656e61626c6564000000005f82015250565b5f612c6f601c836127c8565b9150612c7a82612c3b565b602082019050919050565b5f6020820190508181035f830152612c9c81612c63565b9050919050565b7f4c69676874636861696e41493a20416d6f756e742069732030000000000000005f82015250565b5f612cd76019836127c8565b9150612ce282612ca3565b602082019050919050565b5f6020820190508181035f830152612d0481612ccb565b9050919050565b7f4c69676874636861696e41493a204e6f7420656e6f75676820746f6b656e73205f8201527f746f20626520736f6c6400000000000000000000000000000000000000000000602082015250565b5f612d65602a836127c8565b9150612d7082612d0b565b604082019050919050565b5f6020820190508181035f830152612d9281612d59565b9050919050565b5f604082019050612dac5f8301856121c4565b612db960208301846121c4565b9392505050565b7f4c69676874636861696e41493a205f66726f6d2073686f756c64206265206c655f8201527f7373207468616e205f746f000000000000000000000000000000000000000000602082015250565b5f612e1a602b836127c8565b9150612e2582612dc0565b604082019050919050565b5f6020820190508181035f830152612e4781612e0e565b9050919050565b5f612e5882612153565b9150612e6383612153565b9250828203905081811115612e7b57612e7a612840565b5b92915050565b7f4c43414950726573616c653a20496e73756666696369656e74204574686572205f8201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b5f612edb6027836127c8565b9150612ee682612e81565b604082019050919050565b5f6020820190508181035f830152612f0881612ecf565b9050919050565b5f81519050612f1d8161215c565b92915050565b5f60208284031215612f3857612f376120f1565b5b5f612f4584828501612f0f565b91505092915050565b7f4c43414950726573616c653a20496e73756666696369656e7420746f6b656e205f8201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b5f612fa86027836127c8565b9150612fb382612f4e565b604082019050919050565b5f6020820190508181035f830152612fd581612f9c565b9050919050565b5f606082019050612fef5f830186612217565b612ffc6020830185612217565b61300960408301846121c4565b949350505050565b5f6040820190506130245f830185612217565b61303160208301846121c4565b9392505050565b5f815190506130468161224a565b92915050565b5f60208284031215613061576130606120f1565b5b5f61306e84828501613038565b91505092915050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6130a382613077565b6130ad8185613081565b93506130bd81856020860161308b565b80840191505092915050565b5f6130d48284613099565b91508190509291505056fea2646970667358221220bdba63ab1c97320ca5f60b44320400b577b3afa3c1a13c7b08fe53bd47c62a3364736f6c634300081a0033000000000000000000000000dab04193198b41477e1080b8dc6338502e54d202000000000000000000000000624a14f54b060421be7ecb7abd0f0ce407654665
Deployed Bytecode
0x608060405260043610610180575f3560e01c80636bcedf9c116100d0578063ba41b21011610089578063e36b0b3711610063578063e36b0b3714610572578063e985e36714610588578063f2aa8218146105b2578063f9020e33146105ee57610180565b8063ba41b210146104e4578063c107532914610520578063c1eb5ddd1461054857610180565b80636bcedf9c146103b257806376ca67a5146103dc57806380655eef146104185780638da5cb5b146104545780639344f5c11461047e578063ace1741c146104ba57610180565b806333e364cb1161013d5780635413c1c8116101175780635413c1c81461030857806354a9f1021461033057806363b201171461036c57806368f8fc101461039657610180565b806333e364cb146102a05780633874e325146102b65780633abd0136146102de57610180565b8063115ece4c14610184578063204120bc146101c0578063273ba6bb146101fc57806329d429a8146102265780632c4e722e1461024e5780633115329e14610278575b5f80fd5b34801561018f575f80fd5b506101aa60048036038101906101a59190612186565b610618565b6040516101b791906121d3565b60405180910390f35b3480156101cb575f80fd5b506101e660048036038101906101e191906121ec565b61077e565b6040516101f391906121d3565b60405180910390f35b348015610207575f80fd5b50610210610793565b60405161021d9190612226565b60405180910390f35b348015610231575f80fd5b5061024c60048036038101906102479190612274565b6107b8565b005b348015610259575f80fd5b50610262610906565b60405161026f91906121d3565b60405180910390f35b348015610283575f80fd5b5061029e600480360381019061029991906124c2565b61090b565b005b3480156102ab575f80fd5b506102b4610b2e565b005b3480156102c1575f80fd5b506102dc60048036038101906102d7919061254a565b610c3c565b005b3480156102e9575f80fd5b506102f2610df4565b6040516102ff91906121d3565b60405180910390f35b348015610313575f80fd5b5061032e600480360381019061032991906125ae565b610dfa565b005b34801561033b575f80fd5b50610356600480360381019061035191906121ec565b611003565b60405161036391906121d3565b60405180910390f35b348015610377575f80fd5b50610380611018565b60405161038d91906121d3565b60405180910390f35b6103b060048036038101906103ab9190612186565b61101e565b005b3480156103bd575f80fd5b506103c66113de565b6040516103d391906121d3565b60405180910390f35b3480156103e7575f80fd5b5061040260048036038101906103fd9190612624565b6113e4565b60405161040f9190612755565b60405180910390f35b348015610423575f80fd5b5061043e600480360381019061043991906121ec565b6115e0565b60405161044b9190612784565b60405180910390f35b34801561045f575f80fd5b506104686115fd565b6040516104759190612226565b60405180910390f35b348015610489575f80fd5b506104a4600480360381019061049f9190612186565b611624565b6040516104b191906121d3565b60405180910390f35b3480156104c5575f80fd5b506104ce61178a565b6040516104db91906121d3565b60405180910390f35b3480156104ef575f80fd5b5061050a600480360381019061050591906121ec565b611790565b6040516105179190612784565b60405180910390f35b34801561052b575f80fd5b5061054660048036038101906105419190612186565b6117ad565b005b348015610553575f80fd5b5061055c611a0c565b6040516105699190612226565b60405180910390f35b34801561057d575f80fd5b50610586611a31565b005b348015610593575f80fd5b5061059c611b3f565b6040516105a99190612226565b60405180910390f35b3480156105bd575f80fd5b506105d860048036038101906105d3919061279d565b611b64565b6040516105e59190612226565b60405180910390f35b3480156105f9575f80fd5b50610602611b9f565b60405161060f9190612784565b60405180910390f35b5f805f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461074b576001151560045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515146106dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d490612822565b60405180910390fd5b5f60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905080600254600a61072e919061299c565b8561073991906129e6565b6107439190612a54565b915050610774565b5f54600254600a61075c919061299c565b8461076791906129e6565b6107719190612a54565b90505b8091505092915050565b6005602052805f5260405f205f915090505481565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6107c0611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000fbe810101064e326f871bf20576d8e42c75d5dd773ffffffffffffffffffffffffffffffffffffffff16146108565761081a611bb1565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161084d9190612226565b60405180910390fd5b80151560045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036108ae575f80fd5b8060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f5481565b610913611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000fbe810101064e326f871bf20576d8e42c75d5dd773ffffffffffffffffffffffffffffffffffffffff16146109a95761096d611bb1565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016109a09190612226565b60405180910390fd5b81518351146109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e490612af4565b60405180910390fd5b5f81146109fb57805f819055505b5f5b8351811015610b28576001151560045f868481518110610a2057610a1f612b12565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151514610a79575f80fd5b5f838281518110610a8d57610a8c612b12565b5b602002602001015103610a9e575f80fd5b828181518110610ab157610ab0612b12565b5b602002602001015160055f868481518110610acf57610ace612b12565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600181610b219190612b3f565b90506109fd565b50505050565b610b36611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000fbe810101064e326f871bf20576d8e42c75d5dd773ffffffffffffffffffffffffffffffffffffffff1614610bcc57610b90611bb1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610bc39190612226565b60405180910390fd5b5f151560065f9054906101000a900460ff16151514610c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1790612bbc565b60405180910390fd5b600160065f6101000a81548160ff021916908315150217905550565b610c44611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000fbe810101064e326f871bf20576d8e42c75d5dd773ffffffffffffffffffffffffffffffffffffffff1614610cda57610c9e611bb1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610cd19190612226565b60405180910390fd5b5f8203610ce5575f80fd5b815f819055508360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060065f6101000a81548160ff0219169083151502179055508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db19190612c10565b60ff1660028190555082600381905550610dee3330858773ffffffffffffffffffffffffffffffffffffffff16611bb8909392919063ffffffff16565b50505050565b600a5481565b610e02611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000fbe810101064e326f871bf20576d8e42c75d5dd773ffffffffffffffffffffffffffffffffffffffff1614610e9857610e5c611bb1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e8f9190612226565b60405180910390fd5b8051825114610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed390612af4565b60405180910390fd5b5f5b8251811015610ffe575f828281518110610efb57610efa612b12565b5b602002602001015103610f0c575f80fd5b600160045f858481518110610f2457610f23612b12565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550818181518110610f8e57610f8d612b12565b5b602002602001015160055f858481518110610fac57610fab612b12565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508080600101915050610ede565b505050565b6009602052805f5260405f205f915090505481565b600b5481565b6001151560065f9054906101000a900460ff16151514611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a90612c85565b60405180910390fd5b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110ad57346110af565b815b90505f6110bc8483610618565b90505f8103611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790612ced565b60405180910390fd5b60035481600b546111119190612b3f565b10611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114890612d7b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146111935761118e8484611c3a565b61119d565b61119c34611d02565b5b6111e9338260015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611df79092919063ffffffff16565b80600b5f8282546111fa9190612b3f565b9250508190555060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661131e57600733908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f8282546113169190612b3f565b925050819055505b8060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461136a9190612b3f565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167facf531ec465d633652ed6f0179042e0f5105d16b2eb45652517eb8f96e3d199784846040516113d0929190612d99565b60405180910390a350505050565b60035481565b6060818310611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90612e30565b60405180910390fd5b5f600a548311611438578261143c565b600a545b90505f600a54851161144e5784611452565b600a545b90505f81836114619190612e4e565b67ffffffffffffffff81111561147a576114796122c6565b5b6040519080825280602002602001820160405280156114b357816020015b6114a06120ba565b8152602001906001900390816114985790505b5090505f8290505b838110156115d3576040518060400160405280600783815481106114e2576114e1612b12565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160095f6007858154811061153c5761153b612b12565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548152508282815181106115b4576115b3612b12565b5b60200260200101819052506001816115cc9190612b3f565b90506114bb565b5080935050505092915050565b6004602052805f5260405f205f915054906101000a900460ff1681565b5f7f000000000000000000000000fbe810101064e326f871bf20576d8e42c75d5dd7905090565b5f805f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611757576001151560045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515146116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e090612822565b60405180910390fd5b5f60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050600254600a611739919061299c565b818561174591906129e6565b61174f9190612a54565b915050611780565b600254600a611766919061299c565b5f548461177391906129e6565b61177d9190612a54565b90505b8091505092915050565b60025481565b6008602052805f5260405f205f915054906101000a900460ff1681565b6117b5611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000fbe810101064e326f871bf20576d8e42c75d5dd773ffffffffffffffffffffffffffffffffffffffff161461184b5761180f611bb1565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016118429190612226565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611916575f479050818110156118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc90612ef1565b60405180910390fd5b6118cd6115fd565b73ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f1935050505015801561190f573d5f803e3d5ffd5b5050611a08565b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119509190612226565b602060405180830381865afa15801561196b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061198f9190612f23565b9050818110156119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90612fbe565b60405180910390fd5b611a066119df6115fd565b838573ffffffffffffffffffffffffffffffffffffffff16611df79092919063ffffffff16565b505b5050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a39611bb1565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000fbe810101064e326f871bf20576d8e42c75d5dd773ffffffffffffffffffffffffffffffffffffffff1614611acf57611a93611bb1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611ac69190612226565b60405180910390fd5b6001151560065f9054906101000a900460ff16151514611b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1b90612c85565b60405180910390fd5b5f60065f6101000a81548160ff021916908315150217905550565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60078181548110611b73575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065f9054906101000a900460ff1681565b5f33905090565b611c34848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401611bed93929190612fdc565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611e76565b50505050565b5f6064600583611c4a91906129e6565b611c549190612a54565b9050611ca433600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838673ffffffffffffffffffffffffffffffffffffffff16611bb8909392919063ffffffff16565b611cfd33600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168385611cd69190612e4e565b8673ffffffffffffffffffffffffffffffffffffffff16611bb8909392919063ffffffff16565b505050565b5f6064600583611d1291906129e6565b611d1c9190612a54565b9050600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611d82573d5f803e3d5ffd5b50600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8284611dca9190612e4e565b90811502906040515f60405180830381858888f19350505050158015611df2573d5f803e3d5ffd5b505050565b611e71838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401611e2a929190613011565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611e76565b505050565b5f611ea0828473ffffffffffffffffffffffffffffffffffffffff16611f0b90919063ffffffff16565b90505f815114158015611ec4575080806020019051810190611ec2919061304c565b155b15611f0657826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401611efd9190612226565b60405180910390fd5b505050565b6060611f1883835f611f20565b905092915050565b606081471015611f6757306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401611f5e9190612226565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051611f8f91906130c9565b5f6040518083038185875af1925050503d805f8114611fc9576040519150601f19603f3d011682016040523d82523d5f602084013e611fce565b606091505b5091509150611fde868383611fe9565b925050509392505050565b606082611ffe57611ff982612076565b61206e565b5f825114801561202457505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561206657836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161205d9190612226565b60405180910390fd5b81905061206f565b5b9392505050565b5f815111156120885780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612122826120f9565b9050919050565b61213281612118565b811461213c575f80fd5b50565b5f8135905061214d81612129565b92915050565b5f819050919050565b61216581612153565b811461216f575f80fd5b50565b5f813590506121808161215c565b92915050565b5f806040838503121561219c5761219b6120f1565b5b5f6121a98582860161213f565b92505060206121ba85828601612172565b9150509250929050565b6121cd81612153565b82525050565b5f6020820190506121e65f8301846121c4565b92915050565b5f60208284031215612201576122006120f1565b5b5f61220e8482850161213f565b91505092915050565b61222081612118565b82525050565b5f6020820190506122395f830184612217565b92915050565b5f8115159050919050565b6122538161223f565b811461225d575f80fd5b50565b5f8135905061226e8161224a565b92915050565b5f806040838503121561228a576122896120f1565b5b5f6122978582860161213f565b92505060206122a885828601612260565b9150509250929050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6122fc826122b6565b810181811067ffffffffffffffff8211171561231b5761231a6122c6565b5b80604052505050565b5f61232d6120e8565b905061233982826122f3565b919050565b5f67ffffffffffffffff821115612358576123576122c6565b5b602082029050602081019050919050565b5f80fd5b5f61237f61237a8461233e565b612324565b905080838252602082019050602084028301858111156123a2576123a1612369565b5b835b818110156123cb57806123b7888261213f565b8452602084019350506020810190506123a4565b5050509392505050565b5f82601f8301126123e9576123e86122b2565b5b81356123f984826020860161236d565b91505092915050565b5f67ffffffffffffffff82111561241c5761241b6122c6565b5b602082029050602081019050919050565b5f61243f61243a84612402565b612324565b9050808382526020820190506020840283018581111561246257612461612369565b5b835b8181101561248b57806124778882612172565b845260208401935050602081019050612464565b5050509392505050565b5f82601f8301126124a9576124a86122b2565b5b81356124b984826020860161242d565b91505092915050565b5f805f606084860312156124d9576124d86120f1565b5b5f84013567ffffffffffffffff8111156124f6576124f56120f5565b5b612502868287016123d5565b935050602084013567ffffffffffffffff811115612523576125226120f5565b5b61252f86828701612495565b925050604061254086828701612172565b9150509250925092565b5f805f8060808587031215612562576125616120f1565b5b5f61256f8782880161213f565b945050602061258087828801612172565b935050604061259187828801612172565b92505060606125a287828801612260565b91505092959194509250565b5f80604083850312156125c4576125c36120f1565b5b5f83013567ffffffffffffffff8111156125e1576125e06120f5565b5b6125ed858286016123d5565b925050602083013567ffffffffffffffff81111561260e5761260d6120f5565b5b61261a85828601612495565b9150509250929050565b5f806040838503121561263a576126396120f1565b5b5f61264785828601612172565b925050602061265885828601612172565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61269481612118565b82525050565b6126a381612153565b82525050565b604082015f8201516126bd5f85018261268b565b5060208201516126d0602085018261269a565b50505050565b5f6126e183836126a9565b60408301905092915050565b5f602082019050919050565b5f61270382612662565b61270d818561266c565b93506127188361267c565b805f5b8381101561274857815161272f88826126d6565b975061273a836126ed565b92505060018101905061271b565b5085935050505092915050565b5f6020820190508181035f83015261276d81846126f9565b905092915050565b61277e8161223f565b82525050565b5f6020820190506127975f830184612775565b92915050565b5f602082840312156127b2576127b16120f1565b5b5f6127bf84828501612172565b91505092915050565b5f82825260208201905092915050565b7f4c69676874636861696e41493a20546f6b656e206e6f7420616c6c6f776564005f82015250565b5f61280c601f836127c8565b9150612817826127d8565b602082019050919050565b5f6020820190508181035f83015261283981612800565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156128c25780860481111561289e5761289d612840565b5b60018516156128ad5780820291505b80810290506128bb8561286d565b9450612882565b94509492505050565b5f826128da5760019050612995565b816128e7575f9050612995565b81600181146128fd576002811461290757612936565b6001915050612995565b60ff84111561291957612918612840565b5b8360020a9150848211156129305761292f612840565b5b50612995565b5060208310610133831016604e8410600b841016171561296b5782820a90508381111561296657612965612840565b5b612995565b6129788484846001612879565b9250905081840481111561298f5761298e612840565b5b81810290505b9392505050565b5f6129a682612153565b91506129b183612153565b92506129de7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846128cb565b905092915050565b5f6129f082612153565b91506129fb83612153565b9250828202612a0981612153565b91508282048414831517612a2057612a1f612840565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612a5e82612153565b9150612a6983612153565b925082612a7957612a78612a27565b5b828204905092915050565b7f4c69676874636861696e41493a20746f6b656e732026207072696365732061725f8201527f72617973206c656e677468206d69736d61746368000000000000000000000000602082015250565b5f612ade6034836127c8565b9150612ae982612a84565b604082019050919050565b5f6020820190508181035f830152612b0b81612ad2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f612b4982612153565b9150612b5483612153565b9250828201905080821115612b6c57612b6b612840565b5b92915050565b7f4c69676874636861696e41493a206973206e6f742073746f70706564000000005f82015250565b5f612ba6601c836127c8565b9150612bb182612b72565b602082019050919050565b5f6020820190508181035f830152612bd381612b9a565b9050919050565b5f60ff82169050919050565b612bef81612bda565b8114612bf9575f80fd5b50565b5f81519050612c0a81612be6565b92915050565b5f60208284031215612c2557612c246120f1565b5b5f612c3284828501612bfc565b91505092915050565b7f4c69676874636861696e41493a206973206e6f7420656e61626c6564000000005f82015250565b5f612c6f601c836127c8565b9150612c7a82612c3b565b602082019050919050565b5f6020820190508181035f830152612c9c81612c63565b9050919050565b7f4c69676874636861696e41493a20416d6f756e742069732030000000000000005f82015250565b5f612cd76019836127c8565b9150612ce282612ca3565b602082019050919050565b5f6020820190508181035f830152612d0481612ccb565b9050919050565b7f4c69676874636861696e41493a204e6f7420656e6f75676820746f6b656e73205f8201527f746f20626520736f6c6400000000000000000000000000000000000000000000602082015250565b5f612d65602a836127c8565b9150612d7082612d0b565b604082019050919050565b5f6020820190508181035f830152612d9281612d59565b9050919050565b5f604082019050612dac5f8301856121c4565b612db960208301846121c4565b9392505050565b7f4c69676874636861696e41493a205f66726f6d2073686f756c64206265206c655f8201527f7373207468616e205f746f000000000000000000000000000000000000000000602082015250565b5f612e1a602b836127c8565b9150612e2582612dc0565b604082019050919050565b5f6020820190508181035f830152612e4781612e0e565b9050919050565b5f612e5882612153565b9150612e6383612153565b9250828203905081811115612e7b57612e7a612840565b5b92915050565b7f4c43414950726573616c653a20496e73756666696369656e74204574686572205f8201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b5f612edb6027836127c8565b9150612ee682612e81565b604082019050919050565b5f6020820190508181035f830152612f0881612ecf565b9050919050565b5f81519050612f1d8161215c565b92915050565b5f60208284031215612f3857612f376120f1565b5b5f612f4584828501612f0f565b91505092915050565b7f4c43414950726573616c653a20496e73756666696369656e7420746f6b656e205f8201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b5f612fa86027836127c8565b9150612fb382612f4e565b604082019050919050565b5f6020820190508181035f830152612fd581612f9c565b9050919050565b5f606082019050612fef5f830186612217565b612ffc6020830185612217565b61300960408301846121c4565b949350505050565b5f6040820190506130245f830185612217565b61303160208301846121c4565b9392505050565b5f815190506130468161224a565b92915050565b5f60208284031215613061576130606120f1565b5b5f61306e84828501613038565b91505092915050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6130a382613077565b6130ad8185613081565b93506130bd81856020860161308b565b80840191505092915050565b5f6130d48284613099565b91508190509291505056fea2646970667358221220bdba63ab1c97320ca5f60b44320400b577b3afa3c1a13c7b08fe53bd47c62a3364736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000dab04193198b41477e1080b8dc6338502e54d202000000000000000000000000624a14f54b060421be7ecb7abd0f0ce407654665
-----Decoded View---------------
Arg [0] : _ICO (address): 0xDAb04193198b41477E1080b8dc6338502E54d202
Arg [1] : _DEV (address): 0x624a14F54b060421bE7ECb7ABd0f0cE407654665
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000dab04193198b41477e1080b8dc6338502e54d202
Arg [1] : 000000000000000000000000624a14f54b060421be7ecb7abd0f0ce407654665
Deployed Bytecode Sourcemap
18744:7368:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22105:546;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19053:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19350:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21299:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18865:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21513:584;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20714:88;;;;;;;;;;;;;:::i;:::-;;20055:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19278:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20810:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19222:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19311:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23783:1025;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18957:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24816:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18999:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2348:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22659:544;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18924:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19171:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25397:712;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19375:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20618:88;;;;;;;;;;;;;:::i;:::-;;18893:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19139:23;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19108:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22105:546;22206:7;22226:14;22272:1;22255:19;;:5;:19;;;22251:369;;22341:4;22317:28;;:13;:20;22331:5;22317:20;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;22291:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;22427:13;22443:11;:18;22455:5;22443:18;;;;;;;;;;;;;;;;22427:34;;22520:5;22502:12;;22496:2;:18;;;;:::i;:::-;22486:6;:29;;;;:::i;:::-;22485:41;;;;:::i;:::-;22476:50;;22276:262;22251:369;;;22603:4;;22585:12;;22579:2;:18;;;;:::i;:::-;22569:6;:29;;;;:::i;:::-;22568:40;;;;:::i;:::-;22559:49;;22251:369;22637:6;22630:13;;;22105:546;;;;:::o;19053:46::-;;;;;;;;;;;;;;;;;:::o;19350:18::-;;;;;;;;;;;;;:::o;21299:206::-;2160:12;:10;:12::i;:::-;2150:22;;:6;:22;;;2146:102;;2223:12;:10;:12::i;:::-;2196:40;;;;;;;;;;;:::i;:::-;;;;;;;;2146:102;21445:7:::1;21420:32;;:13;:21;21434:6;21420:21;;;;;;;;;;;;;;;;;;;;;;;;;:32;;::::0;21412:41:::1;;;::::0;::::1;;21490:7;21466:13;:21;21480:6;21466:21;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;21299:206:::0;;:::o;18865:19::-;;;;:::o;21513:584::-;2160:12;:10;:12::i;:::-;2150:22;;:6;:22;;;2146:102;;2223:12;:10;:12::i;:::-;2196:40;;;;;;;;;;;:::i;:::-;;;;;;;;2146:102;21709:7:::1;:14;21691:7;:14;:32;21669:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;21829:1;21820:5;:10;21816:55;;21854:5;21847:4;:12;;;;21816:55;21888:9;21883:207;21907:7;:14;21903:1;:18;21883:207;;;21983:4;21954:33;;:13;:25;21968:7;21976:1;21968:10;;;;;;;;:::i;:::-;;;;;;;;21954:25;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;21946:42;;;::::0;::::1;;22025:1;22011:7;22019:1;22011:10;;;;;;;;:::i;:::-;;;;;;;;:15:::0;22003:24:::1;;;::::0;::::1;;22068:7;22076:1;22068:10;;;;;;;;:::i;:::-;;;;;;;;22042:11;:23;22054:7;22062:1;22054:10;;;;;;;;:::i;:::-;;;;;;;;22042:23;;;;;;;;;;;;;;;:36;;;;21928:1;21923:6;;;;;:::i;:::-;;;21883:207;;;;21513:584:::0;;;:::o;20714:88::-;2160:12;:10;:12::i;:::-;2150:22;;:6;:22;;;2146:102;;2223:12;:10;:12::i;:::-;2196:40;;;;;;;;;;;:::i;:::-;;;;;;;;2146:102;19989:5:::1;19975:19;;:10;;;;;;;;;;;:19;;;19967:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20790:4:::2;20777:10;;:17;;;;;;;;;;;;;;;;;;20714:88::o:0;20055:555::-;2160:12;:10;:12::i;:::-;2150:22;;:6;:22;;;2146:102;;2223:12;:10;:12::i;:::-;2196:40;;;;;;;;;;;:::i;:::-;;;;;;;;2146:102;20249:1:::1;20240:5;:10:::0;20232:19:::1;;;::::0;::::1;;20269:5;20262:4;:12;;;;20297:10;20285:9;;:22;;;;;;;;;;;;;;;;;;20331:11;20318:10;;:24;;;;;;;;;;;;;;;;;;20383:10;20368:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20353:52;;:12;:52;;;;20437:19;20416:18;:40;;;;20469:133;20519:10;20552:4;20572:19;20476:10;20469:35;;;;:133;;;;;;:::i;:::-;20055:555:::0;;;;:::o;19278:26::-;;;;:::o;20810:481::-;2160:12;:10;:12::i;:::-;2150:22;;:6;:22;;;2146:102;;2223:12;:10;:12::i;:::-;2196:40;;;;;;;;;;;:::i;:::-;;;;;;;;2146:102;20983:7:::1;:14;20965:7;:14;:32;20943:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;21095:9;21090:194;21114:7;:14;21110:1;:18;21090:194;;;21172:1;21158:7;21166:1;21158:10;;;;;;;;:::i;:::-;;;;;;;;:15:::0;21150:24:::1;;;::::0;::::1;;21217:4;21189:13;:25;21203:7;21211:1;21203:10;;;;;;;;:::i;:::-;;;;;;;;21189:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;21262:7;21270:1;21262:10;;;;;;;;:::i;:::-;;;;;;;;21236:11;:23;21248:7;21256:1;21248:10;;;;;;;;:::i;:::-;;;;;;;;21236:23;;;;;;;;;;;;;;;:36;;;;21130:3;;;;;;;21090:194;;;;20810:481:::0;;:::o;19222:47::-;;;;;;;;;;;;;;;;;:::o;19311:30::-;;;;:::o;23783:1025::-;19869:4;19855:18;;:10;;;;;;;;;;;:18;;;19847:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;23899:14:::1;23934:1:::0;23916:20:::1;;:6;:20;;::::0;:42:::1;;23949:9;23916:42;;;23939:7;23916:42;23899:59;;23969:20;23992:30;24007:6;24015;23992:14;:30::i;:::-;23969:53;;24059:1;24043:12;:17:::0;24035:55:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24158:18;;24142:12;24124:15;;:30;;;;:::i;:::-;24123:53;24101:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;24281:1;24263:20;;:6;:20;;;24259:138;;24300:30;24314:6;24322:7;24300:13;:30::i;:::-;24259:138;;;24363:22;24375:9;24363:11;:22::i;:::-;24259:138;24409:56;24440:10;24452:12;24416:9;;;;;;;;;;;24409:30;;;;:56;;;;;:::i;:::-;24497:12;24478:15;;:31;;;;;;;:::i;:::-;;;;;;;;24527:12;:24;24540:10;24527:24;;;;;;;;;;;;;;;;;;;;;;;;;24522:158;;24568:6;24580:10;24568:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24633:4;24606:12;:24;24619:10;24606:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;24667:1;24652:11;;:16;;;;;;;:::i;:::-;;;;;;;;24522:158;24720:12;24692;:24;24705:10;24692:24;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;24771:6;24750:50;;24759:10;24750:50;;;24779:6;24787:12;24750:50;;;;;;;:::i;:::-;;;;;;;;23888:920;;23783:1025:::0;;:::o;18957:33::-;;;;:::o;24816:573::-;24913:21;24963:3;24955:5;:11;24947:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25027:7;25043:11;;25037:3;:17;:37;;25071:3;25037:37;;;25057:11;;25037:37;25027:47;;25085:9;25105:11;;25097:5;:19;:41;;25133:5;25097:41;;;25119:11;;25097:41;25085:53;;25151:31;25209:4;25204:2;:9;;;;:::i;:::-;25185:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;25151:63;;25232:6;25241:4;25232:13;;25227:126;25251:2;25247:1;:6;25227:126;;;25293:48;;;;;;;;25306:6;25313:1;25306:9;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25293:48;;;;;;25317:12;:23;25330:6;25337:1;25330:9;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25317:23;;;;;;;;;;;;;;;;25293:48;;;25278:9;25288:1;25278:12;;;;;;;;:::i;:::-;;;;;;;:63;;;;25260:1;25255:6;;;;;:::i;:::-;;;25227:126;;;;25372:9;25365:16;;;;;24816:573;;;;:::o;18999:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;2348:87::-;2394:7;2421:6;2414:13;;2348:87;:::o;22659:544::-;22758:7;22778:14;22824:1;22807:19;;:5;:19;;;22803:369;;22893:4;22869:28;;:13;:20;22883:5;22869:20;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;22843:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;22979:13;22995:11;:18;23007:5;22995:18;;;;;;;;;;;;;;;;22979:34;;23065:12;;23059:2;:18;;;;:::i;:::-;23048:5;23038:6;:16;;;;:::i;:::-;23037:41;;;;:::i;:::-;23028:50;;22828:262;22803:369;;;23147:12;;23141:2;:18;;;;:::i;:::-;23131:4;;23121:6;:15;;;;:::i;:::-;23120:40;;;;:::i;:::-;23111:49;;22803:369;23189:6;23182:13;;;22659:544;;;;:::o;18924:24::-;;;;:::o;19171:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;25397:712::-;2160:12;:10;:12::i;:::-;2150:22;;:6;:22;;;2146:102;;2223:12;:10;:12::i;:::-;2196:40;;;;;;;;;;;:::i;:::-;;;;;;;;2146:102;25502:1:::1;25485:19;;:5;:19;;::::0;25481:621:::1;;25552:15;25570:21;25552:39;;25643:6;25632:7;:17;;25606:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;25747:7;:5;:7::i;:::-;25739:25;;:33;25765:6;25739:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25506:278;25481:621;;;25843:15;25868:5;25861:23;;;25893:4;25861:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25843:56;;25951:6;25940:7;:17;;25914:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;26047:43;26074:7;:5;:7::i;:::-;26083:6;26054:5;26047:26;;;;:43;;;;;:::i;:::-;25790:312;25481:621;25397:712:::0;;:::o;19375:18::-;;;;;;;;;;;;;:::o;20618:88::-;2160:12;:10;:12::i;:::-;2150:22;;:6;:22;;;2146:102;;2223:12;:10;:12::i;:::-;2196:40;;;;;;;;;;;:::i;:::-;;;;;;;;2146:102;19869:4:::1;19855:18;;:10;;;;;;;;;;;:18;;;19847:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;20693:5:::2;20680:10;;:18;;;;;;;;;;;;;;;;;;20618:88::o:0;18893:24::-;;;;;;;;;;;;;:::o;19139:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19108:22::-;;;;;;;;;;;;;:::o;1007:98::-;1060:7;1087:10;1080:17;;1007:98;:::o;13852:270::-;13996:118;14030:5;14065;:18;;;14086:4;14092:2;14096:5;14050:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13996:19;:118::i;:::-;13852:270;;;;:::o;23411:364::-;23487:14;23520:3;23515:1;23505:7;:11;;;;:::i;:::-;23504:19;;;;:::i;:::-;23487:36;;23534:106;23580:10;23605:3;;;;;;;;;;;23623:6;23541;23534:31;;;;:106;;;;;;:::i;:::-;23651:116;23697:10;23722:3;;;;;;;;;;;23750:6;23740:7;:16;;;;:::i;:::-;23658:6;23651:31;;;;:116;;;;;;:::i;:::-;23476:299;23411:364;;:::o;23211:192::-;23269:14;23302:3;23297:1;23287:7;:11;;;;:::i;:::-;23286:19;;;;:::i;:::-;23269:36;;23324:3;;;;;;;;;;;23316:21;;:29;23338:6;23316:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23364:3;;;;;;;;;;;23356:21;;:39;23388:6;23378:7;:16;;;;:::i;:::-;23356:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23258:145;23211:192;:::o;13445:162::-;13528:71;13548:5;13570;:14;;;13587:2;13591:5;13555:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13528:19;:71::i;:::-;13445:162;;;:::o;16606:638::-;17030:23;17056:33;17084:4;17064:5;17056:27;;;;:33;;;;:::i;:::-;17030:59;;17125:1;17104:10;:17;:22;;:57;;;;;17142:10;17131:30;;;;;;;;;;;;:::i;:::-;17130:31;17104:57;17100:137;;;17218:5;17185:40;;;;;;;;;;;:::i;:::-;;;;;;;;17100:137;16676:568;16606:638;;:::o;8330:178::-;8430:12;8462:38;8484:6;8492:4;8498:1;8462:21;:38::i;:::-;8455:45;;8330:178;;;;:::o;8843:456::-;8976:12;9029:5;9005:21;:29;9001:110;;;9093:4;9058:41;;;;;;;;;;;:::i;:::-;;;;;;;;9001:110;9122:12;9136:23;9163:6;:11;;9182:5;9203:4;9163:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9121:97;;;;9236:55;9263:6;9271:7;9280:10;9236:26;:55::i;:::-;9229:62;;;;8843:456;;;;;:::o;10427:597::-;10575:12;10605:7;10600:417;;10629:19;10637:10;10629:7;:19::i;:::-;10600:417;;;10878:1;10857:10;:17;:22;:49;;;;;10905:1;10883:6;:18;;;:23;10857:49;10853:121;;;10951:6;10934:24;;;;;;;;;;;:::i;:::-;;;;;;;;10853:121;10995:10;10988:17;;;;10600:417;10427:597;;;;;;:::o;11602:528::-;11755:1;11735:10;:17;:21;11731:392;;;11967:10;11961:17;12024:15;12011:10;12007:2;12003:19;11996:44;11731:392;12094:17;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:329::-;2088:6;2137:2;2125:9;2116:7;2112:23;2108:32;2105:119;;;2143:79;;:::i;:::-;2105:119;2263:1;2288:53;2333:7;2324:6;2313:9;2309:22;2288:53;:::i;:::-;2278:63;;2234:117;2029:329;;;;:::o;2364:118::-;2451:24;2469:5;2451:24;:::i;:::-;2446:3;2439:37;2364:118;;:::o;2488:222::-;2581:4;2619:2;2608:9;2604:18;2596:26;;2632:71;2700:1;2689:9;2685:17;2676:6;2632:71;:::i;:::-;2488:222;;;;:::o;2716:90::-;2750:7;2793:5;2786:13;2779:21;2768:32;;2716:90;;;:::o;2812:116::-;2882:21;2897:5;2882:21;:::i;:::-;2875:5;2872:32;2862:60;;2918:1;2915;2908:12;2862:60;2812:116;:::o;2934:133::-;2977:5;3015:6;3002:20;2993:29;;3031:30;3055:5;3031:30;:::i;:::-;2934:133;;;;:::o;3073:468::-;3138:6;3146;3195:2;3183:9;3174:7;3170:23;3166:32;3163:119;;;3201:79;;:::i;:::-;3163:119;3321:1;3346:53;3391:7;3382:6;3371:9;3367:22;3346:53;:::i;:::-;3336:63;;3292:117;3448:2;3474:50;3516:7;3507:6;3496:9;3492:22;3474:50;:::i;:::-;3464:60;;3419:115;3073:468;;;;;:::o;3547:117::-;3656:1;3653;3646:12;3670:102;3711:6;3762:2;3758:7;3753:2;3746:5;3742:14;3738:28;3728:38;;3670:102;;;:::o;3778:180::-;3826:77;3823:1;3816:88;3923:4;3920:1;3913:15;3947:4;3944:1;3937:15;3964:281;4047:27;4069:4;4047:27;:::i;:::-;4039:6;4035:40;4177:6;4165:10;4162:22;4141:18;4129:10;4126:34;4123:62;4120:88;;;4188:18;;:::i;:::-;4120:88;4228:10;4224:2;4217:22;4007:238;3964:281;;:::o;4251:129::-;4285:6;4312:20;;:::i;:::-;4302:30;;4341:33;4369:4;4361:6;4341:33;:::i;:::-;4251:129;;;:::o;4386:311::-;4463:4;4553:18;4545:6;4542:30;4539:56;;;4575:18;;:::i;:::-;4539:56;4625:4;4617:6;4613:17;4605:25;;4685:4;4679;4675:15;4667:23;;4386:311;;;:::o;4703:117::-;4812:1;4809;4802:12;4843:710;4939:5;4964:81;4980:64;5037:6;4980:64;:::i;:::-;4964:81;:::i;:::-;4955:90;;5065:5;5094:6;5087:5;5080:21;5128:4;5121:5;5117:16;5110:23;;5181:4;5173:6;5169:17;5161:6;5157:30;5210:3;5202:6;5199:15;5196:122;;;5229:79;;:::i;:::-;5196:122;5344:6;5327:220;5361:6;5356:3;5353:15;5327:220;;;5436:3;5465:37;5498:3;5486:10;5465:37;:::i;:::-;5460:3;5453:50;5532:4;5527:3;5523:14;5516:21;;5403:144;5387:4;5382:3;5378:14;5371:21;;5327:220;;;5331:21;4945:608;;4843:710;;;;;:::o;5576:370::-;5647:5;5696:3;5689:4;5681:6;5677:17;5673:27;5663:122;;5704:79;;:::i;:::-;5663:122;5821:6;5808:20;5846:94;5936:3;5928:6;5921:4;5913:6;5909:17;5846:94;:::i;:::-;5837:103;;5653:293;5576:370;;;;:::o;5952:311::-;6029:4;6119:18;6111:6;6108:30;6105:56;;;6141:18;;:::i;:::-;6105:56;6191:4;6183:6;6179:17;6171:25;;6251:4;6245;6241:15;6233:23;;5952:311;;;:::o;6286:710::-;6382:5;6407:81;6423:64;6480:6;6423:64;:::i;:::-;6407:81;:::i;:::-;6398:90;;6508:5;6537:6;6530:5;6523:21;6571:4;6564:5;6560:16;6553:23;;6624:4;6616:6;6612:17;6604:6;6600:30;6653:3;6645:6;6642:15;6639:122;;;6672:79;;:::i;:::-;6639:122;6787:6;6770:220;6804:6;6799:3;6796:15;6770:220;;;6879:3;6908:37;6941:3;6929:10;6908:37;:::i;:::-;6903:3;6896:50;6975:4;6970:3;6966:14;6959:21;;6846:144;6830:4;6825:3;6821:14;6814:21;;6770:220;;;6774:21;6388:608;;6286:710;;;;;:::o;7019:370::-;7090:5;7139:3;7132:4;7124:6;7120:17;7116:27;7106:122;;7147:79;;:::i;:::-;7106:122;7264:6;7251:20;7289:94;7379:3;7371:6;7364:4;7356:6;7352:17;7289:94;:::i;:::-;7280:103;;7096:293;7019:370;;;;:::o;7395:1039::-;7522:6;7530;7538;7587:2;7575:9;7566:7;7562:23;7558:32;7555:119;;;7593:79;;:::i;:::-;7555:119;7741:1;7730:9;7726:17;7713:31;7771:18;7763:6;7760:30;7757:117;;;7793:79;;:::i;:::-;7757:117;7898:78;7968:7;7959:6;7948:9;7944:22;7898:78;:::i;:::-;7888:88;;7684:302;8053:2;8042:9;8038:18;8025:32;8084:18;8076:6;8073:30;8070:117;;;8106:79;;:::i;:::-;8070:117;8211:78;8281:7;8272:6;8261:9;8257:22;8211:78;:::i;:::-;8201:88;;7996:303;8338:2;8364:53;8409:7;8400:6;8389:9;8385:22;8364:53;:::i;:::-;8354:63;;8309:118;7395:1039;;;;;:::o;8440:759::-;8523:6;8531;8539;8547;8596:3;8584:9;8575:7;8571:23;8567:33;8564:120;;;8603:79;;:::i;:::-;8564:120;8723:1;8748:53;8793:7;8784:6;8773:9;8769:22;8748:53;:::i;:::-;8738:63;;8694:117;8850:2;8876:53;8921:7;8912:6;8901:9;8897:22;8876:53;:::i;:::-;8866:63;;8821:118;8978:2;9004:53;9049:7;9040:6;9029:9;9025:22;9004:53;:::i;:::-;8994:63;;8949:118;9106:2;9132:50;9174:7;9165:6;9154:9;9150:22;9132:50;:::i;:::-;9122:60;;9077:115;8440:759;;;;;;;:::o;9205:894::-;9323:6;9331;9380:2;9368:9;9359:7;9355:23;9351:32;9348:119;;;9386:79;;:::i;:::-;9348:119;9534:1;9523:9;9519:17;9506:31;9564:18;9556:6;9553:30;9550:117;;;9586:79;;:::i;:::-;9550:117;9691:78;9761:7;9752:6;9741:9;9737:22;9691:78;:::i;:::-;9681:88;;9477:302;9846:2;9835:9;9831:18;9818:32;9877:18;9869:6;9866:30;9863:117;;;9899:79;;:::i;:::-;9863:117;10004:78;10074:7;10065:6;10054:9;10050:22;10004:78;:::i;:::-;9994:88;;9789:303;9205:894;;;;;:::o;10105:474::-;10173:6;10181;10230:2;10218:9;10209:7;10205:23;10201:32;10198:119;;;10236:79;;:::i;:::-;10198:119;10356:1;10381:53;10426:7;10417:6;10406:9;10402:22;10381:53;:::i;:::-;10371:63;;10327:117;10483:2;10509:53;10554:7;10545:6;10534:9;10530:22;10509:53;:::i;:::-;10499:63;;10454:118;10105:474;;;;;:::o;10585:143::-;10681:6;10715:5;10709:12;10699:22;;10585:143;;;:::o;10734:213::-;10862:11;10896:6;10891:3;10884:19;10936:4;10931:3;10927:14;10912:29;;10734:213;;;;:::o;10953:161::-;11049:4;11072:3;11064:11;;11102:4;11097:3;11093:14;11085:22;;10953:161;;;:::o;11120:108::-;11197:24;11215:5;11197:24;:::i;:::-;11192:3;11185:37;11120:108;;:::o;11234:::-;11311:24;11329:5;11311:24;:::i;:::-;11306:3;11299:37;11234:108;;:::o;11434:508::-;11579:4;11574:3;11570:14;11667:4;11660:5;11656:16;11650:23;11686:63;11743:4;11738:3;11734:14;11720:12;11686:63;:::i;:::-;11594:165;11843:4;11836:5;11832:16;11826:23;11862:63;11919:4;11914:3;11910:14;11896:12;11862:63;:::i;:::-;11769:166;11548:394;11434:508;;:::o;11948:295::-;12075:10;12096:104;12196:3;12188:6;12096:104;:::i;:::-;12232:4;12227:3;12223:14;12209:28;;11948:295;;;;:::o;12249:142::-;12348:4;12380;12375:3;12371:14;12363:22;;12249:142;;;:::o;12487:964::-;12664:3;12693:83;12770:5;12693:83;:::i;:::-;12792:115;12900:6;12895:3;12792:115;:::i;:::-;12785:122;;12931:85;13010:5;12931:85;:::i;:::-;13039:7;13070:1;13055:371;13080:6;13077:1;13074:13;13055:371;;;13156:6;13150:13;13183:121;13300:3;13285:13;13183:121;:::i;:::-;13176:128;;13327:89;13409:6;13327:89;:::i;:::-;13317:99;;13115:311;13102:1;13099;13095:9;13090:14;;13055:371;;;13059:14;13442:3;13435:10;;12669:782;;;12487:964;;;;:::o;13457:489::-;13658:4;13696:2;13685:9;13681:18;13673:26;;13745:9;13739:4;13735:20;13731:1;13720:9;13716:17;13709:47;13773:166;13934:4;13925:6;13773:166;:::i;:::-;13765:174;;13457:489;;;;:::o;13952:109::-;14033:21;14048:5;14033:21;:::i;:::-;14028:3;14021:34;13952:109;;:::o;14067:210::-;14154:4;14192:2;14181:9;14177:18;14169:26;;14205:65;14267:1;14256:9;14252:17;14243:6;14205:65;:::i;:::-;14067:210;;;;:::o;14283:329::-;14342:6;14391:2;14379:9;14370:7;14366:23;14362:32;14359:119;;;14397:79;;:::i;:::-;14359:119;14517:1;14542:53;14587:7;14578:6;14567:9;14563:22;14542:53;:::i;:::-;14532:63;;14488:117;14283:329;;;;:::o;14618:169::-;14702:11;14736:6;14731:3;14724:19;14776:4;14771:3;14767:14;14752:29;;14618:169;;;;:::o;14793:181::-;14933:33;14929:1;14921:6;14917:14;14910:57;14793:181;:::o;14980:366::-;15122:3;15143:67;15207:2;15202:3;15143:67;:::i;:::-;15136:74;;15219:93;15308:3;15219:93;:::i;:::-;15337:2;15332:3;15328:12;15321:19;;14980:366;;;:::o;15352:419::-;15518:4;15556:2;15545:9;15541:18;15533:26;;15605:9;15599:4;15595:20;15591:1;15580:9;15576:17;15569:47;15633:131;15759:4;15633:131;:::i;:::-;15625:139;;15352:419;;;:::o;15777:180::-;15825:77;15822:1;15815:88;15922:4;15919:1;15912:15;15946:4;15943:1;15936:15;15963:102;16005:8;16052:5;16049:1;16045:13;16024:34;;15963:102;;;:::o;16071:848::-;16132:5;16139:4;16163:6;16154:15;;16187:5;16178:14;;16201:712;16222:1;16212:8;16209:15;16201:712;;;16317:4;16312:3;16308:14;16302:4;16299:24;16296:50;;;16326:18;;:::i;:::-;16296:50;16376:1;16366:8;16362:16;16359:451;;;16791:4;16784:5;16780:16;16771:25;;16359:451;16841:4;16835;16831:15;16823:23;;16871:32;16894:8;16871:32;:::i;:::-;16859:44;;16201:712;;;16071:848;;;;;;;:::o;16925:1073::-;16979:5;17170:8;17160:40;;17191:1;17182:10;;17193:5;;17160:40;17219:4;17209:36;;17236:1;17227:10;;17238:5;;17209:36;17305:4;17353:1;17348:27;;;;17389:1;17384:191;;;;17298:277;;17348:27;17366:1;17357:10;;17368:5;;;17384:191;17429:3;17419:8;17416:17;17413:43;;;17436:18;;:::i;:::-;17413:43;17485:8;17482:1;17478:16;17469:25;;17520:3;17513:5;17510:14;17507:40;;;17527:18;;:::i;:::-;17507:40;17560:5;;;17298:277;;17684:2;17674:8;17671:16;17665:3;17659:4;17656:13;17652:36;17634:2;17624:8;17621:16;17616:2;17610:4;17607:12;17603:35;17587:111;17584:246;;;17740:8;17734:4;17730:19;17721:28;;17775:3;17768:5;17765:14;17762:40;;;17782:18;;:::i;:::-;17762:40;17815:5;;17584:246;17855:42;17893:3;17883:8;17877:4;17874:1;17855:42;:::i;:::-;17840:57;;;;17929:4;17924:3;17920:14;17913:5;17910:25;17907:51;;;17938:18;;:::i;:::-;17907:51;17987:4;17980:5;17976:16;17967:25;;16925:1073;;;;;;:::o;18004:285::-;18064:5;18088:23;18106:4;18088:23;:::i;:::-;18080:31;;18132:27;18150:8;18132:27;:::i;:::-;18120:39;;18178:104;18215:66;18205:8;18199:4;18178:104;:::i;:::-;18169:113;;18004:285;;;;:::o;18295:410::-;18335:7;18358:20;18376:1;18358:20;:::i;:::-;18353:25;;18392:20;18410:1;18392:20;:::i;:::-;18387:25;;18447:1;18444;18440:9;18469:30;18487:11;18469:30;:::i;:::-;18458:41;;18648:1;18639:7;18635:15;18632:1;18629:22;18609:1;18602:9;18582:83;18559:139;;18678:18;;:::i;:::-;18559:139;18343:362;18295:410;;;;:::o;18711:180::-;18759:77;18756:1;18749:88;18856:4;18853:1;18846:15;18880:4;18877:1;18870:15;18897:185;18937:1;18954:20;18972:1;18954:20;:::i;:::-;18949:25;;18988:20;19006:1;18988:20;:::i;:::-;18983:25;;19027:1;19017:35;;19032:18;;:::i;:::-;19017:35;19074:1;19071;19067:9;19062:14;;18897:185;;;;:::o;19088:239::-;19228:34;19224:1;19216:6;19212:14;19205:58;19297:22;19292:2;19284:6;19280:15;19273:47;19088:239;:::o;19333:366::-;19475:3;19496:67;19560:2;19555:3;19496:67;:::i;:::-;19489:74;;19572:93;19661:3;19572:93;:::i;:::-;19690:2;19685:3;19681:12;19674:19;;19333:366;;;:::o;19705:419::-;19871:4;19909:2;19898:9;19894:18;19886:26;;19958:9;19952:4;19948:20;19944:1;19933:9;19929:17;19922:47;19986:131;20112:4;19986:131;:::i;:::-;19978:139;;19705:419;;;:::o;20130:180::-;20178:77;20175:1;20168:88;20275:4;20272:1;20265:15;20299:4;20296:1;20289:15;20316:191;20356:3;20375:20;20393:1;20375:20;:::i;:::-;20370:25;;20409:20;20427:1;20409:20;:::i;:::-;20404:25;;20452:1;20449;20445:9;20438:16;;20473:3;20470:1;20467:10;20464:36;;;20480:18;;:::i;:::-;20464:36;20316:191;;;;:::o;20513:178::-;20653:30;20649:1;20641:6;20637:14;20630:54;20513:178;:::o;20697:366::-;20839:3;20860:67;20924:2;20919:3;20860:67;:::i;:::-;20853:74;;20936:93;21025:3;20936:93;:::i;:::-;21054:2;21049:3;21045:12;21038:19;;20697:366;;;:::o;21069:419::-;21235:4;21273:2;21262:9;21258:18;21250:26;;21322:9;21316:4;21312:20;21308:1;21297:9;21293:17;21286:47;21350:131;21476:4;21350:131;:::i;:::-;21342:139;;21069:419;;;:::o;21494:86::-;21529:7;21569:4;21562:5;21558:16;21547:27;;21494:86;;;:::o;21586:118::-;21657:22;21673:5;21657:22;:::i;:::-;21650:5;21647:33;21637:61;;21694:1;21691;21684:12;21637:61;21586:118;:::o;21710:139::-;21765:5;21796:6;21790:13;21781:22;;21812:31;21837:5;21812:31;:::i;:::-;21710:139;;;;:::o;21855:347::-;21923:6;21972:2;21960:9;21951:7;21947:23;21943:32;21940:119;;;21978:79;;:::i;:::-;21940:119;22098:1;22123:62;22177:7;22168:6;22157:9;22153:22;22123:62;:::i;:::-;22113:72;;22069:126;21855:347;;;;:::o;22208:178::-;22348:30;22344:1;22336:6;22332:14;22325:54;22208:178;:::o;22392:366::-;22534:3;22555:67;22619:2;22614:3;22555:67;:::i;:::-;22548:74;;22631:93;22720:3;22631:93;:::i;:::-;22749:2;22744:3;22740:12;22733:19;;22392:366;;;:::o;22764:419::-;22930:4;22968:2;22957:9;22953:18;22945:26;;23017:9;23011:4;23007:20;23003:1;22992:9;22988:17;22981:47;23045:131;23171:4;23045:131;:::i;:::-;23037:139;;22764:419;;;:::o;23189:175::-;23329:27;23325:1;23317:6;23313:14;23306:51;23189:175;:::o;23370:366::-;23512:3;23533:67;23597:2;23592:3;23533:67;:::i;:::-;23526:74;;23609:93;23698:3;23609:93;:::i;:::-;23727:2;23722:3;23718:12;23711:19;;23370:366;;;:::o;23742:419::-;23908:4;23946:2;23935:9;23931:18;23923:26;;23995:9;23989:4;23985:20;23981:1;23970:9;23966:17;23959:47;24023:131;24149:4;24023:131;:::i;:::-;24015:139;;23742:419;;;:::o;24167:229::-;24307:34;24303:1;24295:6;24291:14;24284:58;24376:12;24371:2;24363:6;24359:15;24352:37;24167:229;:::o;24402:366::-;24544:3;24565:67;24629:2;24624:3;24565:67;:::i;:::-;24558:74;;24641:93;24730:3;24641:93;:::i;:::-;24759:2;24754:3;24750:12;24743:19;;24402:366;;;:::o;24774:419::-;24940:4;24978:2;24967:9;24963:18;24955:26;;25027:9;25021:4;25017:20;25013:1;25002:9;24998:17;24991:47;25055:131;25181:4;25055:131;:::i;:::-;25047:139;;24774:419;;;:::o;25199:332::-;25320:4;25358:2;25347:9;25343:18;25335:26;;25371:71;25439:1;25428:9;25424:17;25415:6;25371:71;:::i;:::-;25452:72;25520:2;25509:9;25505:18;25496:6;25452:72;:::i;:::-;25199:332;;;;;:::o;25537:230::-;25677:34;25673:1;25665:6;25661:14;25654:58;25746:13;25741:2;25733:6;25729:15;25722:38;25537:230;:::o;25773:366::-;25915:3;25936:67;26000:2;25995:3;25936:67;:::i;:::-;25929:74;;26012:93;26101:3;26012:93;:::i;:::-;26130:2;26125:3;26121:12;26114:19;;25773:366;;;:::o;26145:419::-;26311:4;26349:2;26338:9;26334:18;26326:26;;26398:9;26392:4;26388:20;26384:1;26373:9;26369:17;26362:47;26426:131;26552:4;26426:131;:::i;:::-;26418:139;;26145:419;;;:::o;26570:194::-;26610:4;26630:20;26648:1;26630:20;:::i;:::-;26625:25;;26664:20;26682:1;26664:20;:::i;:::-;26659:25;;26708:1;26705;26701:9;26693:17;;26732:1;26726:4;26723:11;26720:37;;;26737:18;;:::i;:::-;26720:37;26570:194;;;;:::o;26770:226::-;26910:34;26906:1;26898:6;26894:14;26887:58;26979:9;26974:2;26966:6;26962:15;26955:34;26770:226;:::o;27002:366::-;27144:3;27165:67;27229:2;27224:3;27165:67;:::i;:::-;27158:74;;27241:93;27330:3;27241:93;:::i;:::-;27359:2;27354:3;27350:12;27343:19;;27002:366;;;:::o;27374:419::-;27540:4;27578:2;27567:9;27563:18;27555:26;;27627:9;27621:4;27617:20;27613:1;27602:9;27598:17;27591:47;27655:131;27781:4;27655:131;:::i;:::-;27647:139;;27374:419;;;:::o;27799:143::-;27856:5;27887:6;27881:13;27872:22;;27903:33;27930:5;27903:33;:::i;:::-;27799:143;;;;:::o;27948:351::-;28018:6;28067:2;28055:9;28046:7;28042:23;28038:32;28035:119;;;28073:79;;:::i;:::-;28035:119;28193:1;28218:64;28274:7;28265:6;28254:9;28250:22;28218:64;:::i;:::-;28208:74;;28164:128;27948:351;;;;:::o;28305:226::-;28445:34;28441:1;28433:6;28429:14;28422:58;28514:9;28509:2;28501:6;28497:15;28490:34;28305:226;:::o;28537:366::-;28679:3;28700:67;28764:2;28759:3;28700:67;:::i;:::-;28693:74;;28776:93;28865:3;28776:93;:::i;:::-;28894:2;28889:3;28885:12;28878:19;;28537:366;;;:::o;28909:419::-;29075:4;29113:2;29102:9;29098:18;29090:26;;29162:9;29156:4;29152:20;29148:1;29137:9;29133:17;29126:47;29190:131;29316:4;29190:131;:::i;:::-;29182:139;;28909:419;;;:::o;29334:442::-;29483:4;29521:2;29510:9;29506:18;29498:26;;29534:71;29602:1;29591:9;29587:17;29578:6;29534:71;:::i;:::-;29615:72;29683:2;29672:9;29668:18;29659:6;29615:72;:::i;:::-;29697;29765:2;29754:9;29750:18;29741:6;29697:72;:::i;:::-;29334:442;;;;;;:::o;29782:332::-;29903:4;29941:2;29930:9;29926:18;29918:26;;29954:71;30022:1;30011:9;30007:17;29998:6;29954:71;:::i;:::-;30035:72;30103:2;30092:9;30088:18;30079:6;30035:72;:::i;:::-;29782:332;;;;;:::o;30120:137::-;30174:5;30205:6;30199:13;30190:22;;30221:30;30245:5;30221:30;:::i;:::-;30120:137;;;;:::o;30263:345::-;30330:6;30379:2;30367:9;30358:7;30354:23;30350:32;30347:119;;;30385:79;;:::i;:::-;30347:119;30505:1;30530:61;30583:7;30574:6;30563:9;30559:22;30530:61;:::i;:::-;30520:71;;30476:125;30263:345;;;;:::o;30614:98::-;30665:6;30699:5;30693:12;30683:22;;30614:98;;;:::o;30718:147::-;30819:11;30856:3;30841:18;;30718:147;;;;:::o;30871:139::-;30960:6;30955:3;30950;30944:23;31001:1;30992:6;30987:3;30983:16;30976:27;30871:139;;;:::o;31016:386::-;31120:3;31148:38;31180:5;31148:38;:::i;:::-;31202:88;31283:6;31278:3;31202:88;:::i;:::-;31195:95;;31299:65;31357:6;31352:3;31345:4;31338:5;31334:16;31299:65;:::i;:::-;31389:6;31384:3;31380:16;31373:23;;31124:278;31016:386;;;;:::o;31408:271::-;31538:3;31560:93;31649:3;31640:6;31560:93;:::i;:::-;31553:100;;31670:3;31663:10;;31408:271;;;;:::o
Swarm Source
ipfs://bdba63ab1c97320ca5f60b44320400b577b3afa3c1a13c7b08fe53bd47c62a33
Loading...
Loading
Loading...
Loading
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.