ETH Price: $3,649.92 (-6.03%)

Token

Reputation (REPv2)
 

Overview

Max Total Supply

8,034,960.108444537104684845 REPv2

Holders

12,784 ( 0.031%)

Market

Price

$0.61 @ 0.000168 ETH (-8.08%)

Onchain Market Cap

$4,931,366.62

Circulating Supply Market Cap

$6,751,126.58

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,061.799 REPv2

Value
$651.67 ( ~0.178543453790868 Eth) [0.0132%]
0xb61a0a7c9b87a214814cc776825b8639d0748527
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Augur combines the magic of prediction markets with the power of a decentralized network to create a stunningly accurate forecasting tool

Profitability / Loss

Since Initial Offer Price
:$0.60 2.29%

Market

Volume (24H):$158,263.98
Market Capitalization:$6,751,126.58
Circulating Supply:11,000,000.00 REPv2
Market Data Source: Coinmarketcap

ICO Information

ICO Start Date : Aug 1, 2015   
Total Cap : $5,000,000
ICO Price  : $0.602

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ReputationToken

Compiler Version
v0.5.15+commit.6a57276f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license
File 1 of 1 : ReputationToken.sol
pragma solidity 0.5.15;

contract IAugur {
    function createChildUniverse(bytes32 _parentPayoutDistributionHash, uint256[] memory _parentPayoutNumerators) public returns (IUniverse);
    function isKnownUniverse(IUniverse _universe) public view returns (bool);
    function trustedCashTransfer(address _from, address _to, uint256 _amount) public returns (bool);
    function isTrustedSender(address _address) public returns (bool);
    function onCategoricalMarketCreated(uint256 _endTime, string memory _extraInfo, IMarket _market, address _marketCreator, address _designatedReporter, uint256 _feePerCashInAttoCash, bytes32[] memory _outcomes) public returns (bool);
    function onYesNoMarketCreated(uint256 _endTime, string memory _extraInfo, IMarket _market, address _marketCreator, address _designatedReporter, uint256 _feePerCashInAttoCash) public returns (bool);
    function onScalarMarketCreated(uint256 _endTime, string memory _extraInfo, IMarket _market, address _marketCreator, address _designatedReporter, uint256 _feePerCashInAttoCash, int256[] memory _prices, uint256 _numTicks)  public returns (bool);
    function logInitialReportSubmitted(IUniverse _universe, address _reporter, address _market, address _initialReporter, uint256 _amountStaked, bool _isDesignatedReporter, uint256[] memory _payoutNumerators, string memory _description, uint256 _nextWindowStartTime, uint256 _nextWindowEndTime) public returns (bool);
    function disputeCrowdsourcerCreated(IUniverse _universe, address _market, address _disputeCrowdsourcer, uint256[] memory _payoutNumerators, uint256 _size, uint256 _disputeRound) public returns (bool);
    function logDisputeCrowdsourcerContribution(IUniverse _universe, address _reporter, address _market, address _disputeCrowdsourcer, uint256 _amountStaked, string memory description, uint256[] memory _payoutNumerators, uint256 _currentStake, uint256 _stakeRemaining, uint256 _disputeRound) public returns (bool);
    function logDisputeCrowdsourcerCompleted(IUniverse _universe, address _market, address _disputeCrowdsourcer, uint256[] memory _payoutNumerators, uint256 _nextWindowStartTime, uint256 _nextWindowEndTime, bool _pacingOn, uint256 _totalRepStakedInPayout, uint256 _totalRepStakedInMarket, uint256 _disputeRound) public returns (bool);
    function logInitialReporterRedeemed(IUniverse _universe, address _reporter, address _market, uint256 _amountRedeemed, uint256 _repReceived, uint256[] memory _payoutNumerators) public returns (bool);
    function logDisputeCrowdsourcerRedeemed(IUniverse _universe, address _reporter, address _market, uint256 _amountRedeemed, uint256 _repReceived, uint256[] memory _payoutNumerators) public returns (bool);
    function logMarketFinalized(IUniverse _universe, uint256[] memory _winningPayoutNumerators) public returns (bool);
    function logMarketMigrated(IMarket _market, IUniverse _originalUniverse) public returns (bool);
    function logReportingParticipantDisavowed(IUniverse _universe, IMarket _market) public returns (bool);
    function logMarketParticipantsDisavowed(IUniverse _universe) public returns (bool);
    function logCompleteSetsPurchased(IUniverse _universe, IMarket _market, address _account, uint256 _numCompleteSets) public returns (bool);
    function logCompleteSetsSold(IUniverse _universe, IMarket _market, address _account, uint256 _numCompleteSets, uint256 _fees) public returns (bool);
    function logMarketOIChanged(IUniverse _universe, IMarket _market) public returns (bool);
    function logTradingProceedsClaimed(IUniverse _universe, address _sender, address _market, uint256 _outcome, uint256 _numShares, uint256 _numPayoutTokens, uint256 _fees) public returns (bool);
    function logUniverseForked(IMarket _forkingMarket) public returns (bool);
    function logReputationTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value, uint256 _fromBalance, uint256 _toBalance) public returns (bool);
    function logReputationTokensBurned(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool);
    function logReputationTokensMinted(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool);
    function logShareTokensBalanceChanged(address _account, IMarket _market, uint256 _outcome, uint256 _balance) public returns (bool);
    function logDisputeCrowdsourcerTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value, uint256 _fromBalance, uint256 _toBalance) public returns (bool);
    function logDisputeCrowdsourcerTokensBurned(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool);
    function logDisputeCrowdsourcerTokensMinted(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool);
    function logDisputeWindowCreated(IDisputeWindow _disputeWindow, uint256 _id, bool _initial) public returns (bool);
    function logParticipationTokensRedeemed(IUniverse universe, address _sender, uint256 _attoParticipationTokens, uint256 _feePayoutShare) public returns (bool);
    function logTimestampSet(uint256 _newTimestamp) public returns (bool);
    function logInitialReporterTransferred(IUniverse _universe, IMarket _market, address _from, address _to) public returns (bool);
    function logMarketTransferred(IUniverse _universe, address _from, address _to) public returns (bool);
    function logParticipationTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value, uint256 _fromBalance, uint256 _toBalance) public returns (bool);
    function logParticipationTokensBurned(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool);
    function logParticipationTokensMinted(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool);
    function logMarketRepBondTransferred(address _universe, address _from, address _to) public returns (bool);
    function logWarpSyncDataUpdated(address _universe, uint256 _warpSyncHash, uint256 _marketEndTime) public returns (bool);
    function isKnownFeeSender(address _feeSender) public view returns (bool);
    function lookup(bytes32 _key) public view returns (address);
    function getTimestamp() public view returns (uint256);
    function getMaximumMarketEndDate() public returns (uint256);
    function isKnownMarket(IMarket _market) public view returns (bool);
    function derivePayoutDistributionHash(uint256[] memory _payoutNumerators, uint256 _numTicks, uint256 numOutcomes) public view returns (bytes32);
    function logValidityBondChanged(uint256 _validityBond) public returns (bool);
    function logDesignatedReportStakeChanged(uint256 _designatedReportStake) public returns (bool);
    function logNoShowBondChanged(uint256 _noShowBond) public returns (bool);
    function logReportingFeeChanged(uint256 _reportingFee) public returns (bool);
    function getUniverseForkIndex(IUniverse _universe) public view returns (uint256);
}

contract IOwnable {
    function getOwner() public view returns (address);
    function transferOwnership(address _newOwner) public returns (bool);
}

contract ITyped {
    function getTypeName() public view returns (bytes32);
}

library SafeMathUint256 {
    function mul(uint256 a, uint256 b) internal pure returns (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-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);
        return c;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a <= b) {
            return a;
        } else {
            return b;
        }
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a >= b) {
            return a;
        } else {
            return b;
        }
    }

    function sqrt(uint256 y) internal pure returns (uint256 z) {
        if (y > 3) {
            uint256 x = (y + 1) / 2;
            z = y;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }

    function getUint256Min() internal pure returns (uint256) {
        return 0;
    }

    function getUint256Max() internal pure returns (uint256) {
        // 2 ** 256 - 1
        return 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
    }

    function isMultipleOf(uint256 a, uint256 b) internal pure returns (bool) {
        return a % b == 0;
    }

    // Float [fixed point] Operations
    function fxpMul(uint256 a, uint256 b, uint256 base) internal pure returns (uint256) {
        return div(mul(a, b), base);
    }

    function fxpDiv(uint256 a, uint256 b, uint256 base) internal pure returns (uint256) {
        return div(mul(a, base), b);
    }
}

interface IERC1155 {

    /// @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred,
    ///      including zero value transfers as well as minting or burning.
    /// Operator will always be msg.sender.
    /// Either event from address `0x0` signifies a minting operation.
    /// An event to address `0x0` signifies a burning or melting operation.
    /// The total value transferred from address 0x0 minus the total value transferred to 0x0 may
    /// be used by clients and exchanges to be added to the "circulating supply" for a given token ID.
    /// To define a token ID with no initial balance, the contract SHOULD emit the TransferSingle event
    /// from `0x0` to `0x0`, with the token creator as `_operator`.
    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 value
    );

    /// @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred,
    ///      including zero value transfers as well as minting or burning.
    ///Operator will always be msg.sender.
    /// Either event from address `0x0` signifies a minting operation.
    /// An event to address `0x0` signifies a burning or melting operation.
    /// The total value transferred from address 0x0 minus the total value transferred to 0x0 may
    /// be used by clients and exchanges to be added to the "circulating supply" for a given token ID.
    /// To define multiple token IDs with no initial balance, this SHOULD emit the TransferBatch event
    /// from `0x0` to `0x0`, with the token creator as `_operator`.
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /// @dev MUST emit when an approval is updated.
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    /// @dev MUST emit when the URI is updated for a token ID.
    /// URIs are defined in RFC 3986.
    /// The URI MUST point a JSON file that conforms to the "ERC-1155 Metadata JSON Schema".
    event URI(
        string value,
        uint256 indexed id
    );

    /// @notice Transfers value amount of an _id from the _from address to the _to address specified.
    /// @dev MUST emit TransferSingle event on success.
    /// Caller must be approved to manage the _from account's tokens (see isApprovedForAll).
    /// MUST throw if `_to` is the zero address.
    /// MUST throw if balance of sender for token `_id` is lower than the `_value` sent.
    /// MUST throw on any other error.
    /// When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0).
    /// If so, it MUST call `onERC1155Received` on `_to` and revert if the return value
    /// is not `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`.
    /// @param from    Source address
    /// @param to      Target address
    /// @param id      ID of the token type
    /// @param value   Transfer amount
    /// @param data    Additional data with no specified format, sent in call to `_to`
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 value,
        bytes calldata data
    )
        external;

    /// @notice Send multiple types of Tokens from a 3rd party in one transfer (with safety call).
    /// @dev MUST emit TransferBatch event on success.
    /// Caller must be approved to manage the _from account's tokens (see isApprovedForAll).
    /// MUST throw if `_to` is the zero address.
    /// MUST throw if length of `_ids` is not the same as length of `_values`.
    ///  MUST throw if any of the balance of sender for token `_ids` is lower than the respective `_values` sent.
    /// MUST throw on any other error.
    /// When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0).
    /// If so, it MUST call `onERC1155BatchReceived` on `_to` and revert if the return value
    /// is not `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`.
    /// @param from    Source addresses
    /// @param to      Target addresses
    /// @param ids     IDs of each token type
    /// @param values  Transfer amounts per token type
    /// @param data    Additional data with no specified format, sent in call to `_to`
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    )
        external;

    /// @notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens.
    /// @dev MUST emit the ApprovalForAll event on success.
    /// @param operator  Address to add to the set of authorized operators
    /// @param approved  True if the operator is approved, false to revoke approval
    function setApprovalForAll(address operator, bool approved) external;

    /// @notice Queries the approval status of an operator for a given owner.
    /// @param owner     The owner of the Tokens
    /// @param operator  Address of authorized operator
    /// @return           True if the operator is approved, false if not
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /// @notice Get the balance of an account's Tokens.
    /// @param owner  The address of the token holder
    /// @param id     ID of the Token
    /// @return        The _owner's balance of the Token type requested
    function balanceOf(address owner, uint256 id) external view returns (uint256);

    /// @notice Get the total supply of a Token.
    /// @param id     ID of the Token
    /// @return        The total supply of the Token type requested
    function totalSupply(uint256 id) external view returns (uint256);

    /// @notice Get the balance of multiple account/token pairs
    /// @param owners The addresses of the token holders
    /// @param ids    ID of the Tokens
    /// @return        The _owner's balance of the Token types requested
    function balanceOfBatch(
        address[] calldata owners,
        uint256[] calldata ids
    )
        external
        view
        returns (uint256[] memory balances_);
}

