ETH Price: $1,575.07 (-0.86%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Settle Auction163550982023-01-07 13:07:23835 days ago1673096843IN
0x2Ca024EC...CE5733E5F
0 ETH0.0015357517.12859918
Pause163550922023-01-07 13:06:11835 days ago1673096771IN
0x2Ca024EC...CE5733E5F
0 ETH0.0008402617.80482687
Create Bid163550222023-01-07 12:52:11835 days ago1673095931IN
0x2Ca024EC...CE5733E5F
0.8 ETH0.0009838615.15309316
Create Bid163548932023-01-07 12:25:59835 days ago1673094359IN
0x2Ca024EC...CE5733E5F
0.67 ETH0.0009259614.26148006
Create Bid163533082023-01-07 7:06:47835 days ago1673075207IN
0x2Ca024EC...CE5733E5F
0.65 ETH0.0008502213.09487852
Create Bid163532172023-01-07 6:48:35835 days ago1673074115IN
0x2Ca024EC...CE5733E5F
0.55 ETH0.0008903913.71351657
Create Bid163531222023-01-07 6:29:23835 days ago1673072963IN
0x2Ca024EC...CE5733E5F
0.5 ETH0.0009192414.15793519
Create Bid163530082023-01-07 6:06:23835 days ago1673071583IN
0x2Ca024EC...CE5733E5F
0.31 ETH0.0009527914.6745873
Create Bid163486062023-01-06 15:22:11836 days ago1673018531IN
0x2Ca024EC...CE5733E5F
0.3 ETH0.0014724422.67810194
Create Bid163485792023-01-06 15:16:47836 days ago1673018207IN
0x2Ca024EC...CE5733E5F
0.01 ETH0.0017527520.12718919
Settle Current A...163480672023-01-06 13:33:23836 days ago1673012003IN
0x2Ca024EC...CE5733E5F
0 ETH0.0027797217.91126901
Set Duration163480662023-01-06 13:33:11836 days ago1673011991IN
0x2Ca024EC...CE5733E5F
0 ETH0.0005201817.93873567
Create Bid163480372023-01-06 13:27:23836 days ago1673011643IN
0x2Ca024EC...CE5733E5F
1 ETH0.0011321216.23448562
Create Bid163480352023-01-06 13:26:47836 days ago1673011607IN
0x2Ca024EC...CE5733E5F
0.95 ETH0.0011571116.59280062
Create Bid163480332023-01-06 13:26:23836 days ago1673011583IN
0x2Ca024EC...CE5733E5F
0.9 ETH0.0011431616.39277029
Create Bid163480312023-01-06 13:25:59836 days ago1673011559IN
0x2Ca024EC...CE5733E5F
0.85 ETH0.001126516.15385447
Create Bid163480212023-01-06 13:23:59836 days ago1673011439IN
0x2Ca024EC...CE5733E5F
0.8 ETH0.0010479515.02746464
Create Bid163480192023-01-06 13:23:35836 days ago1673011415IN
0x2Ca024EC...CE5733E5F
0.77 ETH0.001094515.69496818
Create Bid163480042023-01-06 13:20:35836 days ago1673011235IN
0x2Ca024EC...CE5733E5F
0.75 ETH0.0012264917.58774348
Create Bid163480022023-01-06 13:20:11836 days ago1673011211IN
0x2Ca024EC...CE5733E5F
0.72 ETH0.0012842118.41539808
Create Bid163479902023-01-06 13:17:47836 days ago1673011067IN
0x2Ca024EC...CE5733E5F
0.7 ETH0.001098515.75230295
Create Bid163479772023-01-06 13:15:11836 days ago1673010911IN
0x2Ca024EC...CE5733E5F
0.67 ETH0.0011482316.46539461
Create Bid163479592023-01-06 13:11:35836 days ago1673010695IN
0x2Ca024EC...CE5733E5F
0.65 ETH0.0010946615.69730952
Create Bid163479452023-01-06 13:08:47836 days ago1673010527IN
0x2Ca024EC...CE5733E5F
0.6 ETH0.001030914.78303306
Create Bid163479412023-01-06 13:07:59836 days ago1673010479IN
0x2Ca024EC...CE5733E5F
0.56 ETH0.0011232916.10788496
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer163550982023-01-07 13:07:23835 days ago1673096843
0x2Ca024EC...CE5733E5F
0.8 ETH
Transfer163550222023-01-07 12:52:11835 days ago1673095931
0x2Ca024EC...CE5733E5F
0.67 ETH
Transfer163548932023-01-07 12:25:59835 days ago1673094359
0x2Ca024EC...CE5733E5F
0.65 ETH
Transfer163533082023-01-07 7:06:47835 days ago1673075207
0x2Ca024EC...CE5733E5F
0.55 ETH
Transfer163532172023-01-07 6:48:35835 days ago1673074115
0x2Ca024EC...CE5733E5F
0.5 ETH
Transfer163531222023-01-07 6:29:23835 days ago1673072963
0x2Ca024EC...CE5733E5F
0.31 ETH
Transfer163530082023-01-07 6:06:23835 days ago1673071583
0x2Ca024EC...CE5733E5F
0.3 ETH
Transfer163486062023-01-06 15:22:11836 days ago1673018531
0x2Ca024EC...CE5733E5F
0.01 ETH
Transfer163480672023-01-06 13:33:23836 days ago1673012003
0x2Ca024EC...CE5733E5F
1 ETH
Transfer163480372023-01-06 13:27:23836 days ago1673011643
0x2Ca024EC...CE5733E5F
0.95 ETH
Transfer163480352023-01-06 13:26:47836 days ago1673011607
0x2Ca024EC...CE5733E5F
0.9 ETH
Transfer163480332023-01-06 13:26:23836 days ago1673011583
0x2Ca024EC...CE5733E5F
0.85 ETH
Transfer163480312023-01-06 13:25:59836 days ago1673011559
0x2Ca024EC...CE5733E5F
0.8 ETH
Transfer163480212023-01-06 13:23:59836 days ago1673011439
0x2Ca024EC...CE5733E5F
0.77 ETH
Transfer163480192023-01-06 13:23:35836 days ago1673011415
0x2Ca024EC...CE5733E5F
0.75 ETH
Transfer163480042023-01-06 13:20:35836 days ago1673011235
0x2Ca024EC...CE5733E5F
0.72 ETH
Transfer163480022023-01-06 13:20:11836 days ago1673011211
0x2Ca024EC...CE5733E5F
0.7 ETH
Transfer163479902023-01-06 13:17:47836 days ago1673011067
0x2Ca024EC...CE5733E5F
0.67 ETH
Transfer163479772023-01-06 13:15:11836 days ago1673010911
0x2Ca024EC...CE5733E5F
0.65 ETH
Transfer163479592023-01-06 13:11:35836 days ago1673010695
0x2Ca024EC...CE5733E5F
0.6 ETH
Transfer163479452023-01-06 13:08:47836 days ago1673010527
0x2Ca024EC...CE5733E5F
0.56 ETH
Transfer163479412023-01-06 13:07:59836 days ago1673010479
0x2Ca024EC...CE5733E5F
0.54 ETH
Transfer163479312023-01-06 13:05:59836 days ago1673010359
0x2Ca024EC...CE5733E5F
0.52 ETH
Transfer163479292023-01-06 13:05:35836 days ago1673010335
0x2Ca024EC...CE5733E5F
0.5 ETH
Transfer163479272023-01-06 13:05:11836 days ago1673010311
0x2Ca024EC...CE5733E5F
0.49 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VMAAuction

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 11 : VMAAuction.sol
// SPDX-License-Identifier: GPL-3.0

// LICENSE
// VMAAuction.sol is a modified version of Nouns' NounsAuctionHouse.sol:
// https://github.com/nounsDAO/nouns-monorepo/blob/master/packages/nouns-contracts/contracts/NounsAuctionHouse.sol
//
// VMAAuction.sol source code Copyright LOVO licensed under the GPL-3.0 license.
// With modifications by Nounders DAO.

pragma solidity ^0.8.16;

import {ReentrancyGuard} from "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import {Pausable} from "@openzeppelin/contracts/security/Pausable.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {IVMAAuction} from "./interfaces/IVMAAuction.sol";
import {IVoiceMaskAlpha} from "./interfaces/IVoiceMaskAlpha.sol";

contract VMAAuction is IVMAAuction, Pausable, ReentrancyGuard, Ownable {
    IVoiceMaskAlpha public voiceMaskAlpha;

    uint256 public timeBuffer;

    uint256 public reservePrice;

    uint256 public durationTime;

    uint256 public gas;

    uint8 public minBidIncrementPercentage;

    IVMAAuction.Auction public auction;

    constructor(
        IVoiceMaskAlpha _alpha, //alpha nft
        uint256 _timeBuffer, // padding time. 300 = 5min
        uint256 _reservePrice, // at least 0
        uint256 _durationTime, // 43200 = 12hrs
        uint8 _minBidIncrementPercentage // 2%
    ) {
        _pause();

        voiceMaskAlpha = _alpha;
        timeBuffer = _timeBuffer;
        reservePrice = _reservePrice;
        durationTime = _durationTime;
        minBidIncrementPercentage = _minBidIncrementPercentage;
        gas = 30000;
    }

    function settleCurrentAndCreateNewAuction()
        external
        override
        nonReentrant
        whenNotPaused
    {
        _settleAuction();
        _createAuction();
    }

    /**
     * Settle the current auction.
     * This function can be called when the contract is paused.
     */
    function settleAuction() external override whenPaused nonReentrant {
        _settleAuction();
    }

    /**
     * Create a bid for an Alpha, with a given value.
     */
    function createBid(uint256 alphaId)
        external
        payable
        override
        whenNotPaused
        nonReentrant
    {
        IVMAAuction.Auction memory _auction = auction;

        require(block.timestamp < _auction.endTime, "Auction is expired");
        require(_auction.alphaId == alphaId, "Not for this auction");
        require(msg.value >= reservePrice, "Send at least reservePrice");
        require(
            msg.value >=
                _auction.price +
                    ((_auction.price * minBidIncrementPercentage) / 100),
            "Increase the bid by minBidIncrementPercentage"
        );

        address payable lastBidder = _auction.bidder;
        require(msg.sender != lastBidder, "Wait for next turn");

        // Refund the last bidder
        if (lastBidder != address(0)) {
            _transferETH(lastBidder, _auction.price);
        }

        auction.price = msg.value;
        auction.bidder = payable(msg.sender);

        // Extend the auction if bidded within timeBuffer time before the auction ends.
        bool extended = _auction.endTime - block.timestamp < timeBuffer;
        if (extended) {
            auction.endTime = _auction.endTime = block.timestamp + timeBuffer;
        }

        emit AuctionBid(_auction.alphaId, msg.sender, msg.value, extended);

        if (extended) {
            emit AuctionExtended(_auction.alphaId, _auction.endTime);
        }
    }

    /**
     * Pause the auction.
     * CreateBid is unactivated by this function.
     * The auction can be settled by anyone after the endtime has passed.
     */
    function pause() external override onlyOwner {
        _pause();
    }

    /**
     * Unpause the auction.
     * If there is no active auction, this function will start a new auction.
     */
    function unpause() external override onlyOwner {
        _unpause();

        if (auction.startTime == 0 || auction.settled) {
            _createAuction();
        }
    }

    function setTimeBuffer(uint256 _timeBuffer) external override onlyOwner {
        timeBuffer = _timeBuffer;

        emit AuctionTimeBufferUpdated(_timeBuffer);
    }

    function setReservePrice(uint256 _reservePrice)
        external
        override
        onlyOwner
    {
        reservePrice = _reservePrice;

        emit AuctionReservePriceUpdated(_reservePrice);
    }

    function setMinBidIncrementPercentage(uint8 _minBidIncrementPercentage)
        external
        override
        onlyOwner
    {
        minBidIncrementPercentage = _minBidIncrementPercentage;

        emit AuctionMinBidIncrementPercentageUpdated(
            _minBidIncrementPercentage
        );
    }

    function setGas(uint256 _gas) external onlyOwner {
        require(_gas >= 21000, "Gas is not enough for transaction");
        gas = _gas;

        emit AuctionGasUpdated(gas);
    }

    function setDuration(uint256 _durationTime) external onlyOwner {
        durationTime = _durationTime;
    }

    /**
     * Create an auction.
     * Store the auction details in the auction state variable.
     * If the mint reverts, the contract will be paused.
     */
    function _createAuction() internal {
        try voiceMaskAlpha.mintAuction() returns (uint256 alphaId) {
            uint256 startTime = block.timestamp;
            uint256 endTime = startTime + durationTime;

            auction = Auction({
                alphaId: alphaId,
                price: 0, //입찰가
                startTime: startTime,
                endTime: endTime,
                bidder: payable(0),
                settled: false
            });

            emit AuctionCreated(alphaId, startTime, endTime);
        } catch Error(string memory error) {
            _pause();
            emit AuctionCreateFailed(error);
        }
    }

    /**
     *  Settle an auction. Finish the bid and payment.
     *  If there is no bid the Alpha NFT will be send to the owner's EOA.
     */
    function _settleAuction() internal {
        IVMAAuction.Auction memory _auction = auction;

        require(block.timestamp >= _auction.endTime, "Auction is active");
        require(!_auction.settled, "Auction is settled already");
        require(_auction.startTime != 0, "Auction didn't start yet");

        auction.settled = true;

        if (_auction.bidder == address(0)) {
            // No one made a bid
            voiceMaskAlpha.transferFrom(
                address(this),
                owner(),
                _auction.alphaId
            );
        } else {
            voiceMaskAlpha.transferFrom(
                address(this),
                _auction.bidder,
                _auction.alphaId
            );
        }

        if (_auction.price > 0) {
            //send money to the owner EOA
            _transferETH(owner(), _auction.price);
        }

        emit AuctionSettled(_auction.alphaId, _auction.bidder, _auction.price);
    }

    /**
     * Transfer ETH.
     */
    function _transferETH(address to, uint256 amount) internal {
        if (!_safeTransferETH(to, amount)) {
            emit AuctionRefundFailed(to, amount);
        }
    }

    /**
     * Transfer ETH and return the success status.
     */
    function _safeTransferETH(address to, uint256 value)
        internal
        returns (bool)
    {
        (bool success, ) = to.call{value: value, gas: gas}(new bytes(0));
        return success;
    }
}

File 2 of 11 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^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() {
        _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 making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 3 of 11 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 4 of 11 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^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() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 5 of 11 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @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 amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

File 6 of 11 : IVMAAuction.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.16;


interface IVMAAuction {
    struct Auction {
        uint256 alphaId;
        uint256 price;// currently the highest bid price
        uint256 startTime;
        uint256 endTime;
        address payable bidder;
        bool settled;
    }

    event AuctionCreated(uint256 indexed alphaId, uint256 startTime, uint256 endTime);

    event AuctionBid(uint256 indexed alphaId, address sender, uint256 value, bool extended);

    event AuctionExtended(uint256 indexed alphaId, uint256 endTime);

    event AuctionCreateFailed(string error);

    event AuctionRefundFailed(address indexed winner, uint256 amount);

    event AuctionSettled(uint256 indexed alphaId, address winner, uint256 amount);

    event AuctionTimeBufferUpdated(uint256 timeBuffer);

    event AuctionReservePriceUpdated(uint256 reservePrice);

    event AuctionMinBidIncrementPercentageUpdated(uint256 minBidIncrementPercentage);

    event AuctionGasUpdated(uint256 gas);


    function settleAuction() external;

    function settleCurrentAndCreateNewAuction() external;

    function createBid(uint256 alphaId) external payable;

    function pause() external;

    function unpause() external;

    function setTimeBuffer(uint256 timeBuffer) external;

    function setReservePrice(uint256 reservePrice) external;

    function setMinBidIncrementPercentage(uint8 minBidIncrementPercentage) external;
}

File 7 of 11 : IVoiceMaskAlpha.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;

// import { IERC721 } from '@openzeppelin/contracts/token/ERC721/IERC721.sol';
import {IERC721AQueryable} from "erc721a/contracts/extensions/IERC721AQueryable.sol";
import {IERC721ABurnable} from "erc721a/contracts/extensions/IERC721ABurnable.sol";

interface IVoiceMaskAlpha is IERC721ABurnable{
    event AlphaCreated(uint256 indexed tokenId, address to);

    event AlphaBurned(uint256 indexed tokenId);

    event MinterUpdated(address minter);

    function mintAuction() external returns (uint256);

    function mintTeam(address to, uint256 quantity) external returns (uint256);

    function burn(uint256 alphaId) external;

    function setMinter(address _minter) external;

    function setAuctionSupply(uint256 _maxMint) external;

    function setTeamSupply(uint256 _maxMint) external;

    function setBaseURI(string memory uri) external;

}

File 8 of 11 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^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 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;
    }
}

