Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
TokenRedeemer
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 pragma solidity 0.7.6; pragma abicoder v2; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; import "@openzeppelin/contracts/math/SafeMath.sol"; import "./ISuper1155.sol"; /** @title TokenRedeemer @author 0xthrpw This contract allows an erc1155 of a given group to be redeemed or burned in exchange for a token from a new group */ contract TokenRedeemer is Ownable, ReentrancyGuard { using SafeMath for uint256; ISuper1155 public super1155; address public burnAddress; bool public customBurn; struct RedemptionConfig { uint256 amountOut; bool burnOnRedemption; } // groupIdIn => groupIdOut => config mapping (uint256 => mapping(uint256 => RedemptionConfig)) public redemptionConfigs; // groupId => tokenId => redeemer mapping (uint256 => mapping(uint256 => address)) public redeemers; // groupId => tokenId => redeemed mapping (uint256 => mapping(uint256 => bool)) public redeemed; event TokenRedemption(address user, uint256 tokenIn, uint256[] tokensOut); event ConfigUpdate(uint256 groupIdIn, uint256 groupIdOut, uint256 amountOut, bool burnOnRedemption); /** On deployment, set `_super1155` as the token to redeem, set the burn address as `_burnTarget` and enable use of a custom burn address by setting _customBurn @param _super1155 The token for which this contract will allow redemptions @param _burnTarget The address that will be used for burning tokens @param _customBurn Boolean for enabling a custom burn address */ constructor(ISuper1155 _super1155, address _burnTarget, bool _customBurn) public { super1155 = _super1155; customBurn = _customBurn; if(customBurn){ require(_burnTarget != address(0), "TokenRedeemer::constructor: Custom burn address cannot be 0 address"); burnAddress = _burnTarget; } } /** Redeem a specific token `_tokenId` for a token from group `_groupIdOut` @param _tokenId The bitpacked 1155 token id @param _groupIdOut The group id of the token to receive */ function redeem(uint256 _tokenId, uint256 _groupIdOut) external nonReentrant { _redeemToken(_tokenId, _groupIdOut); } /** Redeem a specific set of tokens `_tokenIds` for a set of token from group `_groupIdOut` @param _tokenIds An array of bitpacked 1155 token ids @param _groupIdOut The group id of the token to receive */ function redeemMult(uint256[] calldata _tokenIds, uint256 _groupIdOut) external nonReentrant { for(uint256 n = 0; n < _tokenIds.length; n++){ _redeemToken(_tokenIds[n], _groupIdOut); } } /** Redeem a token for n number of tokens in return. This function parses the tokens group id, determines the appropriate exchange token and amount, if necessary burns the deposited token and mints the receipt token(s) @param _tokenId The bitpacked 1155 token id @param _groupIdOut The group ID of the token being received */ function _redeemToken(uint256 _tokenId, uint256 _groupIdOut) internal { uint256 _groupIdIn = _tokenId >> 128; require(!redeemed[_groupIdOut][_tokenId], "TokenRedeemer::redeem: token has already been redeemed for this group" ); RedemptionConfig memory config = redemptionConfigs[_groupIdIn][_groupIdOut]; uint256 redemptionAmount = config.amountOut; { require(_groupIdOut != uint256(0), "TokenRedeemer::redeem: invalid group id from token"); require(redemptionAmount != uint256(0), "TokenRedeemer::redeem: invalid redemption amount"); uint256 balanceOfSender = super1155.balanceOf(address(msg.sender), _tokenId); require(balanceOfSender != 0, "TokenRedeemer::redeem: msg sender is not token owner"); } (bool groupInit, , , , , , , , , uint256 mintCount,) = super1155.itemGroups(_groupIdOut); require(groupInit, "TokenRedeemer::redeem: item group not initialized"); uint256[] memory ids = new uint256[](redemptionAmount); uint256[] memory amounts = new uint[](redemptionAmount); uint256 newgroupIdPrep = _groupIdOut << 128; for(uint256 i = 0; i < redemptionAmount; i++){ ids[i] = newgroupIdPrep.add(mintCount).add(1).add(i); amounts[i] = uint256(1); } redeemers[_groupIdOut][_tokenId] = address(msg.sender); redeemed[_groupIdOut][_tokenId] = true; if(config.burnOnRedemption){ if(customBurn){ super1155.safeTransferFrom(msg.sender, burnAddress, _tokenId, 1, ""); }else{ super1155.burnBatch(msg.sender, _asSingletonArray(_tokenId), _asSingletonArray(1)); } } super1155.mintBatch(msg.sender, ids, amounts, ""); emit TokenRedemption(msg.sender, _tokenId, ids); } /** Configure redemption amounts for each group. ONE token of _groupIdin results in _amountOut number of _groupIdOut tokens @param _groupIdIn The group ID of the token being redeemed @param _groupIdIn The group ID of the token being received @param _data The redemption config data input. */ function setRedemptionConfig(uint256 _groupIdIn, uint256 _groupIdOut, RedemptionConfig calldata _data) external onlyOwner { require(_groupIdIn != _groupIdOut, "TokenRedeemer:setRedemptionAmounts: token in must be different from token out"); redemptionConfigs[_groupIdIn][_groupIdOut] = RedemptionConfig({ amountOut: _data.amountOut, burnOnRedemption: _data.burnOnRedemption }); emit ConfigUpdate(_groupIdIn, _groupIdOut, _data.amountOut, _data.burnOnRedemption); } /** This private helper function converts a number into a single-element array. @param _element The element to convert to an array. @return The array containing the single `_element`. */ function _asSingletonArray(uint256 _element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = _element; return array; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity 0.7.6; interface ISuper1155 { function BURN ( ) external view returns ( bytes32 ); function CONFIGURE_GROUP ( ) external view returns ( bytes32 ); function LOCK_CREATION ( ) external view returns ( bytes32 ); function LOCK_ITEM_URI ( ) external view returns ( bytes32 ); function LOCK_URI ( ) external view returns ( bytes32 ); function MANAGER ( ) external view returns ( bytes32 ); function MINT ( ) external view returns ( bytes32 ); function SET_METADATA ( ) external view returns ( bytes32 ); function SET_PROXY_REGISTRY ( ) external view returns ( bytes32 ); function SET_URI ( ) external view returns ( bytes32 ); function UNIVERSAL ( ) external view returns ( bytes32 ); function ZERO_RIGHT ( ) external view returns ( bytes32 ); function balanceOf ( address _owner, uint256 _id ) external view returns ( uint256 ); function balanceOfBatch ( address[] memory _owners, uint256[] memory _ids ) external view returns ( uint256[] memory ); function burn ( address _burner, uint256 _id, uint256 _amount ) external; function burnBatch ( address _burner, uint256[] memory _ids, uint256[] memory _amounts ) external; function burnCount ( uint256 ) external view returns ( uint256 ); function circulatingSupply ( uint256 ) external view returns ( uint256 ); function configureGroup ( uint256 _groupId, bytes calldata _data ) external; function groupBalances ( uint256, address ) external view returns ( uint256 ); function hasRightUntil ( address _address, bytes32 _circumstance, bytes32 _right ) external view returns ( uint256 ); function isApprovedForAll ( address _owner, address _operator ) external view returns ( bool ); function itemGroups ( uint256 ) external view returns ( bool initialized, string memory _name, uint8 supplyType, uint256 supplyData, uint8 itemType, uint256 itemData, uint8 burnType, uint256 burnData, uint256 _circulatingSupply, uint256 _mintCount, uint256 _burnCount ); function lock ( ) external; function lockURI ( string memory _uri, uint256 _id ) external; function lockURI ( string memory _uri ) external; function locked ( ) external view returns ( bool ); function managerRight ( bytes32 ) external view returns ( bytes32 ); function metadata ( uint256 ) external view returns ( string memory ); function metadataFrozen ( uint256 ) external view returns ( bool ); function metadataUri ( ) external view returns ( string memory ); function mintBatch ( address _recipient, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data ) external; function mintCount ( uint256 ) external view returns ( uint256 ); function name ( ) external view returns ( string memory ); function owner ( ) external view returns ( address ); function permissions ( address, bytes32, bytes32 ) external view returns ( uint256 ); function proxyRegistryAddress ( ) external view returns ( address ); function renounceOwnership ( ) external; function safeBatchTransferFrom ( address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data ) external; function safeTransferFrom ( address _from, address _to, uint256 _id, uint256 _amount, bytes memory _data ) external; function setApprovalForAll ( address _operator, bool _approved ) external; function setManagerRight ( bytes32 _managedRight, bytes32 _managerRight ) external; function setMetadata ( uint256 _id, string memory _metadata ) external; function setPermit ( address _address, bytes32 _circumstance, bytes32 _right, uint256 _expirationTime ) external; function setProxyRegistry ( address _proxyRegistryAddress ) external; function setURI ( string memory _uri ) external; function supportsInterface ( bytes4 interfaceId ) external view returns ( bool ); function totalBalances ( address ) external view returns ( uint256 ); function transferOwnership ( address newOwner ) external; function uri ( uint256 ) external view returns ( string memory ); function uriLocked ( ) external view returns ( bool ); function version ( ) external view returns ( uint256 ); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract ISuper1155","name":"_super1155","type":"address"},{"internalType":"address","name":"_burnTarget","type":"address"},{"internalType":"bool","name":"_customBurn","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"groupIdIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"groupIdOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"bool","name":"burnOnRedemption","type":"bool"}],"name":"ConfigUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenIn","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"tokensOut","type":"uint256[]"}],"name":"TokenRedemption","type":"event"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"customBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_groupIdOut","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"uint256","name":"_groupIdOut","type":"uint256"}],"name":"redeemMult","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"redeemed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"redeemers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"redemptionConfigs","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"bool","name":"burnOnRedemption","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_groupIdIn","type":"uint256"},{"internalType":"uint256","name":"_groupIdOut","type":"uint256"},{"components":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"bool","name":"burnOnRedemption","type":"bool"}],"internalType":"struct TokenRedeemer.RedemptionConfig","name":"_data","type":"tuple"}],"name":"setRedemptionConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"super1155","outputs":[{"internalType":"contract ISuper1155","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620023543803806200235483398181016040528101906200003791906200026a565b6000620000496200021d60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506001808190555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360146101000a81548160ff021916908315150217905550600360149054906101000a900460ff16156200021457600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620001d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001c9906200034e565b60405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50505062000423565b600033905090565b6000815190506200023681620003d5565b92915050565b6000815190506200024d81620003ef565b92915050565b600081519050620002648162000409565b92915050565b6000806000606084860312156200028057600080fd5b6000620002908682870162000253565b9350506020620002a38682870162000225565b9250506040620002b6868287016200023c565b9150509250925092565b6000620002cf60438362000370565b91507f546f6b656e52656465656d65723a3a636f6e7374727563746f723a204375737460008301527f6f6d206275726e20616464726573732063616e6e6f742062652030206164647260208301527f65737300000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b600060208201905081810360008301526200036981620002c0565b9050919050565b600082825260208201905092915050565b60006200038e82620003b5565b9050919050565b60008115159050919050565b6000620003ae8262000381565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620003e08162000381565b8114620003ec57600080fd5b50565b620003fa8162000395565b81146200040657600080fd5b50565b6200041481620003a1565b81146200042057600080fd5b50565b611f2180620004336000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063715018a611610071578063715018a61461018e5780637cbc237314610198578063873950eb146101b45780638da5cb5b146101e4578063a874fb3a14610202578063f2fde38b14610220576100b4565b806309440725146100b957806332e1b2f6146100e95780634cb4beef146101075780635e7f3c3c146101235780636174a4c71461013f57806370d5ae0514610170575b600080fd5b6100d360048036038101906100ce919061158d565b61023c565b6040516100e091906119c1565b60405180910390f35b6100f161027e565b6040516100fe9190611b53565b60405180910390f35b610121600480360381019061011c91906115c9565b6102a4565b005b61013d600480360381019061013891906113db565b61046c565b005b6101596004803603810190610154919061158d565b610531565b604051610167929190611c49565b60405180910390f35b61017861056f565b60405161018591906119c1565b60405180910390f35b610196610595565b005b6101b260048036038101906101ad919061158d565b610702565b005b6101ce60048036038101906101c9919061158d565b610798565b6040516101db9190611b38565b60405180910390f35b6101ec6107c7565b6040516101f991906119c1565b60405180910390f35b61020a6107f0565b6040516102179190611b38565b60405180910390f35b61023a600480360381019061023591906113b2565b610803565b005b60056020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6102ac6109f5565b73ffffffffffffffffffffffffffffffffffffffff166102ca6107c7565b73ffffffffffffffffffffffffffffffffffffffff1614610353576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81831415610396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038d90611c0e565b60405180910390fd5b6040518060400160405280826000013581526020018260200160208101906103be9190611433565b15158152506004600085815260200190815260200160002060008481526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff0219169083151502179055509050507f5f15372d39c825b9d7b12c01d7808d758a40be125c8ca532dfc3370fe0ab46dd8383836000013584602001602081019061044f9190611433565b60405161045f9493929190611c72565b60405180910390a1505050565b600260015414156104e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555060005b838390508110156105245761051784848381811061050a57fe5b90506020020135836109fd565b80806001019150506104f0565b5060018081905550505050565b6004602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900460ff16905082565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61059d6109f5565b73ffffffffffffffffffffffffffffffffffffffff166105bb6107c7565b73ffffffffffffffffffffffffffffffffffffffff1614610644576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6002600154141561077b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555061078d82826109fd565b600180819055505050565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600360149054906101000a900460ff1681565b61080b6109f5565b73ffffffffffffffffffffffffffffffffffffffff166108296107c7565b73ffffffffffffffffffffffffffffffffffffffff16146108b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610938576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611ec66026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6000608083901c905060066000838152602001908152602001600020600084815260200190815260200160002060009054906101000a900460ff1615610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90611bae565b60405180910390fd5b6000600460008381526020019081526020016000206000848152602001908152602001600020604051806040016040529081600082015481526020016001820160009054906101000a900460ff16151515158152505090506000816000015190506000841415610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1490611b8e565b60405180910390fd5b6000811415610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5890611b6e565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33886040518363ffffffff1660e01b8152600401610bbf929190611b0f565b60206040518083038186803b158015610bd757600080fd5b505afa158015610beb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0f9190611564565b90506000811415610c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4c90611bce565b60405180910390fd5b50600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638c2a4c4f876040518263ffffffff1660e01b8152600401610cb49190611c2e565b60006040518083038186803b158015610ccc57600080fd5b505afa158015610ce0573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610d09919061145c565b5099505050505050505050915081610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d90611bee565b60405180910390fd5b60008367ffffffffffffffff81118015610d6f57600080fd5b50604051908082528060200260200182016040528015610d9e5781602001602082028036833780820191505090505b50905060008467ffffffffffffffff81118015610dba57600080fd5b50604051908082528060200260200182016040528015610de95781602001602082028036833780820191505090505b5090506000608089901b905060005b86811015610e7757610e3881610e2a6001610e1c898761116e90919063ffffffff16565b61116e90919063ffffffff16565b61116e90919063ffffffff16565b848281518110610e4457fe5b6020026020010181815250506001838281518110610e5e57fe5b6020026020010181815250508080600101915050610df8565b5033600560008b815260200190815260200160002060008c815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660008b815260200190815260200160002060008c815260200190815260200160002060006101000a81548160ff02191690831515021790555086602001511561109657600360149054906101000a900460ff1615610ff257600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a33600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168d60016040518563ffffffff1660e01b8152600401610fbb94939291906119dc565b600060405180830381600087803b158015610fd557600080fd5b505af1158015610fe9573d6000803e3d6000fd5b50505050611095565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b20c4543361103a8d6111f6565b61104460016111f6565b6040518463ffffffff1660e01b815260040161106293929190611a34565b600060405180830381600087803b15801561107c57600080fd5b505af1158015611090573d6000803e3d6000fd5b505050505b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f7fdffa3385856040518463ffffffff1660e01b81526004016110f593929190611a79565b600060405180830381600087803b15801561110f57600080fd5b505af1158015611123573d6000803e3d6000fd5b505050507fef3d0cfeea98d1c6fc7ee89f8b994b7592ac69d498c348629b426bd0c130baac338b8560405161115a93929190611ad1565b60405180910390a150505050505050505050565b6000808284019050838110156111ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60606000600167ffffffffffffffff8111801561121257600080fd5b506040519080825280602002602001820160405280156112415781602001602082028036833780820191505090505b509050828160008151811061125257fe5b60200260200101818152505080915050919050565b600061127a61127584611ce8565b611cb7565b90508281526020810184848401111561129257600080fd5b61129d848285611e34565b509392505050565b6000813590506112b481611e69565b92915050565b60008083601f8401126112cc57600080fd5b8235905067ffffffffffffffff8111156112e557600080fd5b6020830191508360208202830111156112fd57600080fd5b9250929050565b60008135905061131381611e80565b92915050565b60008151905061132881611e80565b92915050565b600082601f83011261133f57600080fd5b815161134f848260208601611267565b91505092915050565b60006040828403121561136a57600080fd5b81905092915050565b60008135905061138281611e97565b92915050565b60008151905061139781611e97565b92915050565b6000815190506113ac81611eae565b92915050565b6000602082840312156113c457600080fd5b60006113d2848285016112a5565b91505092915050565b6000806000604084860312156113f057600080fd5b600084013567ffffffffffffffff81111561140a57600080fd5b611416868287016112ba565b9350935050602061142986828701611373565b9150509250925092565b60006020828403121561144557600080fd5b600061145384828501611304565b91505092915050565b60008060008060008060008060008060006101608c8e03121561147e57600080fd5b600061148c8e828f01611319565b9b505060208c015167ffffffffffffffff8111156114a957600080fd5b6114b58e828f0161132e565b9a505060406114c68e828f0161139d565b99505060606114d78e828f01611388565b98505060806114e88e828f0161139d565b97505060a06114f98e828f01611388565b96505060c061150a8e828f0161139d565b95505060e061151b8e828f01611388565b94505061010061152d8e828f01611388565b93505061012061153f8e828f01611388565b9250506101406115518e828f01611388565b9150509295989b509295989b9093969950565b60006020828403121561157657600080fd5b600061158484828501611388565b91505092915050565b600080604083850312156115a057600080fd5b60006115ae85828601611373565b92505060206115bf85828601611373565b9150509250929050565b6000806000608084860312156115de57600080fd5b60006115ec86828701611373565b93505060206115fd86828701611373565b925050604061160e86828701611358565b9150509250925092565b600061162483836119a3565b60208301905092915050565b61163981611dc8565b82525050565b61164881611d73565b82525050565b600061165982611d28565b6116638185611d40565b935061166e83611d18565b8060005b8381101561169f5781516116868882611618565b975061169183611d33565b925050600181019050611672565b5085935050505092915050565b6116b581611d85565b82525050565b6116c481611dda565b82525050565b6116d381611dfe565b82525050565b60006116e6603083611d62565b91507f546f6b656e52656465656d65723a3a72656465656d3a20696e76616c6964207260008301527f6564656d7074696f6e20616d6f756e74000000000000000000000000000000006020830152604082019050919050565b600061174c603283611d62565b91507f546f6b656e52656465656d65723a3a72656465656d3a20696e76616c6964206760008301527f726f75702069642066726f6d20746f6b656e00000000000000000000000000006020830152604082019050919050565b60006117b2604583611d62565b91507f546f6b656e52656465656d65723a3a72656465656d3a20746f6b656e2068617360008301527f20616c7265616479206265656e2072656465656d656420666f7220746869732060208301527f67726f75700000000000000000000000000000000000000000000000000000006040830152606082019050919050565b600061183e603483611d62565b91507f546f6b656e52656465656d65723a3a72656465656d3a206d73672073656e646560008301527f72206973206e6f7420746f6b656e206f776e65720000000000000000000000006020830152604082019050919050565b60006118a4600083611d51565b9150600082019050919050565b60006118be603183611d62565b91507f546f6b656e52656465656d65723a3a72656465656d3a206974656d2067726f7560008301527f70206e6f7420696e697469616c697a65640000000000000000000000000000006020830152604082019050919050565b6000611924604d83611d62565b91507f546f6b656e52656465656d65723a736574526564656d7074696f6e416d6f756e60008301527f74733a20746f6b656e20696e206d75737420626520646966666572656e74206660208301527f726f6d20746f6b656e206f7574000000000000000000000000000000000000006040830152606082019050919050565b6119ac81611db1565b82525050565b6119bb81611db1565b82525050565b60006020820190506119d6600083018461163f565b92915050565b600060a0820190506119f16000830187611630565b6119fe602083018661163f565b611a0b60408301856119b2565b611a1860608301846116ca565b8181036080830152611a2981611897565b905095945050505050565b6000606082019050611a496000830186611630565b8181036020830152611a5b818561164e565b90508181036040830152611a6f818461164e565b9050949350505050565b6000608082019050611a8e6000830186611630565b8181036020830152611aa0818561164e565b90508181036040830152611ab4818461164e565b90508181036060830152611ac781611897565b9050949350505050565b6000606082019050611ae66000830186611630565b611af360208301856119b2565b8181036040830152611b05818461164e565b9050949350505050565b6000604082019050611b24600083018561163f565b611b3160208301846119b2565b9392505050565b6000602082019050611b4d60008301846116ac565b92915050565b6000602082019050611b6860008301846116bb565b92915050565b60006020820190508181036000830152611b87816116d9565b9050919050565b60006020820190508181036000830152611ba78161173f565b9050919050565b60006020820190508181036000830152611bc7816117a5565b9050919050565b60006020820190508181036000830152611be781611831565b9050919050565b60006020820190508181036000830152611c07816118b1565b9050919050565b60006020820190508181036000830152611c2781611917565b9050919050565b6000602082019050611c4360008301846119b2565b92915050565b6000604082019050611c5e60008301856119b2565b611c6b60208301846116ac565b9392505050565b6000608082019050611c8760008301876119b2565b611c9460208301866119b2565b611ca160408301856119b2565b611cae60608301846116ac565b95945050505050565b6000604051905081810181811067ffffffffffffffff82111715611cde57611cdd611e67565b5b8060405250919050565b600067ffffffffffffffff821115611d0357611d02611e67565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611d7e82611d91565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611dd382611e10565b9050919050565b6000611de582611dec565b9050919050565b6000611df782611d91565b9050919050565b6000611e0982611db1565b9050919050565b6000611e1b82611e22565b9050919050565b6000611e2d82611d91565b9050919050565b60005b83811015611e52578082015181840152602081019050611e37565b83811115611e61576000848401525b50505050565bfe5b611e7281611d73565b8114611e7d57600080fd5b50565b611e8981611d85565b8114611e9457600080fd5b50565b611ea081611db1565b8114611eab57600080fd5b50565b611eb781611dbb565b8114611ec257600080fd5b5056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a264697066735822122060c8373c9ada94feb203842139286d99284b201387eee27008b6a2004bff89ca64736f6c6343000706003300000000000000000000000071b11ac923c967cd5998f23f6dae0d779a6ac8af00000000000000000000000000000000000000000000000000000000deadbeef0000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100b45760003560e01c8063715018a611610071578063715018a61461018e5780637cbc237314610198578063873950eb146101b45780638da5cb5b146101e4578063a874fb3a14610202578063f2fde38b14610220576100b4565b806309440725146100b957806332e1b2f6146100e95780634cb4beef146101075780635e7f3c3c146101235780636174a4c71461013f57806370d5ae0514610170575b600080fd5b6100d360048036038101906100ce919061158d565b61023c565b6040516100e091906119c1565b60405180910390f35b6100f161027e565b6040516100fe9190611b53565b60405180910390f35b610121600480360381019061011c91906115c9565b6102a4565b005b61013d600480360381019061013891906113db565b61046c565b005b6101596004803603810190610154919061158d565b610531565b604051610167929190611c49565b60405180910390f35b61017861056f565b60405161018591906119c1565b60405180910390f35b610196610595565b005b6101b260048036038101906101ad919061158d565b610702565b005b6101ce60048036038101906101c9919061158d565b610798565b6040516101db9190611b38565b60405180910390f35b6101ec6107c7565b6040516101f991906119c1565b60405180910390f35b61020a6107f0565b6040516102179190611b38565b60405180910390f35b61023a600480360381019061023591906113b2565b610803565b005b60056020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6102ac6109f5565b73ffffffffffffffffffffffffffffffffffffffff166102ca6107c7565b73ffffffffffffffffffffffffffffffffffffffff1614610353576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81831415610396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038d90611c0e565b60405180910390fd5b6040518060400160405280826000013581526020018260200160208101906103be9190611433565b15158152506004600085815260200190815260200160002060008481526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff0219169083151502179055509050507f5f15372d39c825b9d7b12c01d7808d758a40be125c8ca532dfc3370fe0ab46dd8383836000013584602001602081019061044f9190611433565b60405161045f9493929190611c72565b60405180910390a1505050565b600260015414156104e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555060005b838390508110156105245761051784848381811061050a57fe5b90506020020135836109fd565b80806001019150506104f0565b5060018081905550505050565b6004602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900460ff16905082565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61059d6109f5565b73ffffffffffffffffffffffffffffffffffffffff166105bb6107c7565b73ffffffffffffffffffffffffffffffffffffffff1614610644576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6002600154141561077b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555061078d82826109fd565b600180819055505050565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600360149054906101000a900460ff1681565b61080b6109f5565b73ffffffffffffffffffffffffffffffffffffffff166108296107c7565b73ffffffffffffffffffffffffffffffffffffffff16146108b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610938576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611ec66026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6000608083901c905060066000838152602001908152602001600020600084815260200190815260200160002060009054906101000a900460ff1615610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90611bae565b60405180910390fd5b6000600460008381526020019081526020016000206000848152602001908152602001600020604051806040016040529081600082015481526020016001820160009054906101000a900460ff16151515158152505090506000816000015190506000841415610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1490611b8e565b60405180910390fd5b6000811415610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5890611b6e565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33886040518363ffffffff1660e01b8152600401610bbf929190611b0f565b60206040518083038186803b158015610bd757600080fd5b505afa158015610beb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0f9190611564565b90506000811415610c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4c90611bce565b60405180910390fd5b50600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638c2a4c4f876040518263ffffffff1660e01b8152600401610cb49190611c2e565b60006040518083038186803b158015610ccc57600080fd5b505afa158015610ce0573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610d09919061145c565b5099505050505050505050915081610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d90611bee565b60405180910390fd5b60008367ffffffffffffffff81118015610d6f57600080fd5b50604051908082528060200260200182016040528015610d9e5781602001602082028036833780820191505090505b50905060008467ffffffffffffffff81118015610dba57600080fd5b50604051908082528060200260200182016040528015610de95781602001602082028036833780820191505090505b5090506000608089901b905060005b86811015610e7757610e3881610e2a6001610e1c898761116e90919063ffffffff16565b61116e90919063ffffffff16565b61116e90919063ffffffff16565b848281518110610e4457fe5b6020026020010181815250506001838281518110610e5e57fe5b6020026020010181815250508080600101915050610df8565b5033600560008b815260200190815260200160002060008c815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660008b815260200190815260200160002060008c815260200190815260200160002060006101000a81548160ff02191690831515021790555086602001511561109657600360149054906101000a900460ff1615610ff257600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a33600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168d60016040518563ffffffff1660e01b8152600401610fbb94939291906119dc565b600060405180830381600087803b158015610fd557600080fd5b505af1158015610fe9573d6000803e3d6000fd5b50505050611095565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b20c4543361103a8d6111f6565b61104460016111f6565b6040518463ffffffff1660e01b815260040161106293929190611a34565b600060405180830381600087803b15801561107c57600080fd5b505af1158015611090573d6000803e3d6000fd5b505050505b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f7fdffa3385856040518463ffffffff1660e01b81526004016110f593929190611a79565b600060405180830381600087803b15801561110f57600080fd5b505af1158015611123573d6000803e3d6000fd5b505050507fef3d0cfeea98d1c6fc7ee89f8b994b7592ac69d498c348629b426bd0c130baac338b8560405161115a93929190611ad1565b60405180910390a150505050505050505050565b6000808284019050838110156111ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60606000600167ffffffffffffffff8111801561121257600080fd5b506040519080825280602002602001820160405280156112415781602001602082028036833780820191505090505b509050828160008151811061125257fe5b60200260200101818152505080915050919050565b600061127a61127584611ce8565b611cb7565b90508281526020810184848401111561129257600080fd5b61129d848285611e34565b509392505050565b6000813590506112b481611e69565b92915050565b60008083601f8401126112cc57600080fd5b8235905067ffffffffffffffff8111156112e557600080fd5b6020830191508360208202830111156112fd57600080fd5b9250929050565b60008135905061131381611e80565b92915050565b60008151905061132881611e80565b92915050565b600082601f83011261133f57600080fd5b815161134f848260208601611267565b91505092915050565b60006040828403121561136a57600080fd5b81905092915050565b60008135905061138281611e97565b92915050565b60008151905061139781611e97565b92915050565b6000815190506113ac81611eae565b92915050565b6000602082840312156113c457600080fd5b60006113d2848285016112a5565b91505092915050565b6000806000604084860312156113f057600080fd5b600084013567ffffffffffffffff81111561140a57600080fd5b611416868287016112ba565b9350935050602061142986828701611373565b9150509250925092565b60006020828403121561144557600080fd5b600061145384828501611304565b91505092915050565b60008060008060008060008060008060006101608c8e03121561147e57600080fd5b600061148c8e828f01611319565b9b505060208c015167ffffffffffffffff8111156114a957600080fd5b6114b58e828f0161132e565b9a505060406114c68e828f0161139d565b99505060606114d78e828f01611388565b98505060806114e88e828f0161139d565b97505060a06114f98e828f01611388565b96505060c061150a8e828f0161139d565b95505060e061151b8e828f01611388565b94505061010061152d8e828f01611388565b93505061012061153f8e828f01611388565b9250506101406115518e828f01611388565b9150509295989b509295989b9093969950565b60006020828403121561157657600080fd5b600061158484828501611388565b91505092915050565b600080604083850312156115a057600080fd5b60006115ae85828601611373565b92505060206115bf85828601611373565b9150509250929050565b6000806000608084860312156115de57600080fd5b60006115ec86828701611373565b93505060206115fd86828701611373565b925050604061160e86828701611358565b9150509250925092565b600061162483836119a3565b60208301905092915050565b61163981611dc8565b82525050565b61164881611d73565b82525050565b600061165982611d28565b6116638185611d40565b935061166e83611d18565b8060005b8381101561169f5781516116868882611618565b975061169183611d33565b925050600181019050611672565b5085935050505092915050565b6116b581611d85565b82525050565b6116c481611dda565b82525050565b6116d381611dfe565b82525050565b60006116e6603083611d62565b91507f546f6b656e52656465656d65723a3a72656465656d3a20696e76616c6964207260008301527f6564656d7074696f6e20616d6f756e74000000000000000000000000000000006020830152604082019050919050565b600061174c603283611d62565b91507f546f6b656e52656465656d65723a3a72656465656d3a20696e76616c6964206760008301527f726f75702069642066726f6d20746f6b656e00000000000000000000000000006020830152604082019050919050565b60006117b2604583611d62565b91507f546f6b656e52656465656d65723a3a72656465656d3a20746f6b656e2068617360008301527f20616c7265616479206265656e2072656465656d656420666f7220746869732060208301527f67726f75700000000000000000000000000000000000000000000000000000006040830152606082019050919050565b600061183e603483611d62565b91507f546f6b656e52656465656d65723a3a72656465656d3a206d73672073656e646560008301527f72206973206e6f7420746f6b656e206f776e65720000000000000000000000006020830152604082019050919050565b60006118a4600083611d51565b9150600082019050919050565b60006118be603183611d62565b91507f546f6b656e52656465656d65723a3a72656465656d3a206974656d2067726f7560008301527f70206e6f7420696e697469616c697a65640000000000000000000000000000006020830152604082019050919050565b6000611924604d83611d62565b91507f546f6b656e52656465656d65723a736574526564656d7074696f6e416d6f756e60008301527f74733a20746f6b656e20696e206d75737420626520646966666572656e74206660208301527f726f6d20746f6b656e206f7574000000000000000000000000000000000000006040830152606082019050919050565b6119ac81611db1565b82525050565b6119bb81611db1565b82525050565b60006020820190506119d6600083018461163f565b92915050565b600060a0820190506119f16000830187611630565b6119fe602083018661163f565b611a0b60408301856119b2565b611a1860608301846116ca565b8181036080830152611a2981611897565b905095945050505050565b6000606082019050611a496000830186611630565b8181036020830152611a5b818561164e565b90508181036040830152611a6f818461164e565b9050949350505050565b6000608082019050611a8e6000830186611630565b8181036020830152611aa0818561164e565b90508181036040830152611ab4818461164e565b90508181036060830152611ac781611897565b9050949350505050565b6000606082019050611ae66000830186611630565b611af360208301856119b2565b8181036040830152611b05818461164e565b9050949350505050565b6000604082019050611b24600083018561163f565b611b3160208301846119b2565b9392505050565b6000602082019050611b4d60008301846116ac565b92915050565b6000602082019050611b6860008301846116bb565b92915050565b60006020820190508181036000830152611b87816116d9565b9050919050565b60006020820190508181036000830152611ba78161173f565b9050919050565b60006020820190508181036000830152611bc7816117a5565b9050919050565b60006020820190508181036000830152611be781611831565b9050919050565b60006020820190508181036000830152611c07816118b1565b9050919050565b60006020820190508181036000830152611c2781611917565b9050919050565b6000602082019050611c4360008301846119b2565b92915050565b6000604082019050611c5e60008301856119b2565b611c6b60208301846116ac565b9392505050565b6000608082019050611c8760008301876119b2565b611c9460208301866119b2565b611ca160408301856119b2565b611cae60608301846116ac565b95945050505050565b6000604051905081810181811067ffffffffffffffff82111715611cde57611cdd611e67565b5b8060405250919050565b600067ffffffffffffffff821115611d0357611d02611e67565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611d7e82611d91565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611dd382611e10565b9050919050565b6000611de582611dec565b9050919050565b6000611df782611d91565b9050919050565b6000611e0982611db1565b9050919050565b6000611e1b82611e22565b9050919050565b6000611e2d82611d91565b9050919050565b60005b83811015611e52578082015181840152602081019050611e37565b83811115611e61576000848401525b50505050565bfe5b611e7281611d73565b8114611e7d57600080fd5b50565b611e8981611d85565b8114611e9457600080fd5b50565b611ea081611db1565b8114611eab57600080fd5b50565b611eb781611dbb565b8114611ec257600080fd5b5056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a264697066735822122060c8373c9ada94feb203842139286d99284b201387eee27008b6a2004bff89ca64736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000071b11ac923c967cd5998f23f6dae0d779a6ac8af00000000000000000000000000000000000000000000000000000000deadbeef0000000000000000000000000000000000000000000000000000000000000001
-----Decoded View---------------
Arg [0] : _super1155 (address): 0x71B11Ac923C967CD5998F23F6dae0d779A6ac8Af
Arg [1] : _burnTarget (address): 0x00000000000000000000000000000000DeaDBeef
Arg [2] : _customBurn (bool): True
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000071b11ac923c967cd5998f23f6dae0d779a6ac8af
Arg [1] : 00000000000000000000000000000000000000000000000000000000deadbeef
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.