contract IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) public view returns (uint256);
    function transfer(address to, uint256 amount) public returns (bool);
    function transferFrom(address from, address to, uint256 amount) public returns (bool);
    function approve(address spender, uint256 amount) public returns (bool);
    function allowance(address owner, address spender) public view returns (uint256);

    // solhint-disable-next-line no-simple-event-func-name
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract ICash is IERC20 {
}

contract ERC20 is IERC20 {
    using SafeMathUint256 for uint256;

    uint8 constant public decimals = 18;

    uint256 public totalSupply;

    mapping (address => uint256) public balances;

    mapping (address => mapping (address => uint256)) public allowances;

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address _account) public view returns (uint256) {
        return balances[_account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address _recipient, uint256 _amount) public returns (bool) {
        _transfer(msg.sender, _recipient, _amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address _owner, address _spender) public view returns (uint256) {
        return allowances[_owner][_spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address _spender, uint256 _amount) public returns (bool) {
        _approve(msg.sender, _spender, _amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(address _sender, address _recipient, uint256 _amount) public returns (bool) {
        _transfer(_sender, _recipient, _amount);
        _approve(_sender, msg.sender, allowances[_sender][msg.sender].sub(_amount));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address _spender, uint256 _addedValue) public returns (bool) {
        _approve(msg.sender, _spender, allowances[msg.sender][_spender].add(_addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address _spender, uint256 _subtractedValue) public returns (bool) {
        _approve(msg.sender, _spender, allowances[msg.sender][_spender].sub(_subtractedValue));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address _sender, address _recipient, uint256 _amount) internal {
        require(_sender != address(0), "ERC20: transfer from the zero address");
        require(_recipient != address(0), "ERC20: transfer to the zero address");

        balances[_sender] = balances[_sender].sub(_amount);
        balances[_recipient] = balances[_recipient].add(_amount);
        emit Transfer(_sender, _recipient, _amount);
        onTokenTransfer(_sender, _recipient, _amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address _account, uint256 _amount) internal {
        require(_account != address(0), "ERC20: mint to the zero address");

        totalSupply = totalSupply.add(_amount);
        balances[_account] = balances[_account].add(_amount);
        emit Transfer(address(0), _account, _amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address _account, uint256 _amount) internal {
        require(_account != address(0), "ERC20: burn from the zero address");

        balances[_account] = balances[_account].sub(_amount);
        totalSupply = totalSupply.sub(_amount);
        emit Transfer(_account, address(0), _amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address _owner, address _spender, uint256 _amount) internal {
        require(_owner != address(0), "ERC20: approve from the zero address");
        require(_spender != address(0), "ERC20: approve to the zero address");

        allowances[_owner][_spender] = _amount;
        emit Approval(_owner, _spender, _amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * See {_burn} and {_approve}.
     */
    function _burnFrom(address _account, uint256 _amount) internal {
        _burn(_account, _amount);
        _approve(_account, msg.sender, allowances[_account][msg.sender].sub(_amount));
    }

    // Subclasses of this token generally want to send additional logs through the centralized Augur log emitter contract
    function onTokenTransfer(address _from, address _to, uint256 _value) internal;
}

contract VariableSupplyToken is ERC20 {
    using SafeMathUint256 for uint256;

    function mint(address _target, uint256 _amount) internal returns (bool) {
        _mint(_target, _amount);
        onMint(_target, _amount);
        return true;
    }

    function burn(address _target, uint256 _amount) internal returns (bool) {
        _burn(_target, _amount);
        onBurn(_target, _amount);
        return true;
    }

    // Subclasses of this token may want to send additional logs through the centralized Augur log emitter contract
    function onMint(address, uint256) internal {
    }

    // Subclasses of this token may want to send additional logs through the centralized Augur log emitter contract
    function onBurn(address, uint256) internal {
    }
}

contract IAffiliateValidator {
    function validateReference(address _account, address _referrer) external view returns (bool);
}

contract IDisputeWindow is ITyped, IERC20 {
    function invalidMarketsTotal() external view returns (uint256);
    function validityBondTotal() external view returns (uint256);

    function incorrectDesignatedReportTotal() external view returns (uint256);
    function initialReportBondTotal() external view returns (uint256);

    function designatedReportNoShowsTotal() external view returns (uint256);
    function designatedReporterNoShowBondTotal() external view returns (uint256);

    function initialize(IAugur _augur, IUniverse _universe, uint256 _disputeWindowId, bool _participationTokensEnabled, uint256 _duration, uint256 _startTime) public;
    function trustedBuy(address _buyer, uint256 _attotokens) public returns (bool);
    function getUniverse() public view returns (IUniverse);
    function getReputationToken() public view returns (IReputationToken);
    function getStartTime() public view returns (uint256);
    function getEndTime() public view returns (uint256);
    function getWindowId() public view returns (uint256);
    function isActive() public view returns (bool);
    function isOver() public view returns (bool);
    function onMarketFinalized() public;
    function redeem(address _account) public returns (bool);
}

contract IMarket is IOwnable {
    enum MarketType {
        YES_NO,
        CATEGORICAL,
        SCALAR
    }

    function initialize(IAugur _augur, IUniverse _universe, uint256 _endTime, uint256 _feePerCashInAttoCash, IAffiliateValidator _affiliateValidator, uint256 _affiliateFeeDivisor, address _designatedReporterAddress, address _creator, uint256 _numOutcomes, uint256 _numTicks) public;
    function derivePayoutDistributionHash(uint256[] memory _payoutNumerators) public view returns (bytes32);
    function doInitialReport(uint256[] memory _payoutNumerators, string memory _description, uint256 _additionalStake) public returns (bool);
    function getUniverse() public view returns (IUniverse);
    function getDisputeWindow() public view returns (IDisputeWindow);
    function getNumberOfOutcomes() public view returns (uint256);
    function getNumTicks() public view returns (uint256);
    function getMarketCreatorSettlementFeeDivisor() public view returns (uint256);
    function getForkingMarket() public view returns (IMarket _market);
    function getEndTime() public view returns (uint256);
    function getWinningPayoutDistributionHash() public view returns (bytes32);
    function getWinningPayoutNumerator(uint256 _outcome) public view returns (uint256);
    function getWinningReportingParticipant() public view returns (IReportingParticipant);
    function getReputationToken() public view returns (IV2ReputationToken);
    function getFinalizationTime() public view returns (uint256);
    function getInitialReporter() public view returns (IInitialReporter);
    function getDesignatedReportingEndTime() public view returns (uint256);
    function getValidityBondAttoCash() public view returns (uint256);
    function affiliateFeeDivisor() external view returns (uint256);
    function getNumParticipants() public view returns (uint256);
    function getDisputePacingOn() public view returns (bool);
    function deriveMarketCreatorFeeAmount(uint256 _amount) public view returns (uint256);
    function recordMarketCreatorFees(uint256 _marketCreatorFees, address _sourceAccount, bytes32 _fingerprint) public returns (bool);
    function isContainerForReportingParticipant(IReportingParticipant _reportingParticipant) public view returns (bool);
    function isFinalizedAsInvalid() public view returns (bool);
    function finalize() public returns (bool);
    function isFinalized() public view returns (bool);
    function getOpenInterest() public view returns (uint256);
}

contract IReportingParticipant {
    function getStake() public view returns (uint256);
    function getPayoutDistributionHash() public view returns (bytes32);
    function liquidateLosing() public;
    function redeem(address _redeemer) public returns (bool);
    function isDisavowed() public view returns (bool);
    function getPayoutNumerator(uint256 _outcome) public view returns (uint256);
    function getPayoutNumerators() public view returns (uint256[] memory);
    function getMarket() public view returns (IMarket);
    function getSize() public view returns (uint256);
}

contract IDisputeCrowdsourcer is IReportingParticipant, IERC20 {
    function initialize(IAugur _augur, IMarket market, uint256 _size, bytes32 _payoutDistributionHash, uint256[] memory _payoutNumerators, uint256 _crowdsourcerGeneration) public;
    function contribute(address _participant, uint256 _amount, bool _overload) public returns (uint256);
    function setSize(uint256 _size) public;
    function getRemainingToFill() public view returns (uint256);
    function correctSize() public returns (bool);
    function getCrowdsourcerGeneration() public view returns (uint256);
}

contract IInitialReporter is IReportingParticipant, IOwnable {
    function initialize(IAugur _augur, IMarket _market, address _designatedReporter) public;
    function report(address _reporter, bytes32 _payoutDistributionHash, uint256[] memory _payoutNumerators, uint256 _initialReportStake) public;
    function designatedReporterShowed() public view returns (bool);
    function initialReporterWasCorrect() public view returns (bool);
    function getDesignatedReporter() public view returns (address);
    function getReportTimestamp() public view returns (uint256);
    function migrateToNewUniverse(address _designatedReporter) public;
    function returnRepFromDisavow() public;
}

contract IReputationToken is IERC20 {
    function migrateOutByPayout(uint256[] memory _payoutNumerators, uint256 _attotokens) public returns (bool);
    function migrateIn(address _reporter, uint256 _attotokens) public returns (bool);
    function trustedReportingParticipantTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function trustedMarketTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function trustedUniverseTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function trustedDisputeWindowTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function getUniverse() public view returns (IUniverse);
    function getTotalMigrated() public view returns (uint256);
    function getTotalTheoreticalSupply() public view returns (uint256);
    function mintForReportingParticipant(uint256 _amountMigrated) public returns (bool);
}

contract IShareToken is ITyped, IERC1155 {
    function initialize(IAugur _augur) external;
    function initializeMarket(IMarket _market, uint256 _numOutcomes, uint256 _numTicks) public;
    function unsafeTransferFrom(address _from, address _to, uint256 _id, uint256 _value) public;
    function unsafeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _values) public;
    function claimTradingProceeds(IMarket _market, address _shareHolder, bytes32 _fingerprint) external returns (uint256[] memory _outcomeFees);
    function getMarket(uint256 _tokenId) external view returns (IMarket);
    function getOutcome(uint256 _tokenId) external view returns (uint256);
    function getTokenId(IMarket _market, uint256 _outcome) public pure returns (uint256 _tokenId);
    function getTokenIds(IMarket _market, uint256[] memory _outcomes) public pure returns (uint256[] memory _tokenIds);
    function buyCompleteSets(IMarket _market, address _account, uint256 _amount) external returns (bool);
    function buyCompleteSetsForTrade(IMarket _market, uint256 _amount, uint256 _longOutcome, address _longRecipient, address _shortRecipient) external returns (bool);
    function sellCompleteSets(IMarket _market, address _holder, address _recipient, uint256 _amount, bytes32 _fingerprint) external returns (uint256 _creatorFee, uint256 _reportingFee);
    function sellCompleteSetsForTrade(IMarket _market, uint256 _outcome, uint256 _amount, address _shortParticipant, address _longParticipant, address _shortRecipient, address _longRecipient, uint256 _price, address _sourceAccount, bytes32 _fingerprint) external returns (uint256 _creatorFee, uint256 _reportingFee);
    function totalSupplyForMarketOutcome(IMarket _market, uint256 _outcome) public view returns (uint256);
    function balanceOfMarketOutcome(IMarket _market, uint256 _outcome, address _account) public view returns (uint256);
    function lowestBalanceOfMarketOutcomes(IMarket _market, uint256[] memory _outcomes, address _account) public view returns (uint256);
}

contract IUniverse {
    function creationTime() external view returns (uint256);
    function marketBalance(address) external view returns (uint256);

    function fork() public returns (bool);
    function updateForkValues() public returns (bool);
    function getParentUniverse() public view returns (IUniverse);
    function createChildUniverse(uint256[] memory _parentPayoutNumerators) public returns (IUniverse);
    function getChildUniverse(bytes32 _parentPayoutDistributionHash) public view returns (IUniverse);
    function getReputationToken() public view returns (IV2ReputationToken);
    function getForkingMarket() public view returns (IMarket);
    function getForkEndTime() public view returns (uint256);
    function getForkReputationGoal() public view returns (uint256);
    function getParentPayoutDistributionHash() public view returns (bytes32);
    function getDisputeRoundDurationInSeconds(bool _initial) public view returns (uint256);
    function getOrCreateDisputeWindowByTimestamp(uint256 _timestamp, bool _initial) public returns (IDisputeWindow);
    function getOrCreateCurrentDisputeWindow(bool _initial) public returns (IDisputeWindow);
    function getOrCreateNextDisputeWindow(bool _initial) public returns (IDisputeWindow);
    function getOrCreatePreviousDisputeWindow(bool _initial) public returns (IDisputeWindow);
    function getOpenInterestInAttoCash() public view returns (uint256);
    function getTargetRepMarketCapInAttoCash() public view returns (uint256);
    function getOrCacheValidityBond() public returns (uint256);
    function getOrCacheDesignatedReportStake() public returns (uint256);
    function getOrCacheDesignatedReportNoShowBond() public returns (uint256);
    function getOrCacheMarketRepBond() public returns (uint256);
    function getOrCacheReportingFeeDivisor() public returns (uint256);
    function getDisputeThresholdForFork() public view returns (uint256);
    function getDisputeThresholdForDisputePacing() public view returns (uint256);
    function getInitialReportMinValue() public view returns (uint256);
    function getPayoutNumerators() public view returns (uint256[] memory);
    function getReportingFeeDivisor() public view returns (uint256);
    function getPayoutNumerator(uint256 _outcome) public view returns (uint256);
    function getWinningChildPayoutNumerator(uint256 _outcome) public view returns (uint256);
    function isOpenInterestCash(address) public view returns (bool);
    function isForkingMarket() public view returns (bool);
    function getCurrentDisputeWindow(bool _initial) public view returns (IDisputeWindow);
    function getDisputeWindowStartTimeAndDuration(uint256 _timestamp, bool _initial) public view returns (uint256, uint256);
    function isParentOf(IUniverse _shadyChild) public view returns (bool);
    function updateTentativeWinningChildUniverse(bytes32 _parentPayoutDistributionHash) public returns (bool);
    function isContainerForDisputeWindow(IDisputeWindow _shadyTarget) public view returns (bool);
    function isContainerForMarket(IMarket _shadyTarget) public view returns (bool);
    function isContainerForReportingParticipant(IReportingParticipant _reportingParticipant) public view returns (bool);
    function migrateMarketOut(IUniverse _destinationUniverse) public returns (bool);
    function migrateMarketIn(IMarket _market, uint256 _cashBalance, uint256 _marketOI) public returns (bool);
    function decrementOpenInterest(uint256 _amount) public returns (bool);
    function decrementOpenInterestFromMarket(IMarket _market) public returns (bool);
    function incrementOpenInterest(uint256 _amount) public returns (bool);
    function getWinningChildUniverse() public view returns (IUniverse);
    function isForking() public view returns (bool);
    function deposit(address _sender, uint256 _amount, address _market) public returns (bool);
    function withdraw(address _recipient, uint256 _amount, address _market) public returns (bool);
    function createScalarMarket(uint256 _endTime, uint256 _feePerCashInAttoCash, IAffiliateValidator _affiliateValidator, uint256 _affiliateFeeDivisor, address _designatedReporterAddress, int256[] memory _prices, uint256 _numTicks, string memory _extraInfo) public returns (IMarket _newMarket);
}

contract IV2ReputationToken is IReputationToken {
    function parentUniverse() external returns (IUniverse);
    function burnForMarket(uint256 _amountToBurn) public returns (bool);
    function mintForWarpSync(uint256 _amountToMint, address _target) public returns (bool);
}

library Reporting {
    uint256 private constant DESIGNATED_REPORTING_DURATION_SECONDS = 1 days;
    uint256 private constant DISPUTE_ROUND_DURATION_SECONDS = 7 days;
    uint256 private constant INITIAL_DISPUTE_ROUND_DURATION_SECONDS = 1 days;
    uint256 private constant DISPUTE_WINDOW_BUFFER_SECONDS = 1 hours;
    uint256 private constant FORK_DURATION_SECONDS = 60 days;

    uint256 private constant BASE_MARKET_DURATION_MAXIMUM = 30 days; // A market of 30 day length can always be created
    uint256 private constant UPGRADE_CADENCE = 365 days;
    uint256 private constant INITIAL_UPGRADE_TIMESTAMP = 1627776000; // Aug 1st 2021

    uint256 private constant INITIAL_REP_SUPPLY = 11 * 10 ** 6 * 10 ** 18; // 11 Million REP

    uint256 private constant AFFILIATE_SOURCE_CUT_DIVISOR = 5; // The trader gets 20% of the affiliate fee when an affiliate fee is taken

    uint256 private constant DEFAULT_VALIDITY_BOND = 10 ether; // 10 Cash (Dai)
    uint256 private constant VALIDITY_BOND_FLOOR = 10 ether; // 10 Cash (Dai)
    uint256 private constant DEFAULT_REPORTING_FEE_DIVISOR = 10000; // .01% fees
    uint256 private constant MAXIMUM_REPORTING_FEE_DIVISOR = 10000; // Minimum .01% fees
    uint256 private constant MINIMUM_REPORTING_FEE_DIVISOR = 3; // Maximum 33.3~% fees. Note than anything less than a value of 2 here will likely result in bugs such as divide by 0 cases.

    uint256 private constant TARGET_INVALID_MARKETS_DIVISOR = 100; // 1% of markets are expected to be invalid
    uint256 private constant TARGET_INCORRECT_DESIGNATED_REPORT_MARKETS_DIVISOR = 100; // 1% of markets are expected to have an incorrect designate report
    uint256 private constant TARGET_DESIGNATED_REPORT_NO_SHOWS_DIVISOR = 20; // 5% of markets are expected to have a no show
    uint256 private constant TARGET_REP_MARKET_CAP_MULTIPLIER = 5; // We multiply and divide by constants since we may want to multiply by a fractional amount

    uint256 private constant FORK_THRESHOLD_DIVISOR = 40; // 2.5% of the total REP supply being filled in a single dispute bond will trigger a fork
    uint256 private constant MAXIMUM_DISPUTE_ROUNDS = 20; // We ensure that after 20 rounds of disputes a fork will occur
    uint256 private constant MINIMUM_SLOW_ROUNDS = 8; // We ensure that at least 8 dispute rounds take DISPUTE_ROUND_DURATION_SECONDS+ seconds to complete until the next round begins

    function getDesignatedReportingDurationSeconds() internal pure returns (uint256) { return DESIGNATED_REPORTING_DURATION_SECONDS; }
    function getInitialDisputeRoundDurationSeconds() internal pure returns (uint256) { return INITIAL_DISPUTE_ROUND_DURATION_SECONDS; }
    function getDisputeWindowBufferSeconds() internal pure returns (uint256) { return DISPUTE_WINDOW_BUFFER_SECONDS; }
    function getDisputeRoundDurationSeconds() internal pure returns (uint256) { return DISPUTE_ROUND_DURATION_SECONDS; }
    function getForkDurationSeconds() internal pure returns (uint256) { return FORK_DURATION_SECONDS; }
    function getBaseMarketDurationMaximum() internal pure returns (uint256) { return BASE_MARKET_DURATION_MAXIMUM; }
    function getUpgradeCadence() internal pure returns (uint256) { return UPGRADE_CADENCE; }
    function getInitialUpgradeTimestamp() internal pure returns (uint256) { return INITIAL_UPGRADE_TIMESTAMP; }
    function getDefaultValidityBond() internal pure returns (uint256) { return DEFAULT_VALIDITY_BOND; }
    function getValidityBondFloor() internal pure returns (uint256) { return VALIDITY_BOND_FLOOR; }
    function getTargetInvalidMarketsDivisor() internal pure returns (uint256) { return TARGET_INVALID_MARKETS_DIVISOR; }
    function getTargetIncorrectDesignatedReportMarketsDivisor() internal pure returns (uint256) { return TARGET_INCORRECT_DESIGNATED_REPORT_MARKETS_DIVISOR; }
    function getTargetDesignatedReportNoShowsDivisor() internal pure returns (uint256) { return TARGET_DESIGNATED_REPORT_NO_SHOWS_DIVISOR; }
    function getTargetRepMarketCapMultiplier() internal pure returns (uint256) { return TARGET_REP_MARKET_CAP_MULTIPLIER; }
    function getMaximumReportingFeeDivisor() internal pure returns (uint256) { return MAXIMUM_REPORTING_FEE_DIVISOR; }
    function getMinimumReportingFeeDivisor() internal pure returns (uint256) { return MINIMUM_REPORTING_FEE_DIVISOR; }
    function getDefaultReportingFeeDivisor() internal pure returns (uint256) { return DEFAULT_REPORTING_FEE_DIVISOR; }
    function getInitialREPSupply() internal pure returns (uint256) { return INITIAL_REP_SUPPLY; }
    function getAffiliateSourceCutDivisor() internal pure returns (uint256) { return AFFILIATE_SOURCE_CUT_DIVISOR; }
    function getForkThresholdDivisor() internal pure returns (uint256) { return FORK_THRESHOLD_DIVISOR; }
    function getMaximumDisputeRounds() internal pure returns (uint256) { return MAXIMUM_DISPUTE_ROUNDS; }
    function getMinimumSlowRounds() internal pure returns (uint256) { return MINIMUM_SLOW_ROUNDS; }
}

contract IAugurTrading {
    function lookup(bytes32 _key) public view returns (address);
    function logProfitLossChanged(IMarket _market, address _account, uint256 _outcome, int256 _netPosition, uint256 _avgPrice, int256 _realizedProfit, int256 _frozenFunds, int256 _realizedCost) public returns (bool);
    function logOrderCreated(IUniverse _universe, bytes32 _orderId, bytes32 _tradeGroupId) public returns (bool);
    function logOrderCanceled(IUniverse _universe, IMarket _market, address _creator, uint256 _tokenRefund, uint256 _sharesRefund, bytes32 _orderId) public returns (bool);
    function logOrderFilled(IUniverse _universe, address _creator, address _filler, uint256 _price, uint256 _fees, uint256 _amountFilled, bytes32 _orderId, bytes32 _tradeGroupId) public returns (bool);
    function logMarketVolumeChanged(IUniverse _universe, address _market, uint256 _volume, uint256[] memory _outcomeVolumes, uint256 _totalTrades) public returns (bool);
    function logZeroXOrderFilled(IUniverse _universe, IMarket _market, bytes32 _orderHash, bytes32 _tradeGroupId, uint8 _orderType, address[] memory _addressData, uint256[] memory _uint256Data) public returns (bool);
    function logZeroXOrderCanceled(address _universe, address _market, address _account, uint256 _outcome, uint256 _price, uint256 _amount, uint8 _type, bytes32 _orderHash) public;
}

contract IOrders {
    function saveOrder(uint256[] calldata _uints, bytes32[] calldata _bytes32s, Order.Types _type, IMarket _market, address _sender) external returns (bytes32 _orderId);
    function removeOrder(bytes32 _orderId) external returns (bool);
    function getMarket(bytes32 _orderId) public view returns (IMarket);
    function getOrderType(bytes32 _orderId) public view returns (Order.Types);
    function getOutcome(bytes32 _orderId) public view returns (uint256);
    function getAmount(bytes32 _orderId) public view returns (uint256);
    function getPrice(bytes32 _orderId) public view returns (uint256);
    function getOrderCreator(bytes32 _orderId) public view returns (address);
    function getOrderSharesEscrowed(bytes32 _orderId) public view returns (uint256);
    function getOrderMoneyEscrowed(bytes32 _orderId) public view returns (uint256);
    function getOrderDataForCancel(bytes32 _orderId) public view returns (uint256, uint256, Order.Types, IMarket, uint256, address);
    function getOrderDataForLogs(bytes32 _orderId) public view returns (Order.Types, address[] memory _addressData, uint256[] memory _uint256Data);
    function getBetterOrderId(bytes32 _orderId) public view returns (bytes32);
    function getWorseOrderId(bytes32 _orderId) public view returns (bytes32);
    function getBestOrderId(Order.Types _type, IMarket _market, uint256 _outcome) public view returns (bytes32);
    function getWorstOrderId(Order.Types _type, IMarket _market, uint256 _outcome) public view returns (bytes32);
    function getLastOutcomePrice(IMarket _market, uint256 _outcome) public view returns (uint256);
    function getOrderId(Order.Types _type, IMarket _market, uint256 _amount, uint256 _price, address _sender, uint256 _blockNumber, uint256 _outcome, uint256 _moneyEscrowed, uint256 _sharesEscrowed) public pure returns (bytes32);
    function getTotalEscrowed(IMarket _market) public view returns (uint256);
    function isBetterPrice(Order.Types _type, uint256 _price, bytes32 _orderId) public view returns (bool);
    function isWorsePrice(Order.Types _type, uint256 _price, bytes32 _orderId) public view returns (bool);
    function assertIsNotBetterPrice(Order.Types _type, uint256 _price, bytes32 _betterOrderId) public view returns (bool);
    function assertIsNotWorsePrice(Order.Types _type, uint256 _price, bytes32 _worseOrderId) public returns (bool);
    function recordFillOrder(bytes32 _orderId, uint256 _sharesFilled, uint256 _tokensFilled, uint256 _fill) external returns (bool);
    function setPrice(IMarket _market, uint256 _outcome, uint256 _price) external returns (bool);
}

library Order {
    using SafeMathUint256 for uint256;

    enum Types {
        Bid, Ask
    }

    enum TradeDirections {
        Long, Short
    }

    struct Data {
        // Contracts
        IMarket market;
        IAugur augur;
        IAugurTrading augurTrading;
        IShareToken shareToken;
        ICash cash;

        // Order
        bytes32 id;
        address creator;
        uint256 outcome;
        Order.Types orderType;
        uint256 amount;
        uint256 price;
        uint256 sharesEscrowed;
        uint256 moneyEscrowed;
        bytes32 betterOrderId;
        bytes32 worseOrderId;
    }

    function create(IAugur _augur, IAugurTrading _augurTrading, address _creator, uint256 _outcome, Order.Types _type, uint256 _attoshares, uint256 _price, IMarket _market, bytes32 _betterOrderId, bytes32 _worseOrderId) internal view returns (Data memory) {
        require(_outcome < _market.getNumberOfOutcomes(), "Order.create: Outcome is not within market range");
        require(_price != 0, "Order.create: Price may not be 0");
        require(_price < _market.getNumTicks(), "Order.create: Price is outside of market range");
        require(_attoshares > 0, "Order.create: Cannot use amount of 0");
        require(_creator != address(0), "Order.create: Creator is 0x0");

        IShareToken _shareToken = IShareToken(_augur.lookup("ShareToken"));

        return Data({
            market: _market,
            augur: _augur,
            augurTrading: _augurTrading,
            shareToken: _shareToken,
            cash: ICash(_augur.lookup("Cash")),
            id: 0,
            creator: _creator,
            outcome: _outcome,
            orderType: _type,
            amount: _attoshares,
            price: _price,
            sharesEscrowed: 0,
            moneyEscrowed: 0,
            betterOrderId: _betterOrderId,
            worseOrderId: _worseOrderId
        });
    }

    //
    // "public" functions
    //

    function getOrderId(Order.Data memory _orderData, IOrders _orders) internal view returns (bytes32) {
        if (_orderData.id == bytes32(0)) {
            bytes32 _orderId = calculateOrderId(_orderData.orderType, _orderData.market, _orderData.amount, _orderData.price, _orderData.creator, block.number, _orderData.outcome, _orderData.moneyEscrowed, _orderData.sharesEscrowed);
            require(_orders.getAmount(_orderId) == 0, "Order.getOrderId: New order had amount. This should not be possible");
            _orderData.id = _orderId;
        }
        return _orderData.id;
    }

    function calculateOrderId(Order.Types _type, IMarket _market, uint256 _amount, uint256 _price, address _sender, uint256 _blockNumber, uint256 _outcome, uint256 _moneyEscrowed, uint256 _sharesEscrowed) internal pure returns (bytes32) {
        return sha256(abi.encodePacked(_type, _market, _amount, _price, _sender, _blockNumber, _outcome, _moneyEscrowed, _sharesEscrowed));
    }

    function getOrderTradingTypeFromMakerDirection(Order.TradeDirections _creatorDirection) internal pure returns (Order.Types) {
        return (_creatorDirection == Order.TradeDirections.Long) ? Order.Types.Bid : Order.Types.Ask;
    }

    function getOrderTradingTypeFromFillerDirection(Order.TradeDirections _fillerDirection) internal pure returns (Order.Types) {
        return (_fillerDirection == Order.TradeDirections.Long) ? Order.Types.Ask : Order.Types.Bid;
    }

    function saveOrder(Order.Data memory _orderData, bytes32 _tradeGroupId, IOrders _orders) internal returns (bytes32) {
        getOrderId(_orderData, _orders);
        uint256[] memory _uints = new uint256[](5);
        _uints[0] = _orderData.amount;
        _uints[1] = _orderData.price;
        _uints[2] = _orderData.outcome;
        _uints[3] = _orderData.moneyEscrowed;
        _uints[4] = _orderData.sharesEscrowed;
        bytes32[] memory _bytes32s = new bytes32[](4);
        _bytes32s[0] = _orderData.betterOrderId;
        _bytes32s[1] = _orderData.worseOrderId;
        _bytes32s[2] = _tradeGroupId;
        _bytes32s[3] = _orderData.id;
        return _orders.saveOrder(_uints, _bytes32s, _orderData.orderType, _orderData.market, _orderData.creator);
    }
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

contract IRepSymbol {
    function getRepSymbol(address _augur, address _universe) external view returns (string memory);
}

contract ReputationToken is VariableSupplyToken, IV2ReputationToken {
    using SafeMathUint256 for uint256;

    string constant public name = "Reputation";
    IUniverse internal universe;
    IUniverse public parentUniverse;
    uint256 internal totalMigrated;
    IERC20 public legacyRepToken;
    IAugur public augur;
    address public warpSync;

    constructor(IAugur _augur, IUniverse _universe, IUniverse _parentUniverse) public {
        augur = _augur;
        universe = _universe;
        parentUniverse = _parentUniverse;
        warpSync = _augur.lookup("WarpSync");
        legacyRepToken = IERC20(_augur.lookup("LegacyReputationToken"));
        require(warpSync != address(0));
        require(legacyRepToken != IERC20(0));
    }

    function symbol() public view returns (string memory) {
        return IRepSymbol(augur.lookup("RepSymbol")).getRepSymbol(address(augur), address(universe));
    }

    /**
     * @notice Migrate to a Child Universe by indicating the Market payout associated with it
     * @param _payoutNumerators The array of payouts for the market associated with the desired universe
     * @param _attotokens The amount of tokens to migrate
     * @return Bool True
     */
    function migrateOutByPayout(uint256[] memory _payoutNumerators, uint256 _attotokens) public returns (bool) {
        require(_attotokens > 0);
        IUniverse _destinationUniverse = universe.createChildUniverse(_payoutNumerators);
        IReputationToken _destination = _destinationUniverse.getReputationToken();
        burn(msg.sender, _attotokens);
        _destination.migrateIn(msg.sender, _attotokens);
        return true;
    }

    function migrateIn(address _reporter, uint256 _attotokens) public returns (bool) {
        IUniverse _parentUniverse = parentUniverse;
        require(ReputationToken(msg.sender) == _parentUniverse.getReputationToken());
        require(augur.getTimestamp() < _parentUniverse.getForkEndTime());
        mint(_reporter, _attotokens);
        totalMigrated += _attotokens;
        // Update the fork tentative winner and finalize if we can
        if (!_parentUniverse.getForkingMarket().isFinalized()) {
            _parentUniverse.updateTentativeWinningChildUniverse(universe.getParentPayoutDistributionHash());
        }
        return true;
    }

    function mintForReportingParticipant(uint256 _amountMigrated) public returns (bool) {
        IReportingParticipant _reportingParticipant = IReportingParticipant(msg.sender);
        require(parentUniverse.isContainerForReportingParticipant(_reportingParticipant));
        // simulate a 40% ROI which would have occured during a normal dispute had this participant's outcome won the dispute
        uint256 _bonus = _amountMigrated.mul(2) / 5;
        mint(address(_reportingParticipant), _bonus);
        return true;
    }

    function mintForWarpSync(uint256 _amountToMint, address _target) public returns (bool) {
        require(warpSync == msg.sender);
        mint(_target, _amountToMint);
        universe.updateForkValues();
        return true;
    }

    function burnForMarket(uint256 _amountToBurn) public returns (bool) {
        require(universe.isContainerForMarket(IMarket(msg.sender)));
        burn(msg.sender, _amountToBurn);
        return true;
    }

    function trustedUniverseTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool) {
        require(IUniverse(msg.sender) == universe);
        _transfer(_source, _destination, _attotokens);
        return true;
    }

    function trustedMarketTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool) {
        require(universe.isContainerForMarket(IMarket(msg.sender)));
        _transfer(_source, _destination, _attotokens);
        return true;
    }

    function trustedReportingParticipantTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool) {
        require(universe.isContainerForReportingParticipant(IReportingParticipant(msg.sender)));
        _transfer(_source, _destination, _attotokens);
        return true;
    }

    function trustedDisputeWindowTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool) {
        require(universe.isContainerForDisputeWindow(IDisputeWindow(msg.sender)));
        _transfer(_source, _destination, _attotokens);
        return true;
    }

    function assertReputationTokenIsLegitChild(IReputationToken _shadyReputationToken) private view {
        IUniverse _universe = _shadyReputationToken.getUniverse();
        require(universe.isParentOf(_universe));
        require(_universe.getReputationToken() == _shadyReputationToken);
    }

    /**
     * @return The universe associated with this Reputation Token
     */
    function getUniverse() public view returns (IUniverse) {
        return universe;
    }

    /**
     * @return The total amount of parent REP migrated into this version of REP
     */
    function getTotalMigrated() public view returns (uint256) {
        return totalMigrated;
    }

    /**
     * @return The V1 Rep token
     */
    function getLegacyRepToken() public view returns (IERC20) {
        return legacyRepToken;
    }

    /**
     * @return The maximum possible total supply for this version of REP.
     */
    function getTotalTheoreticalSupply() public view returns (uint256) {
        uint256 _totalSupply = totalSupply;
        if (parentUniverse == IUniverse(0)) {
            return _totalSupply.add(legacyRepToken.totalSupply()).sub(legacyRepToken.balanceOf(address(1))).sub(legacyRepToken.balanceOf(address(0)));
        } else if (augur.getTimestamp() >= parentUniverse.getForkEndTime()) {
            return _totalSupply;
        } else {
            return _totalSupply + parentUniverse.getReputationToken().getTotalTheoreticalSupply();
        }
    }

    function onTokenTransfer(address _from, address _to, uint256 _value) internal {
        augur.logReputationTokensTransferred(universe, _from, _to, _value, balances[_from], balances[_to]);
    }

    function onMint(address _target, uint256 _amount) internal {
        augur.logReputationTokensMinted(universe, _target, _amount, totalSupply, balances[_target]);
    }

    function onBurn(address _target, uint256 _amount) internal {
        augur.logReputationTokensBurned(universe, _target, _amount, totalSupply, balances[_target]);
    }

    /**
     * @notice Migrate V1 REP to V2
     * @dev This can only be done for the Genesis Universe in V2. If a fork occurs and the window ends V1 REP is stuck in V1 forever
     * @return Bool True
     */
    function migrateFromLegacyReputationToken() public returns (bool) {
        require(parentUniverse == IUniverse(0));
        uint256 _legacyBalance = legacyRepToken.balanceOf(msg.sender);
        require(legacyRepToken.transferFrom(msg.sender, address(1), _legacyBalance));
        mint(msg.sender, _legacyBalance);
        return true;
    }
}

Settings
{
  "remappings": [
    "ROOT=/home/achapman/augur/packages/augur-core/src/contracts//"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200,
    "details": {
      "yul": true,
      "deduplicate": true,
      "cse": true,
      "constantOptimizer": true
    }
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IAugur","name":"_augur","type":"address"},{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"contract IUniverse","name":"_parentUniverse","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"augur","outputs":[{"internalType":"contract IAugur","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amountToBurn","type":"uint256"}],"name":"burnForMarket","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getLegacyRepToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTotalMigrated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTotalTheoreticalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getUniverse","outputs":[{"internalType":"contract IUniverse","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"legacyRepToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"migrateFromLegacyReputationToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_reporter","type":"address"},{"internalType":"uint256","name":"_attotokens","type":"uint256"}],"name":"migrateIn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256[]","name":"_payoutNumerators","type":"uint256[]"},{"internalType":"uint256","name":"_attotokens","type":"uint256"}],"name":"migrateOutByPayout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amountMigrated","type":"uint256"}],"name":"mintForReportingParticipant","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amountToMint","type":"uint256"},{"internalType":"address","name":"_target","type":"address"}],"name":"mintForWarpSync","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"parentUniverse","outputs":[{"internalType":"contract IUniverse","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_source","type":"address"},{"internalType":"address","name":"_destination","type":"address"},{"internalType":"uint256","name":"_attotokens","type":"uint256"}],"name":"trustedDisputeWindowTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_source","type":"address"},{"internalType":"address","name":"_destination","type":"address"},{"internalType":"uint256","name":"_attotokens","type":"uint256"}],"name":"trustedMarketTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_source","type":"address"},{"internalType":"address","name":"_destination","type":"address"},{"internalType":"uint256","name":"_attotokens","type":"uint256"}],"name":"trustedReportingParticipantTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_source","type":"address"},{"internalType":"address","name":"_destination","type":"address"},{"internalType":"uint256","name":"_attotokens","type":"uint256"}],"name":"trustedUniverseTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"warpSync","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620020ac380380620020ac833981810160405260608110156200003757600080fd5b508051602080830151604093840151600780546001600160a01b038087166001600160a01b03199283168117909355600380548287169084161790556004805491851691909216178155865163f39ec1f760e01b8152675761727053796e6360c01b918101919091529551949592949193909263f39ec1f79260248083019392829003018186803b158015620000cc57600080fd5b505afa158015620000e1573d6000803e3d6000fd5b505050506040513d6020811015620000f857600080fd5b5051600880546001600160a01b0319166001600160a01b039283161790556040805163f39ec1f760e01b81527f4c656761637952657075746174696f6e546f6b656e0000000000000000000000600482015290519185169163f39ec1f791602480820192602092909190829003018186803b1580156200017757600080fd5b505afa1580156200018c573d6000803e3d6000fd5b505050506040513d6020811015620001a357600080fd5b5051600680546001600160a01b0319166001600160a01b0392831617905560085416620001cf57600080fd5b6006546001600160a01b0316620001e557600080fd5b505050611eb480620001f86000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c8063774692751161010f578063ae3816ee116100a2578063dd62ed3e11610071578063dd62ed3e146105f6578063e1897b5914610624578063f22b258a14610650578063fe98184d14610686576101e5565b8063ae3816ee1461057e578063b873e9a71461059b578063d5466777146105d1578063db054134146105d9576101e5565b806395d89b41116100de57806395d89b41146104f2578063a0c1ca34146104fa578063a457c2d714610526578063a9059cbb14610552576101e5565b806377469275146104d25780637a0d8f8a146104da578063870c426d146104e257806391d76bbb146104ea576101e5565b8063313ce567116101875780635bd5ea71116101565780635bd5ea711461046657806370a082311461046e578063721bb1701461049457806375d9aa1a146104ca576101e5565b8063313ce56714610349578063395093511461036757806355b6ed5c146103935780635b66876a146103c1576101e5565b8063183636c5116101c3578063183636c5146102c1578063238d3590146102e557806323b872dd146102ed57806327e235e314610323576101e5565b806306fdde03146101ea578063095ea7b31461026757806318160ddd146102a7575b600080fd5b6101f26106bc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561022c578181015183820152602001610214565b50505050905090810190601f1680156102595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102936004803603604081101561027d57600080fd5b506001600160a01b0381351690602001356106e2565b604080519115158252519081900360200190f35b6102af6106f9565b60408051918252519081900360200190f35b6102c96106ff565b604080516001600160a01b039092168252519081900360200190f35b6102af61070e565b6102936004803603606081101561030357600080fd5b506001600160a01b03813581169160208101359091169060400135610a75565b6102af6004803603602081101561033957600080fd5b50356001600160a01b0316610acc565b610351610ade565b6040805160ff9092168252519081900360200190f35b6102936004803603604081101561037d57600080fd5b506001600160a01b038135169060200135610ae3565b6102af600480360360408110156103a957600080fd5b506001600160a01b0381358116916020013516610b1f565b610293600480360360408110156103d757600080fd5b8101906020810181356401000000008111156103f257600080fd5b82018360208201111561040457600080fd5b8035906020019184602083028401116401000000008311171561042657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250610b3c915050565b6102c9610d00565b6102af6004803603602081101561048457600080fd5b50356001600160a01b0316610d0f565b610293600480360360608110156104aa57600080fd5b506001600160a01b03813581169160208101359091169060400135610d2a565b610293610db5565b6102c9610eeb565b6102c9610efa565b6102c9610f09565b6102af610f18565b6101f2610f1e565b6102936004803603604081101561051057600080fd5b506001600160a01b0381351690602001356110ea565b6102936004803603604081101561053c57600080fd5b506001600160a01b03813516906020013561143f565b6102936004803603604081101561056857600080fd5b506001600160a01b03813516906020013561147b565b6102936004803603602081101561059457600080fd5b5035611488565b610293600480360360608110156105b157600080fd5b506001600160a01b03813581169160208101359091169060400135611512565b6102c961155d565b610293600480360360208110156105ef57600080fd5b503561156c565b6102af6004803603604081101561060c57600080fd5b506001600160a01b0381358116916020013516611623565b6102936004803603604081101561063a57600080fd5b50803590602001356001600160a01b031661164e565b6102936004803603606081101561066657600080fd5b506001600160a01b038135811691602081013590911690604001356116ed565b6102936004803603606081101561069c57600080fd5b506001600160a01b03813581169160208101359091169060400135611738565b6040518060400160405280600a8152602001692932b83aba30ba34b7b760b11b81525081565b60006106ef338484611752565b5060015b92915050565b60005481565b6004546001600160a01b031681565b600080546004546001600160a01b03166108a757600654604080516370a0823160e01b815260006004820152905161089f926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561076f57600080fd5b505afa158015610783573d6000803e3d6000fd5b505050506040513d602081101561079957600080fd5b5051600654604080516370a0823160e01b8152600160048201529051610893926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156107e857600080fd5b505afa1580156107fc573d6000803e3d6000fd5b505050506040513d602081101561081257600080fd5b5051600654604080516318160ddd60e01b81529051610893926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561085a57600080fd5b505afa15801561086e573d6000803e3d6000fd5b505050506040513d602081101561088457600080fd5b5051869063ffffffff61183e16565b9063ffffffff61185716565b915050610a72565b60048054604080516377e71ee560e01b815290516001600160a01b03909216926377e71ee5928282019260209290829003018186803b1580156108e957600080fd5b505afa1580156108fd573d6000803e3d6000fd5b505050506040513d602081101561091357600080fd5b505160075460408051630c4761ab60e11b815290516001600160a01b039092169163188ec35691600480820192602092909190829003018186803b15801561095a57600080fd5b505afa15801561096e573d6000803e3d6000fd5b505050506040513d602081101561098457600080fd5b505110610992579050610a72565b6004805460408051635c0483f960e11b815290516001600160a01b039092169263b80907f2928282019260209290829003018186803b1580156109d457600080fd5b505afa1580156109e8573d6000803e3d6000fd5b505050506040513d60208110156109fe57600080fd5b505160408051630238d35960e41b815290516001600160a01b039092169163238d359091600480820192602092909190829003018186803b158015610a4257600080fd5b505afa158015610a56573d6000803e3d6000fd5b505050506040513d6020811015610a6c57600080fd5b50510190505b90565b6000610a8284848461186c565b6001600160a01b038416600090815260026020908152604080832033808552925290912054610ac2918691610abd908663ffffffff61185716565b611752565b5060019392505050565b60016020526000908152604090205481565b601281565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916106ef918590610abd908663ffffffff61183e16565b600260209081526000928352604080842090915290825290205481565b6000808211610b4a57600080fd5b600354604051631d29b8bb60e11b81526020600482018181528651602484015286516000946001600160a01b031693633a5371769389939283926044019180860191028083838b5b83811015610baa578181015183820152602001610b92565b5050505090500192505050602060405180830381600087803b158015610bcf57600080fd5b505af1158015610be3573d6000803e3d6000fd5b505050506040513d6020811015610bf957600080fd5b505160408051635c0483f960e11b815290519192506000916001600160a01b0384169163b80907f2916004808301926020929190829003018186803b158015610c4157600080fd5b505afa158015610c55573d6000803e3d6000fd5b505050506040513d6020811015610c6b57600080fd5b50519050610c7933856119bb565b5060408051632830728d60e21b81523360048201526024810186905290516001600160a01b0383169163a0c1ca349160448083019260209291908290030181600087803b158015610cc957600080fd5b505af1158015610cdd573d6000803e3d6000fd5b505050506040513d6020811015610cf357600080fd5b5060019695505050505050565b6008546001600160a01b031681565b6001600160a01b031660009081526001602052604090205490565b600354604080516301ba1fa360e01b815233600482015290516000926001600160a01b0316916301ba1fa3916024808301926020929190829003018186803b158015610d7557600080fd5b505afa158015610d89573d6000803e3d6000fd5b505050506040513d6020811015610d9f57600080fd5b5051610daa57600080fd5b610ac284848461186c565b6004546000906001600160a01b031615610dce57600080fd5b600654604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610e1957600080fd5b505afa158015610e2d573d6000803e3d6000fd5b505050506040513d6020811015610e4357600080fd5b5051600654604080516323b872dd60e01b8152336004820152600160248201526044810184905290519293506001600160a01b03909116916323b872dd916064808201926020929091908290030181600087803b158015610ea357600080fd5b505af1158015610eb7573d6000803e3d6000fd5b505050506040513d6020811015610ecd57600080fd5b5051610ed857600080fd5b610ee233826119d1565b50600191505090565b6006546001600160a01b031690565b6007546001600160a01b031681565b6003546001600160a01b031690565b60055490565b6007546040805163f39ec1f760e01b81526814995c14de5b589bdb60ba1b600482015290516060926001600160a01b03169163f39ec1f7916024808301926020929190829003018186803b158015610f7557600080fd5b505afa158015610f89573d6000803e3d6000fd5b505050506040513d6020811015610f9f57600080fd5b50516007546003546040805163213b363960e21b81526001600160a01b03938416600482015291831660248301525191909216916384ecd8e4916044808301926000929190829003018186803b158015610ff857600080fd5b505afa15801561100c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561103557600080fd5b810190808051604051939291908464010000000082111561105557600080fd5b90830190602082018581111561106a57600080fd5b825164010000000081118282018810171561108457600080fd5b82525081516020918201929091019080838360005b838110156110b1578181015183820152602001611099565b50505050905090810190601f1680156110de5780820380516001836020036101000a031916815260200191505b50604052505050905090565b6004805460408051635c0483f960e11b815290516000936001600160a01b0390931692839263b80907f29281830192602092829003018186803b15801561113057600080fd5b505afa158015611144573d6000803e3d6000fd5b505050506040513d602081101561115a57600080fd5b50516001600160a01b0316331461117057600080fd5b806001600160a01b03166377e71ee56040518163ffffffff1660e01b815260040160206040518083038186803b1580156111a957600080fd5b505afa1580156111bd573d6000803e3d6000fd5b505050506040513d60208110156111d357600080fd5b505160075460408051630c4761ab60e11b815290516001600160a01b039092169163188ec35691600480820192602092909190829003018186803b15801561121a57600080fd5b505afa15801561122e573d6000803e3d6000fd5b505050506040513d602081101561124457600080fd5b50511061125057600080fd5b61125a84846119d1565b50600580548401905560408051631963b08360e31b815290516001600160a01b0383169163cb1d8418916004808301926020929190829003018186803b1580156112a357600080fd5b505afa1580156112b7573d6000803e3d6000fd5b505050506040513d60208110156112cd57600080fd5b505160408051638d4e408360e01b815290516001600160a01b0390921691638d4e408391600480820192602092909190829003018186803b15801561131157600080fd5b505afa158015611325573d6000803e3d6000fd5b505050506040513d602081101561133b57600080fd5b5051610ac257806001600160a01b031663f7095d9d600360009054906101000a90046001600160a01b03166001600160a01b031663c38c0fa76040518163ffffffff1660e01b815260040160206040518083038186803b15801561139e57600080fd5b505afa1580156113b2573d6000803e3d6000fd5b505050506040513d60208110156113c857600080fd5b5051604080516001600160e01b031960e085901b16815260048101929092525160248083019260209291908290030181600087803b15801561140957600080fd5b505af115801561141d573d6000803e3d6000fd5b505050506040513d602081101561143357600080fd5b50505060019392505050565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916106ef918590610abd908663ffffffff61185716565b60006106ef33848461186c565b60035460408051634fbf0dfb60e11b815233600482015290516000926001600160a01b031691639f7e1bf6916024808301926020929190829003018186803b1580156114d357600080fd5b505afa1580156114e7573d6000803e3d6000fd5b505050506040513d60208110156114fd57600080fd5b505161150857600080fd5b6106ef33836119bb565b6003546040805163f76514c760e01b815233600482015290516000926001600160a01b03169163f76514c7916024808301926020929190829003018186803b158015610d7557600080fd5b6006546001600160a01b031681565b600480546040805163f76514c760e01b8152339381018490529051600093926001600160a01b03169163f76514c7916024808301926020929190829003018186803b1580156115ba57600080fd5b505afa1580156115ce573d6000803e3d6000fd5b505050506040513d60208110156115e457600080fd5b50516115ef57600080fd5b6000600561160485600263ffffffff6119e716565b8161160b57fe5b04905061161882826119d1565b506001949350505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6008546000906001600160a01b0316331461166857600080fd5b61167282846119d1565b50600360009054906101000a90046001600160a01b03166001600160a01b0316639ab448d96040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156116c357600080fd5b505af11580156116d7573d6000803e3d6000fd5b505050506040513d602081101561161857600080fd5b60035460408051634fbf0dfb60e11b815233600482015290516000926001600160a01b031691639f7e1bf6916024808301926020929190829003018186803b158015610d7557600080fd5b6003546000906001600160a01b03163314610daa57600080fd5b6001600160a01b0383166117975760405162461bcd60e51b8152600401808060200182810382526024815260200180611e5c6024913960400191505060405180910390fd5b6001600160a01b0382166117dc5760405162461bcd60e51b8152600401808060200182810382526022815260200180611df46022913960400191505060405180910390fd5b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60008282018381101561185057600080fd5b9392505050565b60008282111561186657600080fd5b50900390565b6001600160a01b0383166118b15760405162461bcd60e51b8152600401808060200182810382526025815260200180611e376025913960400191505060405180910390fd5b6001600160a01b0382166118f65760405162461bcd60e51b8152600401808060200182810382526023815260200180611dd16023913960400191505060405180910390fd5b6001600160a01b03831660009081526001602052604090205461191f908263ffffffff61185716565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611954908263ffffffff61183e16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a36119b6838383611a0e565b505050565b60006119c78383611acc565b6106ef8383611baf565b60006119dd8383611c5f565b6106ef8383611d50565b6000826119f6575060006106f3565b82820282848281611a0357fe5b041461185057600080fd5b6007546003546001600160a01b038581166000818152600160209081526040808320548986168085528285205483516370e33c7f60e11b815298881660048a01526024890196909652604488015260648701899052608487015260a48601939093529151929094169363e1c678fe9360c48082019492918390030190829087803b158015611a9b57600080fd5b505af1158015611aaf573d6000803e3d6000fd5b505050506040513d6020811015611ac557600080fd5b5050505050565b6001600160a01b038216611b115760405162461bcd60e51b8152600401808060200182810382526021815260200180611e166021913960400191505060405180910390fd5b6001600160a01b038216600090815260016020526040902054611b3a908263ffffffff61185716565b6001600160a01b03831660009081526001602052604081209190915554611b67908263ffffffff61185716565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b600754600354600080546001600160a01b03868116808452600160209081526040808620548151631efee74160e11b81529785166004890152602488019390935260448701899052606487019490945260848601919091529151941693633dfdce829360a480820194918390030190829087803b158015611c2f57600080fd5b505af1158015611c43573d6000803e3d6000fd5b505050506040513d6020811015611c5957600080fd5b50505050565b6001600160a01b038216611cba576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600054611ccd908263ffffffff61183e16565b60009081556001600160a01b038316815260016020526040902054611cf8908263ffffffff61183e16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600754600354600080546001600160a01b03868116808452600160209081526040808620548151636b39d6cb60e11b8152978516600489015260248801939093526044870189905260648701949094526084860191909152915194169363d673ad969360a480820194918390030190829087803b158015611c2f57600080fdfe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a265627a7a72315820639a17082bb841ef885557bfd4f939fda1d15d9ef9da41800995126dccd4ef0f64736f6c634300050f003200000000000000000000000023916a8f5c3846e3100e5f587ff14f3098722f5d00000000000000000000000049244bd018ca9fd1f06ecc07b9e9de773246e5aa0000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101e55760003560e01c8063774692751161010f578063ae3816ee116100a2578063dd62ed3e11610071578063dd62ed3e146105f6578063e1897b5914610624578063f22b258a14610650578063fe98184d14610686576101e5565b8063ae3816ee1461057e578063b873e9a71461059b578063d5466777146105d1578063db054134146105d9576101e5565b806395d89b41116100de57806395d89b41146104f2578063a0c1ca34146104fa578063a457c2d714610526578063a9059cbb14610552576101e5565b806377469275146104d25780637a0d8f8a146104da578063870c426d146104e257806391d76bbb146104ea576101e5565b8063313ce567116101875780635bd5ea71116101565780635bd5ea711461046657806370a082311461046e578063721bb1701461049457806375d9aa1a146104ca576101e5565b8063313ce56714610349578063395093511461036757806355b6ed5c146103935780635b66876a146103c1576101e5565b8063183636c5116101c3578063183636c5146102c1578063238d3590146102e557806323b872dd146102ed57806327e235e314610323576101e5565b806306fdde03146101ea578063095ea7b31461026757806318160ddd146102a7575b600080fd5b6101f26106bc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561022c578181015183820152602001610214565b50505050905090810190601f1680156102595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102936004803603604081101561027d57600080fd5b506001600160a01b0381351690602001356106e2565b604080519115158252519081900360200190f35b6102af6106f9565b60408051918252519081900360200190f35b6102c96106ff565b604080516001600160a01b039092168252519081900360200190f35b6102af61070e565b6102936004803603606081101561030357600080fd5b506001600160a01b03813581169160208101359091169060400135610a75565b6102af6004803603602081101561033957600080fd5b50356001600160a01b0316610acc565b610351610ade565b6040805160ff9092168252519081900360200190f35b6102936004803603604081101561037d57600080fd5b506001600160a01b038135169060200135610ae3565b6102af600480360360408110156103a957600080fd5b506001600160a01b0381358116916020013516610b1f565b610293600480360360408110156103d757600080fd5b8101906020810181356401000000008111156103f257600080fd5b82018360208201111561040457600080fd5b8035906020019184602083028401116401000000008311171561042657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250610b3c915050565b6102c9610d00565b6102af6004803603602081101561048457600080fd5b50356001600160a01b0316610d0f565b610293600480360360608110156104aa57600080fd5b506001600160a01b03813581169160208101359091169060400135610d2a565b610293610db5565b6102c9610eeb565b6102c9610efa565b6102c9610f09565b6102af610f18565b6101f2610f1e565b6102936004803603604081101561051057600080fd5b506001600160a01b0381351690602001356110ea565b6102936004803603604081101561053c57600080fd5b506001600160a01b03813516906020013561143f565b6102936004803603604081101561056857600080fd5b506001600160a01b03813516906020013561147b565b6102936004803603602081101561059457600080fd5b5035611488565b610293600480360360608110156105b157600080fd5b506001600160a01b03813581169160208101359091169060400135611512565b6102c961155d565b610293600480360360208110156105ef57600080fd5b503561156c565b6102af6004803603604081101561060c57600080fd5b506001600160a01b0381358116916020013516611623565b6102936004803603604081101561063a57600080fd5b50803590602001356001600160a01b031661164e565b6102936004803603606081101561066657600080fd5b506001600160a01b038135811691602081013590911690604001356116ed565b6102936004803603606081101561069c57600080fd5b506001600160a01b03813581169160208101359091169060400135611738565b6040518060400160405280600a8152602001692932b83aba30ba34b7b760b11b81525081565b60006106ef338484611752565b5060015b92915050565b60005481565b6004546001600160a01b031681565b600080546004546001600160a01b03166108a757600654604080516370a0823160e01b815260006004820152905161089f926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561076f57600080fd5b505afa158015610783573d6000803e3d6000fd5b505050506040513d602081101561079957600080fd5b5051600654604080516370a0823160e01b8152600160048201529051610893926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156107e857600080fd5b505afa1580156107fc573d6000803e3d6000fd5b505050506040513d602081101561081257600080fd5b5051600654604080516318160ddd60e01b81529051610893926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561085a57600080fd5b505afa15801561086e573d6000803e3d6000fd5b505050506040513d602081101561088457600080fd5b5051869063ffffffff61183e16565b9063ffffffff61185716565b915050610a72565b60048054604080516377e71ee560e01b815290516001600160a01b03909216926377e71ee5928282019260209290829003018186803b1580156108e957600080fd5b505afa1580156108fd573d6000803e3d6000fd5b505050506040513d602081101561091357600080fd5b505160075460408051630c4761ab60e11b815290516001600160a01b039092169163188ec35691600480820192602092909190829003018186803b15801561095a57600080fd5b505afa15801561096e573d6000803e3d6000fd5b505050506040513d602081101561098457600080fd5b505110610992579050610a72565b6004805460408051635c0483f960e11b815290516001600160a01b039092169263b80907f2928282019260209290829003018186803b1580156109d457600080fd5b505afa1580156109e8573d6000803e3d6000fd5b505050506040513d60208110156109fe57600080fd5b505160408051630238d35960e41b815290516001600160a01b039092169163238d359091600480820192602092909190829003018186803b158015610a4257600080fd5b505afa158015610a56573d6000803e3d6000fd5b505050506040513d6020811015610a6c57600080fd5b50510190505b90565b6000610a8284848461186c565b6001600160a01b038416600090815260026020908152604080832033808552925290912054610ac2918691610abd908663ffffffff61185716565b611752565b5060019392505050565b60016020526000908152604090205481565b601281565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916106ef918590610abd908663ffffffff61183e16565b600260209081526000928352604080842090915290825290205481565b6000808211610b4a57600080fd5b600354604051631d29b8bb60e11b81526020600482018181528651602484015286516000946001600160a01b031693633a5371769389939283926044019180860191028083838b5b83811015610baa578181015183820152602001610b92565b5050505090500192505050602060405180830381600087803b158015610bcf57600080fd5b505af1158015610be3573d6000803e3d6000fd5b505050506040513d6020811015610bf957600080fd5b505160408051635c0483f960e11b815290519192506000916001600160a01b0384169163b80907f2916004808301926020929190829003018186803b158015610c4157600080fd5b505afa158015610c55573d6000803e3d6000fd5b505050506040513d6020811015610c6b57600080fd5b50519050610c7933856119bb565b5060408051632830728d60e21b81523360048201526024810186905290516001600160a01b0383169163a0c1ca349160448083019260209291908290030181600087803b158015610cc957600080fd5b505af1158015610cdd573d6000803e3d6000fd5b505050506040513d6020811015610cf357600080fd5b5060019695505050505050565b6008546001600160a01b031681565b6001600160a01b031660009081526001602052604090205490565b600354604080516301ba1fa360e01b815233600482015290516000926001600160a01b0316916301ba1fa3916024808301926020929190829003018186803b158015610d7557600080fd5b505afa158015610d89573d6000803e3d6000fd5b505050506040513d6020811015610d9f57600080fd5b5051610daa57600080fd5b610ac284848461186c565b6004546000906001600160a01b031615610dce57600080fd5b600654604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610e1957600080fd5b505afa158015610e2d573d6000803e3d6000fd5b505050506040513d6020811015610e4357600080fd5b5051600654604080516323b872dd60e01b8152336004820152600160248201526044810184905290519293506001600160a01b03909116916323b872dd916064808201926020929091908290030181600087803b158015610ea357600080fd5b505af1158015610eb7573d6000803e3d6000fd5b505050506040513d6020811015610ecd57600080fd5b5051610ed857600080fd5b610ee233826119d1565b50600191505090565b6006546001600160a01b031690565b6007546001600160a01b031681565b6003546001600160a01b031690565b60055490565b6007546040805163f39ec1f760e01b81526814995c14de5b589bdb60ba1b600482015290516060926001600160a01b03169163f39ec1f7916024808301926020929190829003018186803b158015610f7557600080fd5b505afa158015610f89573d6000803e3d6000fd5b505050506040513d6020811015610f9f57600080fd5b50516007546003546040805163213b363960e21b81526001600160a01b03938416600482015291831660248301525191909216916384ecd8e4916044808301926000929190829003018186803b158015610ff857600080fd5b505afa15801561100c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561103557600080fd5b810190808051604051939291908464010000000082111561105557600080fd5b90830190602082018581111561106a57600080fd5b825164010000000081118282018810171561108457600080fd5b82525081516020918201929091019080838360005b838110156110b1578181015183820152602001611099565b50505050905090810190601f1680156110de5780820380516001836020036101000a031916815260200191505b50604052505050905090565b6004805460408051635c0483f960e11b815290516000936001600160a01b0390931692839263b80907f29281830192602092829003018186803b15801561113057600080fd5b505afa158015611144573d6000803e3d6000fd5b505050506040513d602081101561115a57600080fd5b50516001600160a01b0316331461117057600080fd5b806001600160a01b03166377e71ee56040518163ffffffff1660e01b815260040160206040518083038186803b1580156111a957600080fd5b505afa1580156111bd573d6000803e3d6000fd5b505050506040513d60208110156111d357600080fd5b505160075460408051630c4761ab60e11b815290516001600160a01b039092169163188ec35691600480820192602092909190829003018186803b15801561121a57600080fd5b505afa15801561122e573d6000803e3d6000fd5b505050506040513d602081101561124457600080fd5b50511061125057600080fd5b61125a84846119d1565b50600580548401905560408051631963b08360e31b815290516001600160a01b0383169163cb1d8418916004808301926020929190829003018186803b1580156112a357600080fd5b505afa1580156112b7573d6000803e3d6000fd5b505050506040513d60208110156112cd57600080fd5b505160408051638d4e408360e01b815290516001600160a01b0390921691638d4e408391600480820192602092909190829003018186803b15801561131157600080fd5b505afa158015611325573d6000803e3d6000fd5b505050506040513d602081101561133b57600080fd5b5051610ac257806001600160a01b031663f7095d9d600360009054906101000a90046001600160a01b03166001600160a01b031663c38c0fa76040518163ffffffff1660e01b815260040160206040518083038186803b15801561139e57600080fd5b505afa1580156113b2573d6000803e3d6000fd5b505050506040513d60208110156113c857600080fd5b5051604080516001600160e01b031960e085901b16815260048101929092525160248083019260209291908290030181600087803b15801561140957600080fd5b505af115801561141d573d6000803e3d6000fd5b505050506040513d602081101561143357600080fd5b50505060019392505050565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916106ef918590610abd908663ffffffff61185716565b60006106ef33848461186c565b60035460408051634fbf0dfb60e11b815233600482015290516000926001600160a01b031691639f7e1bf6916024808301926020929190829003018186803b1580156114d357600080fd5b505afa1580156114e7573d6000803e3d6000fd5b505050506040513d60208110156114fd57600080fd5b505161150857600080fd5b6106ef33836119bb565b6003546040805163f76514c760e01b815233600482015290516000926001600160a01b03169163f76514c7916024808301926020929190829003018186803b158015610d7557600080fd5b6006546001600160a01b031681565b600480546040805163f76514c760e01b8152339381018490529051600093926001600160a01b03169163f76514c7916024808301926020929190829003018186803b1580156115ba57600080fd5b505afa1580156115ce573d6000803e3d6000fd5b505050506040513d60208110156115e457600080fd5b50516115ef57600080fd5b6000600561160485600263ffffffff6119e716565b8161160b57fe5b04905061161882826119d1565b506001949350505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6008546000906001600160a01b0316331461166857600080fd5b61167282846119d1565b50600360009054906101000a90046001600160a01b03166001600160a01b0316639ab448d96040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156116c357600080fd5b505af11580156116d7573d6000803e3d6000fd5b505050506040513d602081101561161857600080fd5b60035460408051634fbf0dfb60e11b815233600482015290516000926001600160a01b031691639f7e1bf6916024808301926020929190829003018186803b158015610d7557600080fd5b6003546000906001600160a01b03163314610daa57600080fd5b6001600160a01b0383166117975760405162461bcd60e51b8152600401808060200182810382526024815260200180611e5c6024913960400191505060405180910390fd5b6001600160a01b0382166117dc5760405162461bcd60e51b8152600401808060200182810382526022815260200180611df46022913960400191505060405180910390fd5b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60008282018381101561185057600080fd5b9392505050565b60008282111561186657600080fd5b50900390565b6001600160a01b0383166118b15760405162461bcd60e51b8152600401808060200182810382526025815260200180611e376025913960400191505060405180910390fd5b6001600160a01b0382166118f65760405162461bcd60e51b8152600401808060200182810382526023815260200180611dd16023913960400191505060405180910390fd5b6001600160a01b03831660009081526001602052604090205461191f908263ffffffff61185716565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611954908263ffffffff61183e16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a36119b6838383611a0e565b505050565b60006119c78383611acc565b6106ef8383611baf565b60006119dd8383611c5f565b6106ef8383611d50565b6000826119f6575060006106f3565b82820282848281611a0357fe5b041461185057600080fd5b6007546003546001600160a01b038581166000818152600160209081526040808320548986168085528285205483516370e33c7f60e11b815298881660048a01526024890196909652604488015260648701899052608487015260a48601939093529151929094169363e1c678fe9360c48082019492918390030190829087803b158015611a9b57600080fd5b505af1158015611aaf573d6000803e3d6000fd5b505050506040513d6020811015611ac557600080fd5b5050505050565b6001600160a01b038216611b115760405162461bcd60e51b8152600401808060200182810382526021815260200180611e166021913960400191505060405180910390fd5b6001600160a01b038216600090815260016020526040902054611b3a908263ffffffff61185716565b6001600160a01b03831660009081526001602052604081209190915554611b67908263ffffffff61185716565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b600754600354600080546001600160a01b03868116808452600160209081526040808620548151631efee74160e11b81529785166004890152602488019390935260448701899052606487019490945260848601919091529151941693633dfdce829360a480820194918390030190829087803b158015611c2f57600080fd5b505af1158015611c43573d6000803e3d6000fd5b505050506040513d6020811015611c5957600080fd5b50505050565b6001600160a01b038216611cba576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600054611ccd908263ffffffff61183e16565b60009081556001600160a01b038316815260016020526040902054611cf8908263ffffffff61183e16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600754600354600080546001600160a01b03868116808452600160209081526040808620548151636b39d6cb60e11b8152978516600489015260248801939093526044870189905260648701949094526084860191909152915194169363d673ad969360a480820194918390030190829087803b158015611c2f57600080fdfe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a265627a7a72315820639a17082bb841ef885557bfd4f939fda1d15d9ef9da41800995126dccd4ef0f64736f6c634300050f0032

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

00000000000000000000000023916a8f5c3846e3100e5f587ff14f3098722f5d00000000000000000000000049244bd018ca9fd1f06ecc07b9e9de773246e5aa0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _augur (address): 0x23916a8F5C3846e3100e5f587FF14F3098722F5d
Arg [1] : _universe (address): 0x49244BD018Ca9fd1f06ecC07B9E9De773246e5AA
Arg [2] : _parentUniverse (address): 0x0000000000000000000000000000000000000000

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000023916a8f5c3846e3100e5f587ff14f3098722f5d
Arg [1] : 00000000000000000000000049244bd018ca9fd1f06ecc07b9e9de773246e5aa
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

53521:6999:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53521:6999:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53635:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;53635:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17996:151;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;17996:151:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;16986:26;;;:::i;:::-;;;;;;;;;;;;;;;;53716:31;;;:::i;:::-;;;;-1:-1:-1;;;;;53716:31:0;;;;;;;;;;;;;;58863:552;;;:::i;18605:260::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;18605:260:0;;;;;;;;;;;;;;;;;:::i;17019:44::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17019:44:0;-1:-1:-1;;;;;17019:44:0;;:::i;16944:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19260:207;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19260:207:0;;;;;;;;:::i;17070:67::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;17070:67:0;;;;;;;;;;:::i;54742:438::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;54742:438:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;54742:438:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;54742:438:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;54742:438:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;54742:438:0;;-1:-1:-1;;54742:438:0;;;-1:-1:-1;54742:438:0;;-1:-1:-1;;54742:438:0:i;53848:23::-;;;:::i;17196:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17196:109:0;-1:-1:-1;;;;;17196:109:0;;:::i;57660:286::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;57660:286:0;;;;;;;;;;;;;;;;;:::i;60176:342::-;;;:::i;58671:96::-;;;:::i;53823:19::-;;;:::i;58333:87::-;;;:::i;58522:95::-;;;:::i;54275:163::-;;;:::i;55186:648::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;55186:648:0;;;;;;;;:::i;19954:217::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19954:217:0;;;;;;;;:::i;17508:157::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;17508:157:0;;;;;;;;:::i;56608:206::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;56608:206:0;;:::i;57347:307::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;57347:307:0;;;;;;;;;;;;;;;;;:::i;53789:28::-;;;:::i;55840:525::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55840:525:0;;:::i;17723:135::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;17723:135:0;;;;;;;;;;:::i;56371:231::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;56371:231:0;;;;;;-1:-1:-1;;;;;56371:231:0;;:::i;57076:265::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;57076:265:0;;;;;;;;;;;;;;;;;:::i;56820:250::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;56820:250:0;;;;;;;;;;;;;;;;;:::i;53635:42::-;;;;;;;;;;;;;;-1:-1:-1;;;53635:42:0;;;;:::o;17996:151::-;18064:4;18080:39;18089:10;18101:8;18111:7;18080:8;:39::i;:::-;-1:-1:-1;18136:4:0;17996:151;;;;;:::o;16986:26::-;;;;:::o;53716:31::-;;;-1:-1:-1;;;;;53716:31:0;;:::o;58863:552::-;58921:7;58963:11;;58988:14;;-1:-1:-1;;;;;58988:14:0;58984:425;;59134:14;;:36;;;-1:-1:-1;;;59134:36:0;;:14;:36;;;;;;59041:130;;-1:-1:-1;;;;;59134:14:0;;:24;;:36;;;;;;;;;;;;;;:14;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;59134:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59134:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;59134:36:0;59092:14;;:36;;;-1:-1:-1;;;59092:36:0;;:14;:36;;;;;;59041:88;;-1:-1:-1;;;;;59092:14:0;;:24;;:36;;;;;59134;;59092;;;;;;;:14;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;59092:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59092:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;59092:36:0;59058:14;;:28;;;-1:-1:-1;;;59058:28:0;;;;59041:46;;-1:-1:-1;;;;;59058:14:0;;:26;;:28;;;;;59092:36;;59058:28;;;;;;;:14;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;59058:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59058:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;59058:28:0;59041:12;;:46;:16;:46;:::i;:::-;:50;:88;:50;:88;:::i;:130::-;59034:137;;;;;58984:425;59216:14;;;:31;;;-1:-1:-1;;;59216:31:0;;;;-1:-1:-1;;;;;59216:14:0;;;;:29;;:31;;;;;;;;;;;;:14;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;59216:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59216:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;59216:31:0;59192:5;;:20;;;-1:-1:-1;;;59192:20:0;;;;-1:-1:-1;;;;;59192:5:0;;;;:18;;:20;;;;;59216:31;;59192:20;;;;;;;;:5;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;59192:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59192:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;59192:20:0;:55;59188:221;;59270:12;-1:-1:-1;59263:19:0;;59188:221;59335:14;;;:35;;;-1:-1:-1;;;59335:35:0;;;;-1:-1:-1;;;;;59335:14:0;;;;:33;;:35;;;;;;;;;;;;:14;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;59335:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59335:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;59335:35:0;:63;;;-1:-1:-1;;;59335:63:0;;;;-1:-1:-1;;;;;59335:61:0;;;;;;:63;;;;;:35;;:63;;;;;;;;:61;:63;;;5:2:-1;;;;30:1;27;20:12;5:2;59335:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59335:63:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;59335:63:0;59320:78;;-1:-1:-1;58863:552:0;;:::o;18605:260::-;18697:4;18713:39;18723:7;18732:10;18744:7;18713:9;:39::i;:::-;-1:-1:-1;;;;;18792:19:0;;;;;;:10;:19;;;;;;;;18780:10;18792:31;;;;;;;;;18762:75;;18771:7;;18792:44;;18828:7;18792:44;:35;:44;:::i;:::-;18762:8;:75::i;:::-;-1:-1:-1;18854:4:0;18605:260;;;;;:::o;17019:44::-;;;;;;;;;;;;;:::o;16944:35::-;16977:2;16944:35;:::o;19260:207::-;19367:10;19342:4;19389:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;19389:32:0;;;;;;;;;;19342:4;;19358:81;;19379:8;;19389:49;;19426:11;19389:49;:36;:49;:::i;17070:67::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;54742:438::-;54843:4;54881:1;54867:11;:15;54859:24;;;;;;54926:8;;:47;;-1:-1:-1;;;54926:47:0;;;;;;;;;;;;;;;;;54893:30;;-1:-1:-1;;;;;54926:8:0;;:28;;54955:17;;54926:47;;;;;;;;;;;;;;54893:30;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;54926:47:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;54926:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;54926:47:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;54926:47:0;55015:41;;;-1:-1:-1;;;55015:41:0;;;;54926:47;;-1:-1:-1;54983:29:0;;-1:-1:-1;;;;;55015:39:0;;;;;:41;;;;;54926:47;;55015:41;;;;;;;:39;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;55015:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55015:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55015:41:0;;-1:-1:-1;55066:29:0;55071:10;55083:11;55066:4;:29::i;:::-;-1:-1:-1;55105:47:0;;;-1:-1:-1;;;55105:47:0;;55128:10;55105:47;;;;;;;;;;;;-1:-1:-1;;;;;55105:22:0;;;;;:47;;;;;;;;;;;;;;-1:-1:-1;55105:22:0;:47;;;5:2:-1;;;;30:1;27;20:12;5:2;55105:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55105:47:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55169:4:0;;54742:438;-1:-1:-1;;;;;;54742:438:0:o;53848:23::-;;;-1:-1:-1;;;;;53848:23:0;;:::o;17196:109::-;-1:-1:-1;;;;;17280:18:0;17254:7;17280:18;;;:8;:18;;;;;;;17196:109::o;57660:286::-;57798:8;;:64;;;-1:-1:-1;;;57798:64:0;;57850:10;57798:64;;;;;;57774:4;;-1:-1:-1;;;;;57798:8:0;;:36;;:64;;;;;;;;;;;;;;:8;:64;;;5:2:-1;;;;30:1;27;20:12;5:2;57798:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57798:64:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;57798:64:0;57790:73;;;;;;57873:45;57883:7;57892:12;57906:11;57873:9;:45::i;60176:342::-;60260:14;;60236:4;;-1:-1:-1;;;;;60260:14:0;:30;60252:39;;;;;;60326:14;;:36;;;-1:-1:-1;;;60326:36:0;;60351:10;60326:36;;;;;;60301:22;;-1:-1:-1;;;;;60326:14:0;;:24;;:36;;;;;;;;;;;;;;:14;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;60326:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;60326:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;60326:36:0;60380:14;;:67;;;-1:-1:-1;;;60380:67:0;;60408:10;60380:67;;;;:14;:67;;;;;;;;;;;;60326:36;;-1:-1:-1;;;;;;60380:14:0;;;;:27;;:67;;;;;60326:36;;60380:67;;;;;;;;:14;;:67;;;5:2:-1;;;;30:1;27;20:12;5:2;60380:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;60380:67:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;60380:67:0;60372:76;;;;;;60458:32;60463:10;60475:14;60458:4;:32::i;:::-;;60507:4;60500:11;;;60176:342;:::o;58671:96::-;58746:14;;-1:-1:-1;;;;;58746:14:0;58671:96;:::o;53823:19::-;;;-1:-1:-1;;;;;53823:19:0;;:::o;58333:87::-;58405:8;;-1:-1:-1;;;;;58405:8:0;58333:87;:::o;58522:95::-;58597:13;;58522:95;:::o;54275:163::-;54357:5;;:25;;;-1:-1:-1;;;54357:25:0;;-1:-1:-1;;;54357:25:0;;;;;;54314:13;;-1:-1:-1;;;;;54357:5:0;;:12;;:25;;;;;;;;;;;;;;:5;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;54357:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;54357:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;54357:25:0;54405:5;;54421:8;;54346:85;;;-1:-1:-1;;;54346:85:0;;-1:-1:-1;;;;;54405:5:0;;;54346:85;;;;54421:8;;;54346:85;;;;;:50;;;;;;;:85;;;;;54405:5;;54346:85;;;;;;;:50;:85;;;5:2:-1;;;;30:1;27;20:12;5:2;54346:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;54346:85:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;54346:85:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;54346:85:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;54346:85:0;;420:4:-1;411:14;;;;54346:85:0;;;;;411:14:-1;54346:85:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;54346:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54339:92;;54275:163;:::o;55186:648::-;55305:14;;;55368:36;;;-1:-1:-1;;;55368:36:0;;;;55261:4;;-1:-1:-1;;;;;55305:14:0;;;;;;55368:34;;:36;;;;;;;;;;;55305:14;55368:36;;;5:2:-1;;;;30:1;27;20:12;5:2;55368:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55368:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55368:36:0;-1:-1:-1;;;;;55337:67:0;55353:10;55337:67;55329:76;;;;;;55446:15;-1:-1:-1;;;;;55446:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;55446:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55446:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55446:32:0;55423:5;;:20;;;-1:-1:-1;;;55423:20:0;;;;-1:-1:-1;;;;;55423:5:0;;;;:18;;:20;;;;;55446:32;;55423:20;;;;;;;;:5;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;55423:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55423:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55423:20:0;:55;55415:64;;;;;;55489:28;55494:9;55505:11;55489:4;:28::i;:::-;-1:-1:-1;55527:13:0;:28;;;;;;55637:34;;;-1:-1:-1;;;55637:34:0;;;;-1:-1:-1;;;;;55637:32:0;;;;;:34;;;;;;;;;;;;;;:32;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;55637:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55637:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55637:34:0;:48;;;-1:-1:-1;;;55637:48:0;;;;-1:-1:-1;;;;;55637:46:0;;;;;;:48;;;;;:34;;:48;;;;;;;;:46;:48;;;5:2:-1;;;;30:1;27;20:12;5:2;55637:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55637:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55637:48:0;55632:175;;55701:15;-1:-1:-1;;;;;55701:51:0;;55753:8;;;;;;;;;-1:-1:-1;;;;;55753:8:0;-1:-1:-1;;;;;55753:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;55753:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55753:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55753:42:0;55701:95;;;-1:-1:-1;;;;;;55701:95:0;;;;;;;;;;;;;;;;;;;;55753:42;;55701:95;;;;;;;-1:-1:-1;55701:95:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;55701:95:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55701:95:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;55823:4:0;;55186:648;-1:-1:-1;;;55186:648:0:o;19954:217::-;20066:10;20041:4;20088:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;20088:32:0;;;;;;;;;;20041:4;;20057:86;;20078:8;;20088:54;;20125:16;20088:54;:36;:54;:::i;17508:157::-;17579:4;17595:42;17605:10;17617;17629:7;17595:9;:42::i;56608:206::-;56694:8;;:50;;;-1:-1:-1;;;56694:50:0;;56732:10;56694:50;;;;;;56670:4;;-1:-1:-1;;;;;56694:8:0;;:29;;:50;;;;;;;;;;;;;;:8;:50;;;5:2:-1;;;;30:1;27;20:12;5:2;56694:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56694:50:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;56694:50:0;56686:59;;;;;;56755:31;56760:10;56772:13;56755:4;:31::i;57347:307::-;57492:8;;:78;;;-1:-1:-1;;;57492:78:0;;57558:10;57492:78;;;;;;57468:4;;-1:-1:-1;;;;;57492:8:0;;:43;;:78;;;;;;;;;;;;;;:8;:78;;;5:2:-1;;;;30:1;27;20:12;53789:28:0;;;-1:-1:-1;;;;;53789:28:0;;:::o;55840:525::-;56031:14;;;:72;;;-1:-1:-1;;;56031:72:0;;56002:10;56031:72;;;;;;;;55918:4;;56002:10;-1:-1:-1;;;;;56031:14:0;;:49;;:72;;;;;;;;;;;;;;:14;:72;;;5:2:-1;;;;30:1;27;20:12;5:2;56031:72:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56031:72:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;56031:72:0;56023:81;;;;;;56240:14;56282:1;56257:22;:15;56277:1;56257:22;:19;:22;:::i;:::-;:26;;;;;;56240:43;;56293:44;56306:21;56330:6;56293:4;:44::i;:::-;-1:-1:-1;56354:4:0;;55840:525;-1:-1:-1;;;;55840:525:0:o;17723:135::-;-1:-1:-1;;;;;17823:18:0;;;17797:7;17823:18;;;:10;:18;;;;;;;;:28;;;;;;;;;;;;;17723:135::o;56371:231::-;56476:8;;56452:4;;-1:-1:-1;;;;;56476:8:0;56488:10;56476:22;56468:31;;;;;;56509:28;56514:7;56523:13;56509:4;:28::i;:::-;;56547:8;;;;;;;;;-1:-1:-1;;;;;56547:8:0;-1:-1:-1;;;;;56547:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;56547:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56547:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;57076:265:0;57207:8;;:50;;;-1:-1:-1;;;57207:50:0;;57245:10;57207:50;;;;;;57183:4;;-1:-1:-1;;;;;57207:8:0;;:29;;:50;;;;;;;;;;;;;;:8;:50;;;5:2:-1;;;;30:1;27;20:12;56820:250:0;56978:8;;56929:4;;-1:-1:-1;;;;;56978:8:0;56963:10;56953:33;56945:42;;;;;22762:342;-1:-1:-1;;;;;22858:20:0;;22850:69;;;;-1:-1:-1;;;22850:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22937:22:0;;22929:69;;;;-1:-1:-1;;;22929:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23009:18:0;;;;;;;:10;:18;;;;;;;;:28;;;;;;;;;;;;;:38;;;23062:35;;;;;;;;;;;;;;;;;22762:342;;;:::o;8269:144::-;8327:7;8358:5;;;8381:6;;;;8373:15;;;;;;8405:1;8269:144;-1:-1:-1;;;8269:144:0:o;8142:121::-;8200:7;8232:1;8227;:6;;8219:15;;;;;;-1:-1:-1;8251:5:0;;;8142:121::o;20645:487::-;-1:-1:-1;;;;;20745:21:0;;20737:71;;;;-1:-1:-1;;;20737:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20826:24:0;;20818:72;;;;-1:-1:-1;;;20818:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20921:17:0;;;;;;:8;:17;;;;;;:30;;20943:7;20921:30;:21;:30;:::i;:::-;-1:-1:-1;;;;;20901:17:0;;;;;;;:8;:17;;;;;;:50;;;;20984:20;;;;;;;:33;;21009:7;20984:33;:24;:33;:::i;:::-;-1:-1:-1;;;;;20961:20:0;;;;;;;:8;:20;;;;;;;;;:56;;;;21032:38;;;;;;;20961:20;;21032:38;;;;;;;;;;;;;21080:45;21096:7;21105:10;21117:7;21080:15;:45::i;:::-;20645:487;;;:::o;23940:167::-;24006:4;24022:23;24028:7;24037;24022:5;:23::i;:::-;24055:24;24062:7;24071;24055:6;:24::i;23767:167::-;23833:4;23849:23;23855:7;23864;23849:5;:23::i;:::-;23882:24;23889:7;23898;23882:6;:24::i;7426:421::-;7484:7;7724:6;7720:45;;-1:-1:-1;7753:1:0;7746:8;;7720:45;7787:5;;;7791:1;7787;:5;:1;7810:5;;;;;:10;7802:19;;;;;59421:193;59509:5;;59546:8;;-1:-1:-1;;;;;59576:15:0;;;59509:5;59576:15;;;59509:5;59576:15;;;;;;;;;59593:13;;;;;;;;;;59509:98;;-1:-1:-1;;;59509:98:0;;59546:8;;;59509:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;;;;;:36;;:98;;;;;;;;;;;;;;:5;:98;;;5:2:-1;;;;30:1;27;20:12;5:2;59509:98:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59509:98:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;59421:193:0:o;22028:309::-;-1:-1:-1;;;;;22105:22:0;;22097:68;;;;-1:-1:-1;;;22097:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22197:18:0;;;;;;:8;:18;;;;;;:31;;22220:7;22197:31;:22;:31;:::i;:::-;-1:-1:-1;;;;;22176:18:0;;;;;;:8;:18;;;;;:52;;;;22252:11;:24;;22268:7;22252:24;:15;:24;:::i;:::-;22238:11;:38;;;22291:39;;;;;;;;-1:-1:-1;;;;;22291:39:0;;;;;;;;;;;;;22028:309;;:::o;59793:167::-;59862:5;;59894:8;;59862:5;59922:11;;-1:-1:-1;;;;;59935:17:0;;;;;;59862:5;59935:17;;;;;;;;;59862:91;;-1:-1:-1;;;59862:91:0;;59894:8;;;59862:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;;;:31;;:91;;;;;;;;;;;;;:5;:91;;;5:2:-1;;;;30:1;27;20:12;5:2;59862:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59862:91:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;59793:167:0:o;21402:307::-;-1:-1:-1;;;;;21479:22:0;;21471:66;;;;;-1:-1:-1;;;21471:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21562:11;;:24;;21578:7;21562:24;:15;:24;:::i;:::-;21548:11;:38;;;-1:-1:-1;;;;;21617:18:0;;;;:8;:18;;;;;;:31;;21640:7;21617:31;:22;:31;:::i;:::-;-1:-1:-1;;;;;21596:18:0;;;;;;:8;:18;;;;;;;;:52;;;;21663:39;;;;;;;21596:18;;;;21663:39;;;;;;;;;;21402:307;;:::o;59620:167::-;59689:5;;59721:8;;59689:5;59749:11;;-1:-1:-1;;;;;59762:17:0;;;;;;59689:5;59762:17;;;;;;;;;59689:91;;-1:-1:-1;;;59689:91:0;;59721:8;;;59689:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;;;:31;;:91;;;;;;;;;;;;;:5;:91;;;5:2:-1;;;;30:1;27;20:12

Swarm Source

bzzr://639a17082bb841ef885557bfd4f939fda1d15d9ef9da41800995126dccd4ef0f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.