File 9 of 11 : IERC721AQueryable.sol
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.2.3
// Creator: Chiru Labs

pragma solidity ^0.8.4;

import '../IERC721A.sol';

/**
 * @dev Interface of ERC721AQueryable.
 */
interface IERC721AQueryable is IERC721A {
    /**
     * Invalid query range (`start` >= `stop`).
     */
    error InvalidQueryRange();

    /**
     * @dev Returns the `TokenOwnership` struct at `tokenId` without reverting.
     *
     * If the `tokenId` is out of bounds:
     *
     * - `addr = address(0)`
     * - `startTimestamp = 0`
     * - `burned = false`
     * - `extraData = 0`
     *
     * If the `tokenId` is burned:
     *
     * - `addr = <Address of owner before token was burned>`
     * - `startTimestamp = <Timestamp when token was burned>`
     * - `burned = true`
     * - `extraData = <Extra data when token was burned>`
     *
     * Otherwise:
     *
     * - `addr = <Address of owner>`
     * - `startTimestamp = <Timestamp of start of ownership>`
     * - `burned = false`
     * - `extraData = <Extra data at start of ownership>`
     */
    function explicitOwnershipOf(uint256 tokenId) external view returns (TokenOwnership memory);

    /**
     * @dev Returns an array of `TokenOwnership` structs at `tokenIds` in order.
     * See {ERC721AQueryable-explicitOwnershipOf}
     */
    function explicitOwnershipsOf(uint256[] memory tokenIds) external view returns (TokenOwnership[] memory);

    /**
     * @dev Returns an array of token IDs owned by `owner`,
     * in the range [`start`, `stop`)
     * (i.e. `start <= tokenId < stop`).
     *
     * This function allows for tokens to be queried if the collection
     * grows too big for a single call of {ERC721AQueryable-tokensOfOwner}.
     *
     * Requirements:
     *
     * - `start < stop`
     */
    function tokensOfOwnerIn(
        address owner,
        uint256 start,
        uint256 stop
    ) external view returns (uint256[] memory);

    /**
     * @dev Returns an array of token IDs owned by `owner`.
     *
     * This function scans the ownership mapping and is O(`totalSupply`) in complexity.
     * It is meant to be called off-chain.
     *
     * See {ERC721AQueryable-tokensOfOwnerIn} for splitting the scan into
     * multiple smaller scans if the collection is large enough to cause
     * an out-of-gas error (10K collections should be fine).
     */
    function tokensOfOwner(address owner) external view returns (uint256[] memory);
}

File 10 of 11 : IERC721ABurnable.sol
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.2.3
// Creator: Chiru Labs

pragma solidity ^0.8.4;

import '../IERC721A.sol';

/**
 * @dev Interface of ERC721ABurnable.
 */
interface IERC721ABurnable is IERC721A {
    /**
     * @dev Burns `tokenId`. See {ERC721A-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) external;
}

File 11 of 11 : IERC721A.sol
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.2.3
// Creator: Chiru Labs

pragma solidity ^0.8.4;

/**
 * @dev Interface of ERC721A.
 */
interface IERC721A {
    /**
     * The caller must own the token or be an approved operator.
     */
    error ApprovalCallerNotOwnerNorApproved();

    /**
     * The token does not exist.
     */
    error ApprovalQueryForNonexistentToken();

    /**
     * Cannot query the balance for the zero address.
     */
    error BalanceQueryForZeroAddress();

    /**
     * Cannot mint to the zero address.
     */
    error MintToZeroAddress();

    /**
     * The quantity of tokens minted must be more than zero.
     */
    error MintZeroQuantity();

    /**
     * The token does not exist.
     */
    error OwnerQueryForNonexistentToken();

    /**
     * The caller must own the token or be an approved operator.
     */
    error TransferCallerNotOwnerNorApproved();

    /**
     * The token must be owned by `from`.
     */
    error TransferFromIncorrectOwner();

    /**
     * Cannot safely transfer to a contract that does not implement the
     * ERC721Receiver interface.
     */
    error TransferToNonERC721ReceiverImplementer();

    /**
     * Cannot transfer to the zero address.
     */
    error TransferToZeroAddress();

    /**
     * The token does not exist.
     */
    error URIQueryForNonexistentToken();

    /**
     * The `quantity` minted with ERC2309 exceeds the safety limit.
     */
    error MintERC2309QuantityExceedsLimit();

    /**
     * The `extraData` cannot be set on an unintialized ownership slot.
     */
    error OwnershipNotInitializedForExtraData();

    // =============================================================
    //                            STRUCTS
    // =============================================================

    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Stores the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
        // Arbitrary data similar to `startTimestamp` that can be set via {_extraData}.
        uint24 extraData;
    }

    // =============================================================
    //                         TOKEN COUNTERS
    // =============================================================

    /**
     * @dev Returns the total number of tokens in existence.
     * Burned tokens will reduce the count.
     * To get the total number of tokens minted, please see {_totalMinted}.
     */
    function totalSupply() external view returns (uint256);

    // =============================================================
    //                            IERC165
    // =============================================================

    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified)
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);

    // =============================================================
    //                            IERC721
    // =============================================================

    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables
     * (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in `owner`'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`,
     * checking first that contract recipients are aware of the ERC721 protocol
     * to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move
     * this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement
     * {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external payable;

    /**
     * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external payable;

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom}
     * whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token
     * by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external payable;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the
     * zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external payable;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom}
     * for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    // =============================================================
    //                        IERC721Metadata
    // =============================================================

    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);

    // =============================================================
    //                           IERC2309
    // =============================================================

    /**
     * @dev Emitted when tokens in `fromTokenId` to `toTokenId`
     * (inclusive) is transferred from `from` to `to`, as defined in the
     * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309) standard.
     *
     * See {_mintERC2309} for more details.
     */
    event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to);
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"contract IVoiceMaskAlpha","name":"_alpha","type":"address"},{"internalType":"uint256","name":"_timeBuffer","type":"uint256"},{"internalType":"uint256","name":"_reservePrice","type":"uint256"},{"internalType":"uint256","name":"_durationTime","type":"uint256"},{"internalType":"uint8","name":"_minBidIncrementPercentage","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"alphaId","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bool","name":"extended","type":"bool"}],"name":"AuctionBid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"error","type":"string"}],"name":"AuctionCreateFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"alphaId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"AuctionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"alphaId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"AuctionExtended","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"}],"name":"AuctionGasUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minBidIncrementPercentage","type":"uint256"}],"name":"AuctionMinBidIncrementPercentageUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"winner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AuctionRefundFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reservePrice","type":"uint256"}],"name":"AuctionReservePriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"alphaId","type":"uint256"},{"indexed":false,"internalType":"address","name":"winner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AuctionSettled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timeBuffer","type":"uint256"}],"name":"AuctionTimeBufferUpdated","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":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"auction","outputs":[{"internalType":"uint256","name":"alphaId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"address payable","name":"bidder","type":"address"},{"internalType":"bool","name":"settled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"alphaId","type":"uint256"}],"name":"createBid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"durationTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBidIncrementPercentage","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_durationTime","type":"uint256"}],"name":"setDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gas","type":"uint256"}],"name":"setGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_minBidIncrementPercentage","type":"uint8"}],"name":"setMinBidIncrementPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reservePrice","type":"uint256"}],"name":"setReservePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timeBuffer","type":"uint256"}],"name":"setTimeBuffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"settleAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"settleCurrentAndCreateNewAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"timeBuffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"voiceMaskAlpha","outputs":[{"internalType":"contract IVoiceMaskAlpha","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405162002e1938038062002e1983398181016040528101906200003791906200039f565b60008060006101000a81548160ff02191690831515021790555060018081905550620000786200006c6200010d60201b60201c565b6200011560201b60201c565b62000088620001db60201b60201c565b84600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600481905550826005819055508160068190555080600860006101000a81548160ff021916908360ff1602179055506175306007819055505050505050620004d8565b600033905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001eb6200029260201b60201c565b156200022e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002259062000488565b60405180910390fd5b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620002796200010d60201b60201c565b604051620002889190620004bb565b60405180910390a1565b60008060009054906101000a900460ff16905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002da82620002ad565b9050919050565b6000620002ee82620002cd565b9050919050565b6200030081620002e1565b81146200030c57600080fd5b50565b6000815190506200032081620002f5565b92915050565b6000819050919050565b6200033b8162000326565b81146200034757600080fd5b50565b6000815190506200035b8162000330565b92915050565b600060ff82169050919050565b620003798162000361565b81146200038557600080fd5b50565b60008151905062000399816200036e565b92915050565b600080600080600060a08688031215620003be57620003bd620002a8565b5b6000620003ce888289016200030f565b9550506020620003e1888289016200034a565b9450506040620003f4888289016200034a565b935050606062000407888289016200034a565b92505060806200041a8882890162000388565b9150509295509295909350565b600082825260208201905092915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006200047060108362000427565b91506200047d8262000438565b602082019050919050565b60006020820190508181036000830152620004a38162000461565b9050919050565b620004b581620002cd565b82525050565b6000602082019050620004d26000830184620004aa565b92915050565b61293180620004e86000396000f3fe60806040526004361061012a5760003560e01c8063991c750d116100ab578063dd51faa21161006f578063dd51faa214610354578063ec91f2a41461037d578063f25efffc146103a8578063f2fde38b146103bf578063f6be71d1146103e8578063f8b75fb5146104115761012a565b8063991c750d14610293578063a4d0a17e146102be578063b296024d146102d5578063ce9c7c0d14610300578063db2e1eed146103295761012a565b80637120334b116100f25780637120334b146101e1578063715018a61461020a5780637d9f6db5146102215780638456cb59146102515780638da5cb5b146102685761012a565b806336ebdb381461012f5780633f4ba83a146101585780635c975abb1461016f578063659dd2b41461019a5780636ca7c216146101b6575b600080fd5b34801561013b57600080fd5b5061015660048036038101906101519190611ab0565b61043c565b005b34801561016457600080fd5b5061016d61050d565b005b34801561017b57600080fd5b506101846105c4565b6040516101919190611af8565b60405180910390f35b6101b460048036038101906101af9190611b49565b6105da565b005b3480156101c257600080fd5b506101cb610a43565b6040516101d89190611b85565b60405180910390f35b3480156101ed57600080fd5b5061020860048036038101906102039190611b49565b610a49565b005b34801561021657600080fd5b5061021f610b06565b005b34801561022d57600080fd5b50610236610b8e565b60405161024896959493929190611be1565b60405180910390f35b34801561025d57600080fd5b50610266610be5565b005b34801561027457600080fd5b5061027d610c6b565b60405161028a9190611c63565b60405180910390f35b34801561029f57600080fd5b506102a8610c95565b6040516102b59190611cdd565b60405180910390f35b3480156102ca57600080fd5b506102d3610cbb565b005b3480156102e157600080fd5b506102ea610d60565b6040516102f79190611d07565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190611b49565b610d73565b005b34801561033557600080fd5b5061033e610e30565b60405161034b9190611b85565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190611b49565b610e36565b005b34801561038957600080fd5b50610392610f3a565b60405161039f9190611b85565b60405180910390f35b3480156103b457600080fd5b506103bd610f40565b005b3480156103cb57600080fd5b506103e660048036038101906103e19190611d4e565b610fee565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190611b49565b6110e5565b005b34801561041d57600080fd5b5061042661116b565b6040516104339190611b85565b60405180910390f35b610444611171565b73ffffffffffffffffffffffffffffffffffffffff16610462610c6b565b73ffffffffffffffffffffffffffffffffffffffff16146104b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104af90611dd8565b60405180910390fd5b80600860006101000a81548160ff021916908360ff1602179055507fec5ccd96cc77b6219e9d44143df916af68fc169339ea7de5008ff15eae13450d816040516105029190611e29565b60405180910390a150565b610515611171565b73ffffffffffffffffffffffffffffffffffffffff16610533610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058090611dd8565b60405180910390fd5b610591611179565b600060096002015414806105b45750600960040160149054906101000a900460ff165b156105c2576105c161121a565b5b565b60008060009054906101000a900460ff16905090565b6105e26105c4565b15610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061990611e90565b60405180910390fd5b600260015403610667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065e90611efc565b60405180910390fd5b6002600181905550600060096040518060c0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160149054906101000a900460ff16151515158152505090508060600151421061075f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075690611f68565b60405180910390fd5b818160000151146107a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079c90611fd4565b60405180910390fd5b6005543410156107ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e190612040565b60405180910390fd5b6064600860009054906101000a900460ff1660ff16826020015161080e919061208f565b6108189190612118565b81602001516108279190612149565b341015610869576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610860906121ef565b60405180910390fd5b6000816080015190508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036108e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d79061225b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109235761092281836020015161145a565b5b3460096001018190555033600960040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600454428460600151610986919061227b565b10905080156109af576004544261099d9190612149565b83606001818152506009600301819055505b82600001517f1159164c56f277e6fc99c11731bd380e0347deb969b75523398734c252706ea33334846040516109e7939291906122af565b60405180910390a28015610a365782600001517f6e912a3a9105bdd2af817ba5adc14e6c127c1035b5b648faa29ca0d58ab8ff4e8460600151604051610a2d9190611b85565b60405180910390a25b5050506001808190555050565b60075481565b610a51611171565b73ffffffffffffffffffffffffffffffffffffffff16610a6f610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc90611dd8565b60405180910390fd5b806004819055507f1b55d9f7002bda4490f467e326f22a4a847629c0f2d1ed421607d318d25b410d81604051610afb9190611b85565b60405180910390a150565b610b0e611171565b73ffffffffffffffffffffffffffffffffffffffff16610b2c610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7990611dd8565b60405180910390fd5b610b8c60006114bb565b565b60098060000154908060010154908060020154908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160149054906101000a900460ff16905086565b610bed611171565b73ffffffffffffffffffffffffffffffffffffffff16610c0b610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5890611dd8565b60405180910390fd5b610c69611581565b565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610cc36105c4565b610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf990612332565b60405180910390fd5b600260015403610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e90611efc565b60405180910390fd5b6002600181905550610d57611623565b60018081905550565b600860009054906101000a900460ff1681565b610d7b611171565b73ffffffffffffffffffffffffffffffffffffffff16610d99610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de690611dd8565b60405180910390fd5b806005819055507f6ab2e127d7fdf53b8f304e59d3aab5bfe97979f52a85479691a6fab27a28a6b281604051610e259190611b85565b60405180910390a150565b60055481565b610e3e611171565b73ffffffffffffffffffffffffffffffffffffffff16610e5c610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990611dd8565b60405180910390fd5b615208811015610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee906123c4565b60405180910390fd5b806007819055507ffefb35d3b552827c626b8a9c24b4672a6ed742e98cc7b0d6d2d13f6bdfb2c019600754604051610f2f9190611b85565b60405180910390a150565b60045481565b600260015403610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7c90611efc565b60405180910390fd5b6002600181905550610f956105c4565b15610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc90611e90565b60405180910390fd5b610fdd611623565b610fe561121a565b60018081905550565b610ff6611171565b73ffffffffffffffffffffffffffffffffffffffff16611014610c6b565b73ffffffffffffffffffffffffffffffffffffffff161461106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190611dd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d090612456565b60405180910390fd5b6110e2816114bb565b50565b6110ed611171565b73ffffffffffffffffffffffffffffffffffffffff1661110b610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115890611dd8565b60405180910390fd5b8060068190555050565b60065481565b600033905090565b6111816105c4565b6111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b790612332565b60405180910390fd5b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611203611171565b6040516112109190611c63565b60405180910390a1565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166332f4a69b6040518163ffffffff1660e01b81526004016020604051808303816000875af19250505080156112a657506040513d601f19601f820116820180604052508101906112a3919061248b565b60015b611327576112b26124c5565b806308c379a00361131657506112c6612558565b806112d15750611318565b6112d9611581565b7f34adcfbf5779215f761179d3612b2af564674ceab027824e33ede0fd36e928ea816040516113089190612656565b60405180910390a150611322565b505b3d6000803e3d6000fd5b611458565b600042905060006006548261133c9190612149565b90506040518060c0016040528084815260200160008152602001838152602001828152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581525060096000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160040160146101000a81548160ff021916908315150217905550905050827fd6eddd1118d71820909c1197aa966dbc15ed6f508554252169cc3d5ccac756ca838360405161144c929190612678565b60405180910390a25050505b565b611464828261199d565b6114b7578173ffffffffffffffffffffffffffffffffffffffff167f177b837046775fa5b29ab5200855e656a45bbfcfa33b871ed307c6b1c1472aa3826040516114ae9190611b85565b60405180910390a25b5050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6115896105c4565b156115c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c090611e90565b60405180910390fd5b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861160c611171565b6040516116199190611c63565b60405180910390a1565b600060096040518060c0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160149054906101000a900460ff16151515158152505090508060600151421015611714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170b906126ed565b60405180910390fd5b8060a0015115611759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175090612759565b60405180910390fd5b60008160400151036117a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611797906127c5565b60405180910390fd5b6001600960040160146101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16816080015173ffffffffffffffffffffffffffffffffffffffff160361189757600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3061183d610c6b565b84600001516040518463ffffffff1660e01b8152600401611860939291906127e5565b600060405180830381600087803b15801561187a57600080fd5b505af115801561188e573d6000803e3d6000fd5b50505050611931565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd30836080015184600001516040518463ffffffff1660e01b81526004016118fe9392919061283d565b600060405180830381600087803b15801561191857600080fd5b505af115801561192c573d6000803e3d6000fd5b505050505b60008160200151111561195457611953611949610c6b565b826020015161145a565b5b80600001517fc9f72b276a388619c6d185d146697036241880c36654b1a3ffdad07c24038d9982608001518360200151604051611992929190612874565b60405180910390a250565b6000808373ffffffffffffffffffffffffffffffffffffffff168360075490600067ffffffffffffffff8111156119d7576119d66124f8565b5b6040519080825280601f01601f191660200182016040528015611a095781602001600182028036833780820191505090505b50604051611a1791906128e4565b600060405180830381858888f193505050503d8060008114611a55576040519150601f19603f3d011682016040523d82523d6000602084013e611a5a565b606091505b505090508091505092915050565b6000604051905090565b600080fd5b600060ff82169050919050565b611a8d81611a77565b8114611a9857600080fd5b50565b600081359050611aaa81611a84565b92915050565b600060208284031215611ac657611ac5611a72565b5b6000611ad484828501611a9b565b91505092915050565b60008115159050919050565b611af281611add565b82525050565b6000602082019050611b0d6000830184611ae9565b92915050565b6000819050919050565b611b2681611b13565b8114611b3157600080fd5b50565b600081359050611b4381611b1d565b92915050565b600060208284031215611b5f57611b5e611a72565b5b6000611b6d84828501611b34565b91505092915050565b611b7f81611b13565b82525050565b6000602082019050611b9a6000830184611b76565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bcb82611ba0565b9050919050565b611bdb81611bc0565b82525050565b600060c082019050611bf66000830189611b76565b611c036020830188611b76565b611c106040830187611b76565b611c1d6060830186611b76565b611c2a6080830185611bd2565b611c3760a0830184611ae9565b979650505050505050565b6000611c4d82611ba0565b9050919050565b611c5d81611c42565b82525050565b6000602082019050611c786000830184611c54565b92915050565b6000819050919050565b6000611ca3611c9e611c9984611ba0565b611c7e565b611ba0565b9050919050565b6000611cb582611c88565b9050919050565b6000611cc782611caa565b9050919050565b611cd781611cbc565b82525050565b6000602082019050611cf26000830184611cce565b92915050565b611d0181611a77565b82525050565b6000602082019050611d1c6000830184611cf8565b92915050565b611d2b81611c42565b8114611d3657600080fd5b50565b600081359050611d4881611d22565b92915050565b600060208284031215611d6457611d63611a72565b5b6000611d7284828501611d39565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611dc2602083611d7b565b9150611dcd82611d8c565b602082019050919050565b60006020820190508181036000830152611df181611db5565b9050919050565b6000611e13611e0e611e0984611a77565b611c7e565b611b13565b9050919050565b611e2381611df8565b82525050565b6000602082019050611e3e6000830184611e1a565b92915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000611e7a601083611d7b565b9150611e8582611e44565b602082019050919050565b60006020820190508181036000830152611ea981611e6d565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000611ee6601f83611d7b565b9150611ef182611eb0565b602082019050919050565b60006020820190508181036000830152611f1581611ed9565b9050919050565b7f41756374696f6e20697320657870697265640000000000000000000000000000600082015250565b6000611f52601283611d7b565b9150611f5d82611f1c565b602082019050919050565b60006020820190508181036000830152611f8181611f45565b9050919050565b7f4e6f7420666f7220746869732061756374696f6e000000000000000000000000600082015250565b6000611fbe601483611d7b565b9150611fc982611f88565b602082019050919050565b60006020820190508181036000830152611fed81611fb1565b9050919050565b7f53656e64206174206c6561737420726573657276655072696365000000000000600082015250565b600061202a601a83611d7b565b915061203582611ff4565b602082019050919050565b600060208201905081810360008301526120598161201d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061209a82611b13565b91506120a583611b13565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156120de576120dd612060565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061212382611b13565b915061212e83611b13565b92508261213e5761213d6120e9565b5b828204905092915050565b600061215482611b13565b915061215f83611b13565b925082820190508082111561217757612176612060565b5b92915050565b7f496e6372656173652074686520626964206279206d696e426964496e6372656d60008201527f656e7450657263656e7461676500000000000000000000000000000000000000602082015250565b60006121d9602d83611d7b565b91506121e48261217d565b604082019050919050565b60006020820190508181036000830152612208816121cc565b9050919050565b7f5761697420666f72206e657874207475726e0000000000000000000000000000600082015250565b6000612245601283611d7b565b91506122508261220f565b602082019050919050565b6000602082019050818103600083015261227481612238565b9050919050565b600061228682611b13565b915061229183611b13565b92508282039050818111156122a9576122a8612060565b5b92915050565b60006060820190506122c46000830186611c54565b6122d16020830185611b76565b6122de6040830184611ae9565b949350505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061231c601483611d7b565b9150612327826122e6565b602082019050919050565b6000602082019050818103600083015261234b8161230f565b9050919050565b7f476173206973206e6f7420656e6f75676820666f72207472616e73616374696f60008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b60006123ae602183611d7b565b91506123b982612352565b604082019050919050565b600060208201905081810360008301526123dd816123a1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612440602683611d7b565b915061244b826123e4565b604082019050919050565b6000602082019050818103600083015261246f81612433565b9050919050565b60008151905061248581611b1d565b92915050565b6000602082840312156124a1576124a0611a72565b5b60006124af84828501612476565b91505092915050565b60008160e01c9050919050565b600060033d11156124e45760046000803e6124e16000516124b8565b90505b90565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612530826124e7565b810181811067ffffffffffffffff8211171561254f5761254e6124f8565b5b80604052505050565b600060443d106125e55761256a611a68565b60043d036004823e80513d602482011167ffffffffffffffff821117156125925750506125e5565b808201805167ffffffffffffffff8111156125b057505050506125e5565b80602083010160043d0385018111156125cd5750505050506125e5565b6125dc82602001850186612527565b82955050505050505b90565b600081519050919050565b60005b838110156126115780820151818401526020810190506125f6565b60008484015250505050565b6000612628826125e8565b6126328185611d7b565b93506126428185602086016125f3565b61264b816124e7565b840191505092915050565b60006020820190508181036000830152612670818461261d565b905092915050565b600060408201905061268d6000830185611b76565b61269a6020830184611b76565b9392505050565b7f41756374696f6e20697320616374697665000000000000000000000000000000600082015250565b60006126d7601183611d7b565b91506126e2826126a1565b602082019050919050565b60006020820190508181036000830152612706816126ca565b9050919050565b7f41756374696f6e20697320736574746c656420616c7265616479000000000000600082015250565b6000612743601a83611d7b565b915061274e8261270d565b602082019050919050565b6000602082019050818103600083015261277281612736565b9050919050565b7f41756374696f6e206469646e2774207374617274207965740000000000000000600082015250565b60006127af601883611d7b565b91506127ba82612779565b602082019050919050565b600060208201905081810360008301526127de816127a2565b9050919050565b60006060820190506127fa6000830186611c54565b6128076020830185611c54565b6128146040830184611b76565b949350505050565b600061282782611caa565b9050919050565b6128378161281c565b82525050565b60006060820190506128526000830186611c54565b61285f602083018561282e565b61286c6040830184611b76565b949350505050565b6000604082019050612889600083018561282e565b6128966020830184611b76565b9392505050565b600081519050919050565b600081905092915050565b60006128be8261289d565b6128c881856128a8565b93506128d88185602086016125f3565b80840191505092915050565b60006128f082846128b3565b91508190509291505056fea26469706673582212206393d1cb0edd12206fb4644cab543c3e4d63c7e1a9e7e5544bd893b1826e7ce564736f6c634300081000330000000000000000000000006a882514a509271bf8a5e3f16268c3a363dc93a9000000000000000000000000000000000000000000000000000000000000012c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000a8c00000000000000000000000000000000000000000000000000000000000000002

Deployed Bytecode

0x60806040526004361061012a5760003560e01c8063991c750d116100ab578063dd51faa21161006f578063dd51faa214610354578063ec91f2a41461037d578063f25efffc146103a8578063f2fde38b146103bf578063f6be71d1146103e8578063f8b75fb5146104115761012a565b8063991c750d14610293578063a4d0a17e146102be578063b296024d146102d5578063ce9c7c0d14610300578063db2e1eed146103295761012a565b80637120334b116100f25780637120334b146101e1578063715018a61461020a5780637d9f6db5146102215780638456cb59146102515780638da5cb5b146102685761012a565b806336ebdb381461012f5780633f4ba83a146101585780635c975abb1461016f578063659dd2b41461019a5780636ca7c216146101b6575b600080fd5b34801561013b57600080fd5b5061015660048036038101906101519190611ab0565b61043c565b005b34801561016457600080fd5b5061016d61050d565b005b34801561017b57600080fd5b506101846105c4565b6040516101919190611af8565b60405180910390f35b6101b460048036038101906101af9190611b49565b6105da565b005b3480156101c257600080fd5b506101cb610a43565b6040516101d89190611b85565b60405180910390f35b3480156101ed57600080fd5b5061020860048036038101906102039190611b49565b610a49565b005b34801561021657600080fd5b5061021f610b06565b005b34801561022d57600080fd5b50610236610b8e565b60405161024896959493929190611be1565b60405180910390f35b34801561025d57600080fd5b50610266610be5565b005b34801561027457600080fd5b5061027d610c6b565b60405161028a9190611c63565b60405180910390f35b34801561029f57600080fd5b506102a8610c95565b6040516102b59190611cdd565b60405180910390f35b3480156102ca57600080fd5b506102d3610cbb565b005b3480156102e157600080fd5b506102ea610d60565b6040516102f79190611d07565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190611b49565b610d73565b005b34801561033557600080fd5b5061033e610e30565b60405161034b9190611b85565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190611b49565b610e36565b005b34801561038957600080fd5b50610392610f3a565b60405161039f9190611b85565b60405180910390f35b3480156103b457600080fd5b506103bd610f40565b005b3480156103cb57600080fd5b506103e660048036038101906103e19190611d4e565b610fee565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190611b49565b6110e5565b005b34801561041d57600080fd5b5061042661116b565b6040516104339190611b85565b60405180910390f35b610444611171565b73ffffffffffffffffffffffffffffffffffffffff16610462610c6b565b73ffffffffffffffffffffffffffffffffffffffff16146104b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104af90611dd8565b60405180910390fd5b80600860006101000a81548160ff021916908360ff1602179055507fec5ccd96cc77b6219e9d44143df916af68fc169339ea7de5008ff15eae13450d816040516105029190611e29565b60405180910390a150565b610515611171565b73ffffffffffffffffffffffffffffffffffffffff16610533610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058090611dd8565b60405180910390fd5b610591611179565b600060096002015414806105b45750600960040160149054906101000a900460ff165b156105c2576105c161121a565b5b565b60008060009054906101000a900460ff16905090565b6105e26105c4565b15610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061990611e90565b60405180910390fd5b600260015403610667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065e90611efc565b60405180910390fd5b6002600181905550600060096040518060c0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160149054906101000a900460ff16151515158152505090508060600151421061075f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075690611f68565b60405180910390fd5b818160000151146107a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079c90611fd4565b60405180910390fd5b6005543410156107ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e190612040565b60405180910390fd5b6064600860009054906101000a900460ff1660ff16826020015161080e919061208f565b6108189190612118565b81602001516108279190612149565b341015610869576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610860906121ef565b60405180910390fd5b6000816080015190508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036108e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d79061225b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109235761092281836020015161145a565b5b3460096001018190555033600960040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600454428460600151610986919061227b565b10905080156109af576004544261099d9190612149565b83606001818152506009600301819055505b82600001517f1159164c56f277e6fc99c11731bd380e0347deb969b75523398734c252706ea33334846040516109e7939291906122af565b60405180910390a28015610a365782600001517f6e912a3a9105bdd2af817ba5adc14e6c127c1035b5b648faa29ca0d58ab8ff4e8460600151604051610a2d9190611b85565b60405180910390a25b5050506001808190555050565b60075481565b610a51611171565b73ffffffffffffffffffffffffffffffffffffffff16610a6f610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc90611dd8565b60405180910390fd5b806004819055507f1b55d9f7002bda4490f467e326f22a4a847629c0f2d1ed421607d318d25b410d81604051610afb9190611b85565b60405180910390a150565b610b0e611171565b73ffffffffffffffffffffffffffffffffffffffff16610b2c610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7990611dd8565b60405180910390fd5b610b8c60006114bb565b565b60098060000154908060010154908060020154908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160149054906101000a900460ff16905086565b610bed611171565b73ffffffffffffffffffffffffffffffffffffffff16610c0b610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5890611dd8565b60405180910390fd5b610c69611581565b565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610cc36105c4565b610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf990612332565b60405180910390fd5b600260015403610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e90611efc565b60405180910390fd5b6002600181905550610d57611623565b60018081905550565b600860009054906101000a900460ff1681565b610d7b611171565b73ffffffffffffffffffffffffffffffffffffffff16610d99610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de690611dd8565b60405180910390fd5b806005819055507f6ab2e127d7fdf53b8f304e59d3aab5bfe97979f52a85479691a6fab27a28a6b281604051610e259190611b85565b60405180910390a150565b60055481565b610e3e611171565b73ffffffffffffffffffffffffffffffffffffffff16610e5c610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990611dd8565b60405180910390fd5b615208811015610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee906123c4565b60405180910390fd5b806007819055507ffefb35d3b552827c626b8a9c24b4672a6ed742e98cc7b0d6d2d13f6bdfb2c019600754604051610f2f9190611b85565b60405180910390a150565b60045481565b600260015403610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7c90611efc565b60405180910390fd5b6002600181905550610f956105c4565b15610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc90611e90565b60405180910390fd5b610fdd611623565b610fe561121a565b60018081905550565b610ff6611171565b73ffffffffffffffffffffffffffffffffffffffff16611014610c6b565b73ffffffffffffffffffffffffffffffffffffffff161461106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190611dd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d090612456565b60405180910390fd5b6110e2816114bb565b50565b6110ed611171565b73ffffffffffffffffffffffffffffffffffffffff1661110b610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115890611dd8565b60405180910390fd5b8060068190555050565b60065481565b600033905090565b6111816105c4565b6111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b790612332565b60405180910390fd5b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611203611171565b6040516112109190611c63565b60405180910390a1565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166332f4a69b6040518163ffffffff1660e01b81526004016020604051808303816000875af19250505080156112a657506040513d601f19601f820116820180604052508101906112a3919061248b565b60015b611327576112b26124c5565b806308c379a00361131657506112c6612558565b806112d15750611318565b6112d9611581565b7f34adcfbf5779215f761179d3612b2af564674ceab027824e33ede0fd36e928ea816040516113089190612656565b60405180910390a150611322565b505b3d6000803e3d6000fd5b611458565b600042905060006006548261133c9190612149565b90506040518060c0016040528084815260200160008152602001838152602001828152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581525060096000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160040160146101000a81548160ff021916908315150217905550905050827fd6eddd1118d71820909c1197aa966dbc15ed6f508554252169cc3d5ccac756ca838360405161144c929190612678565b60405180910390a25050505b565b611464828261199d565b6114b7578173ffffffffffffffffffffffffffffffffffffffff167f177b837046775fa5b29ab5200855e656a45bbfcfa33b871ed307c6b1c1472aa3826040516114ae9190611b85565b60405180910390a25b5050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6115896105c4565b156115c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c090611e90565b60405180910390fd5b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861160c611171565b6040516116199190611c63565b60405180910390a1565b600060096040518060c0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160149054906101000a900460ff16151515158152505090508060600151421015611714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170b906126ed565b60405180910390fd5b8060a0015115611759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175090612759565b60405180910390fd5b60008160400151036117a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611797906127c5565b60405180910390fd5b6001600960040160146101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16816080015173ffffffffffffffffffffffffffffffffffffffff160361189757600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3061183d610c6b565b84600001516040518463ffffffff1660e01b8152600401611860939291906127e5565b600060405180830381600087803b15801561187a57600080fd5b505af115801561188e573d6000803e3d6000fd5b50505050611931565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd30836080015184600001516040518463ffffffff1660e01b81526004016118fe9392919061283d565b600060405180830381600087803b15801561191857600080fd5b505af115801561192c573d6000803e3d6000fd5b505050505b60008160200151111561195457611953611949610c6b565b826020015161145a565b5b80600001517fc9f72b276a388619c6d185d146697036241880c36654b1a3ffdad07c24038d9982608001518360200151604051611992929190612874565b60405180910390a250565b6000808373ffffffffffffffffffffffffffffffffffffffff168360075490600067ffffffffffffffff8111156119d7576119d66124f8565b5b6040519080825280601f01601f191660200182016040528015611a095781602001600182028036833780820191505090505b50604051611a1791906128e4565b600060405180830381858888f193505050503d8060008114611a55576040519150601f19603f3d011682016040523d82523d6000602084013e611a5a565b606091505b505090508091505092915050565b6000604051905090565b600080fd5b600060ff82169050919050565b611a8d81611a77565b8114611a9857600080fd5b50565b600081359050611aaa81611a84565b92915050565b600060208284031215611ac657611ac5611a72565b5b6000611ad484828501611a9b565b91505092915050565b60008115159050919050565b611af281611add565b82525050565b6000602082019050611b0d6000830184611ae9565b92915050565b6000819050919050565b611b2681611b13565b8114611b3157600080fd5b50565b600081359050611b4381611b1d565b92915050565b600060208284031215611b5f57611b5e611a72565b5b6000611b6d84828501611b34565b91505092915050565b611b7f81611b13565b82525050565b6000602082019050611b9a6000830184611b76565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bcb82611ba0565b9050919050565b611bdb81611bc0565b82525050565b600060c082019050611bf66000830189611b76565b611c036020830188611b76565b611c106040830187611b76565b611c1d6060830186611b76565b611c2a6080830185611bd2565b611c3760a0830184611ae9565b979650505050505050565b6000611c4d82611ba0565b9050919050565b611c5d81611c42565b82525050565b6000602082019050611c786000830184611c54565b92915050565b6000819050919050565b6000611ca3611c9e611c9984611ba0565b611c7e565b611ba0565b9050919050565b6000611cb582611c88565b9050919050565b6000611cc782611caa565b9050919050565b611cd781611cbc565b82525050565b6000602082019050611cf26000830184611cce565b92915050565b611d0181611a77565b82525050565b6000602082019050611d1c6000830184611cf8565b92915050565b611d2b81611c42565b8114611d3657600080fd5b50565b600081359050611d4881611d22565b92915050565b600060208284031215611d6457611d63611a72565b5b6000611d7284828501611d39565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611dc2602083611d7b565b9150611dcd82611d8c565b602082019050919050565b60006020820190508181036000830152611df181611db5565b9050919050565b6000611e13611e0e611e0984611a77565b611c7e565b611b13565b9050919050565b611e2381611df8565b82525050565b6000602082019050611e3e6000830184611e1a565b92915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000611e7a601083611d7b565b9150611e8582611e44565b602082019050919050565b60006020820190508181036000830152611ea981611e6d565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000611ee6601f83611d7b565b9150611ef182611eb0565b602082019050919050565b60006020820190508181036000830152611f1581611ed9565b9050919050565b7f41756374696f6e20697320657870697265640000000000000000000000000000600082015250565b6000611f52601283611d7b565b9150611f5d82611f1c565b602082019050919050565b60006020820190508181036000830152611f8181611f45565b9050919050565b7f4e6f7420666f7220746869732061756374696f6e000000000000000000000000600082015250565b6000611fbe601483611d7b565b9150611fc982611f88565b602082019050919050565b60006020820190508181036000830152611fed81611fb1565b9050919050565b7f53656e64206174206c6561737420726573657276655072696365000000000000600082015250565b600061202a601a83611d7b565b915061203582611ff4565b602082019050919050565b600060208201905081810360008301526120598161201d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061209a82611b13565b91506120a583611b13565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156120de576120dd612060565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061212382611b13565b915061212e83611b13565b92508261213e5761213d6120e9565b5b828204905092915050565b600061215482611b13565b915061215f83611b13565b925082820190508082111561217757612176612060565b5b92915050565b7f496e6372656173652074686520626964206279206d696e426964496e6372656d60008201527f656e7450657263656e7461676500000000000000000000000000000000000000602082015250565b60006121d9602d83611d7b565b91506121e48261217d565b604082019050919050565b60006020820190508181036000830152612208816121cc565b9050919050565b7f5761697420666f72206e657874207475726e0000000000000000000000000000600082015250565b6000612245601283611d7b565b91506122508261220f565b602082019050919050565b6000602082019050818103600083015261227481612238565b9050919050565b600061228682611b13565b915061229183611b13565b92508282039050818111156122a9576122a8612060565b5b92915050565b60006060820190506122c46000830186611c54565b6122d16020830185611b76565b6122de6040830184611ae9565b949350505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061231c601483611d7b565b9150612327826122e6565b602082019050919050565b6000602082019050818103600083015261234b8161230f565b9050919050565b7f476173206973206e6f7420656e6f75676820666f72207472616e73616374696f60008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b60006123ae602183611d7b565b91506123b982612352565b604082019050919050565b600060208201905081810360008301526123dd816123a1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612440602683611d7b565b915061244b826123e4565b604082019050919050565b6000602082019050818103600083015261246f81612433565b9050919050565b60008151905061248581611b1d565b92915050565b6000602082840312156124a1576124a0611a72565b5b60006124af84828501612476565b91505092915050565b60008160e01c9050919050565b600060033d11156124e45760046000803e6124e16000516124b8565b90505b90565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612530826124e7565b810181811067ffffffffffffffff8211171561254f5761254e6124f8565b5b80604052505050565b600060443d106125e55761256a611a68565b60043d036004823e80513d602482011167ffffffffffffffff821117156125925750506125e5565b808201805167ffffffffffffffff8111156125b057505050506125e5565b80602083010160043d0385018111156125cd5750505050506125e5565b6125dc82602001850186612527565b82955050505050505b90565b600081519050919050565b60005b838110156126115780820151818401526020810190506125f6565b60008484015250505050565b6000612628826125e8565b6126328185611d7b565b93506126428185602086016125f3565b61264b816124e7565b840191505092915050565b60006020820190508181036000830152612670818461261d565b905092915050565b600060408201905061268d6000830185611b76565b61269a6020830184611b76565b9392505050565b7f41756374696f6e20697320616374697665000000000000000000000000000000600082015250565b60006126d7601183611d7b565b91506126e2826126a1565b602082019050919050565b60006020820190508181036000830152612706816126ca565b9050919050565b7f41756374696f6e20697320736574746c656420616c7265616479000000000000600082015250565b6000612743601a83611d7b565b915061274e8261270d565b602082019050919050565b6000602082019050818103600083015261277281612736565b9050919050565b7f41756374696f6e206469646e2774207374617274207965740000000000000000600082015250565b60006127af601883611d7b565b91506127ba82612779565b602082019050919050565b600060208201905081810360008301526127de816127a2565b9050919050565b60006060820190506127fa6000830186611c54565b6128076020830185611c54565b6128146040830184611b76565b949350505050565b600061282782611caa565b9050919050565b6128378161281c565b82525050565b60006060820190506128526000830186611c54565b61285f602083018561282e565b61286c6040830184611b76565b949350505050565b6000604082019050612889600083018561282e565b6128966020830184611b76565b9392505050565b600081519050919050565b600081905092915050565b60006128be8261289d565b6128c881856128a8565b93506128d88185602086016125f3565b80840191505092915050565b60006128f082846128b3565b91508190509291505056fea26469706673582212206393d1cb0edd12206fb4644cab543c3e4d63c7e1a9e7e5544bd893b1826e7ce564736f6c63430008100033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000006a882514a509271bf8a5e3f16268c3a363dc93a9000000000000000000000000000000000000000000000000000000000000012c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000a8c00000000000000000000000000000000000000000000000000000000000000002

-----Decoded View---------------
Arg [0] : _alpha (address): 0x6a882514a509271Bf8A5e3F16268C3a363Dc93A9
Arg [1] : _timeBuffer (uint256): 300
Arg [2] : _reservePrice (uint256): 1
Arg [3] : _durationTime (uint256): 43200
Arg [4] : _minBidIncrementPercentage (uint8): 2

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000006a882514a509271bf8a5e3f16268c3a363dc93a9
Arg [1] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 000000000000000000000000000000000000000000000000000000000000a8c0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000002


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.