ETH Price: $3,381.55 (+3.13%)

Token

BAMC x AK Cyber Dolphin (BAKCD)
 

Overview

Max Total Supply

999 BAKCD

Holders

348

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
simonlou.eth
Balance
1 BAKCD
0x5e13d49257f9e665c900eebd8d96042507709838
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BAKCD

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 13: BAKCD.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import "./ERC721Enumerable.sol";
import "./Ownable.sol";

contract BAKCD is ERC721Enumerable, Ownable {

    uint256 public constant MAX_SUPPLY = 999;
    uint256 public constant MINT_PER_TX = 5;
    uint256 public constant MAX_FREE_MINT = 1;
    uint256 public constant PRICE = 0.069 ether;
    address public treasury;
    string private baseTokenURI;
    bool public publicActive;
    bool public freeMintActive;
    mapping(address => uint256) private freeMints;
    mapping(address => bool) private whitelistedAddr;
    IERC721 public bamc48h;
    bool public bamc48hActive;
    mapping(uint256 => bool) private bamc48hMinted;

    constructor(address _treasury, address _bamc48h) ERC721("BAMC x AK Cyber Dolphin", "BAKCD") {
        treasury = _treasury;
        bamc48h = IERC721(_bamc48h);
    }

    function publicMint(uint256 num) public payable {
        require(publicActive, "Public not open");
        require(num <= MINT_PER_TX, "Reach max per tx");
        uint256 supply = totalSupply();
        require(supply + num <= MAX_SUPPLY, "Sold out");
        require(msg.value >= num * PRICE, "Invalid payment");

        for (uint256 i; i < num; i++) {
            _safeMint(msg.sender, supply + i);
        }
    }

    function freeMint() public {
        require(freeMintActive, "Whitelist not open");
        (bool isWhitelist, uint256 mints) = isWhitelisted(msg.sender);
        require(isWhitelist, "Not whitelisted");
        require(mints < MAX_FREE_MINT, "Exceed limit");
        uint256 supply = totalSupply();
        require(supply + MAX_FREE_MINT < MAX_SUPPLY, "Sold out");

        _safeMint(msg.sender, supply);
        freeMints[msg.sender] = MAX_FREE_MINT;
    }

    function bamc48hMint(uint256[] calldata _ids) public {
        require(bamc48hActive, "BAMC x AK Cyber Dolphin not open");
        uint256 supply = totalSupply();
        require(supply + _ids.length <= MAX_SUPPLY, "Sold out");
        
        for (uint256 i; i < _ids.length; i++) {
            require(bamc48hMinted[_ids[i]] == false, "Token minted");
            require(bamc48h.ownerOf(_ids[i]) == msg.sender, "Not owner");
            _safeMint(msg.sender, supply + i);
            bamc48hMinted[_ids[i]] = true;
        }
    }

    function isBamc48hMinted(uint256 _bamc48h) public view returns (bool){
        require(bamc48h.ownerOf(_bamc48h) != address(0), "Token not exist");
        return bamc48hMinted[_bamc48h];
    }

    function isWhitelisted(address _address) public view returns (bool, uint256) {
        return (whitelistedAddr[_address], freeMints[_address]);
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return baseTokenURI;
    }

    function setBaseURI(string memory baseURI) public onlyOwner {
        baseTokenURI = baseURI;
    }

    function updateSales(bool _public, bool _freeMint, bool _bamc48h) external onlyOwner {
        publicActive = _public;
        freeMintActive = _freeMint;
        bamc48hActive = _bamc48h;
    }

    function insertWhitelist(address[] calldata _address) public onlyOwner {
        for (uint256 i; i < _address.length; i++) {
            whitelistedAddr[_address[i]] = true;
        }
    }

    function removeWhitelist(address[] calldata _address) public onlyOwner {
        for (uint256 i; i < _address.length; i++) {
            whitelistedAddr[_address[i]] = false;
        }
    }
    
    function withdraw() public onlyOwner {
        payable(treasury).transfer(address(this).balance);
    }
}


File 1 of 13: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 3 of 13: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 4 of 13: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 5 of 13: ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

File 6 of 13: ERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC721.sol";
import "./IERC721Enumerable.sol";

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

File 7 of 13: IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 8 of 13: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

File 9 of 13: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

File 10 of 13: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

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

File 11 of 13: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 12 of 13: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 13 of 13: Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_bamc48h","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_FREE_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bamc48h","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bamc48hActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"bamc48hMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"}],"name":"insertWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bamc48h","type":"uint256"}],"name":"isBamc48hMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"}],"name":"removeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_public","type":"bool"},{"internalType":"bool","name":"_freeMint","type":"bool"},{"internalType":"bool","name":"_bamc48h","type":"bool"}],"name":"updateSales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162002b1838038062002b18833981016040819052620000349162000214565b604080518082018252601781527f42414d43207820414b20437962657220446f6c7068696e000000000000000000602080830191825283518085019094526005845264109052d0d160da1b908401528151919291620000969160009162000151565b508051620000ac90600190602084019062000151565b505050620000c9620000c3620000fb60201b60201c565b620000ff565b600b80546001600160a01b039384166001600160a01b0319918216179091556010805492909316911617905562000288565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200015f906200024b565b90600052602060002090601f016020900481019282620001835760008555620001ce565b82601f106200019e57805160ff1916838001178555620001ce565b82800160010185558215620001ce579182015b82811115620001ce578251825591602001919060010190620001b1565b50620001dc929150620001e0565b5090565b5b80821115620001dc5760008155600101620001e1565b80516001600160a01b03811681146200020f57600080fd5b919050565b6000806040838503121562000227578182fd5b6200023283620001f7565b91506200024260208401620001f7565b90509250929050565b600181811c908216806200026057607f821691505b602082108114156200028257634e487b7160e01b600052602260045260246000fd5b50919050565b61288080620002986000396000f3fe6080604052600436106102255760003560e01c806361d027b311610123578063a22cb465116100ab578063c87b56dd1161006f578063c87b56dd1461065e578063cb5bc2aa1461067e578063e985e9c51461069d578063ed967e1a146106e6578063f2fde38b146106fb57600080fd5b8063a22cb465146105be578063b2af69e3146105de578063b88d4fde146105fe578063bda458411461061e578063c857e1321461063e57600080fd5b8063889724e3116100f2578063889724e31461052f5780638d859f3e1461054f5780638da5cb5b1461056a57806395d89b41146105885780639c6f428b1461059d57600080fd5b806361d027b3146104ba5780636352211e146104da57806370a08231146104fa578063715018a61461051a57600080fd5b806332cb6b0c116101b157806342842e0e1161017557806342842e0e146104255780634d822524146104455780634f6ccce71461046557806355f804b3146104855780635b70ea9f146104a557600080fd5b806332cb6b0c1461036d5780633af32abf146103835780633ccfd60b146103e15780633f2981cf146103f657806341cda2031461041057600080fd5b806318160ddd116101f857806318160ddd146102db57806323245216146102fa57806323b872dd1461031a5780632db115441461033a5780632f745c591461034d57600080fd5b806301ffc9a71461022a57806306fdde031461025f578063081812fc14610281578063095ea7b3146102b9575b600080fd5b34801561023657600080fd5b5061024a6102453660046124aa565b61071b565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b50610274610746565b60405161025691906125d8565b34801561028d57600080fd5b506102a161029c366004612528565b6107d8565b6040516001600160a01b039091168152602001610256565b3480156102c557600080fd5b506102d96102d43660046123fd565b610872565b005b3480156102e757600080fd5b506008545b604051908152602001610256565b34801561030657600080fd5b506102d9610315366004612428565b610988565b34801561032657600080fd5b506102d961033536600461230c565b610a32565b6102d9610348366004612528565b610a63565b34801561035957600080fd5b506102ec6103683660046123fd565b610ba5565b34801561037957600080fd5b506102ec6103e781565b34801561038f57600080fd5b506103ca61039e36600461229c565b6001600160a01b03166000908152600f6020908152604080832054600e9092529091205460ff90911691565b604080519215158352602083019190915201610256565b3480156103ed57600080fd5b506102d9610c3b565b34801561040257600080fd5b50600d5461024a9060ff1681565b34801561041c57600080fd5b506102ec600181565b34801561043157600080fd5b506102d961044036600461230c565b610ca1565b34801561045157600080fd5b506102d9610460366004612428565b610cbc565b34801561047157600080fd5b506102ec610480366004612528565b610d66565b34801561049157600080fd5b506102d96104a03660046124e2565b610e07565b3480156104b157600080fd5b506102d9610e48565b3480156104c657600080fd5b50600b546102a1906001600160a01b031681565b3480156104e657600080fd5b506102a16104f5366004612528565b610f8e565b34801561050657600080fd5b506102ec61051536600461229c565b611005565b34801561052657600080fd5b506102d961108c565b34801561053b57600080fd5b506010546102a1906001600160a01b031681565b34801561055b57600080fd5b506102ec66f523226980800081565b34801561057657600080fd5b50600a546001600160a01b03166102a1565b34801561059457600080fd5b506102746110c2565b3480156105a957600080fd5b5060105461024a90600160a01b900460ff1681565b3480156105ca57600080fd5b506102d96105d93660046123c9565b6110d1565b3480156105ea57600080fd5b506102d96105f9366004612468565b611196565b34801561060a57600080fd5b506102d961061936600461234c565b611205565b34801561062a57600080fd5b506102d9610639366004612428565b61123d565b34801561064a57600080fd5b5061024a610659366004612528565b6114b3565b34801561066a57600080fd5b50610274610679366004612528565b611593565b34801561068a57600080fd5b50600d5461024a90610100900460ff1681565b3480156106a957600080fd5b5061024a6106b83660046122d4565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106f257600080fd5b506102ec600581565b34801561070757600080fd5b506102d961071636600461229c565b61166e565b60006001600160e01b0319821663780e9d6360e01b1480610740575061074082611706565b92915050565b60606000805461075590612773565b80601f016020809104026020016040519081016040528092919081815260200182805461078190612773565b80156107ce5780601f106107a3576101008083540402835291602001916107ce565b820191906000526020600020905b8154815290600101906020018083116107b157829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108565760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061087d82610f8e565b9050806001600160a01b0316836001600160a01b031614156108eb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161084d565b336001600160a01b0382161480610907575061090781336106b8565b6109795760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161084d565b6109838383611756565b505050565b600a546001600160a01b031633146109b25760405162461bcd60e51b815260040161084d9061263d565b60005b81811015610983576000600f60008585858181106109e357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906109f8919061229c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610a2a816127ae565b9150506109b5565b610a3c33826117c4565b610a585760405162461bcd60e51b815260040161084d90612672565b6109838383836118bb565b600d5460ff16610aa75760405162461bcd60e51b815260206004820152600f60248201526e283ab13634b1903737ba1037b832b760891b604482015260640161084d565b6005811115610aeb5760405162461bcd60e51b815260206004820152601060248201526f0a4cac2c6d040dac2f040e0cae440e8f60831b604482015260640161084d565b6000610af660085490565b90506103e7610b0583836126e5565b1115610b235760405162461bcd60e51b815260040161084d906126c3565b610b3466f523226980800083612711565b341015610b755760405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a59081c185e5b595b9d608a1b604482015260640161084d565b60005b8281101561098357610b9333610b8e83856126e5565b611a66565b80610b9d816127ae565b915050610b78565b6000610bb083611005565b8210610c125760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161084d565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610c655760405162461bcd60e51b815260040161084d9061263d565b600b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610c9e573d6000803e3d6000fd5b50565b61098383838360405180602001604052806000815250611205565b600a546001600160a01b03163314610ce65760405162461bcd60e51b815260040161084d9061263d565b60005b81811015610983576001600f6000858585818110610d1757634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610d2c919061229c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d5e816127ae565b915050610ce9565b6000610d7160085490565b8210610dd45760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161084d565b60088281548110610df557634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b600a546001600160a01b03163314610e315760405162461bcd60e51b815260040161084d9061263d565b8051610e4490600c90602084019061212e565b5050565b600d54610100900460ff16610e945760405162461bcd60e51b81526020600482015260126024820152712bb434ba32b634b9ba103737ba1037b832b760711b604482015260640161084d565b336000908152600f6020908152604080832054600e9092529091205460ff9091169081610ef55760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b604482015260640161084d565b60018110610f345760405162461bcd60e51b815260206004820152600c60248201526b115e18d95959081b1a5b5a5d60a21b604482015260640161084d565b6000610f3f60085490565b90506103e7610f4f6001836126e5565b10610f6c5760405162461bcd60e51b815260040161084d906126c3565b610f763382611a66565b5050336000908152600e602052604090206001905550565b6000818152600260205260408120546001600160a01b0316806107405760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161084d565b60006001600160a01b0382166110705760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161084d565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146110b65760405162461bcd60e51b815260040161084d9061263d565b6110c06000611a80565b565b60606001805461075590612773565b6001600160a01b03821633141561112a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161084d565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146111c05760405162461bcd60e51b815260040161084d9061263d565b600d80549215156101000261ff00199415159490941661ffff199093169290921792909217905560108054911515600160a01b0260ff60a01b19909216919091179055565b61120f33836117c4565b61122b5760405162461bcd60e51b815260040161084d90612672565b61123784848484611ad2565b50505050565b601054600160a01b900460ff166112965760405162461bcd60e51b815260206004820181905260248201527f42414d43207820414b20437962657220446f6c7068696e206e6f74206f70656e604482015260640161084d565b60006112a160085490565b90506103e76112b083836126e5565b11156112ce5760405162461bcd60e51b815260040161084d906126c3565b60005b8281101561123757601160008585848181106112fd57634e487b7160e01b600052603260045260246000fd5b602090810292909201358352508101919091526040016000205460ff16156113565760405162461bcd60e51b815260206004820152600c60248201526b151bdad95b881b5a5b9d195960a21b604482015260640161084d565b60105433906001600160a01b0316636352211e86868581811061138957634e487b7160e01b600052603260045260246000fd5b905060200201356040518263ffffffff1660e01b81526004016113ae91815260200190565b60206040518083038186803b1580156113c657600080fd5b505afa1580156113da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fe91906122b8565b6001600160a01b0316146114405760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015260640161084d565b61144e33610b8e83856126e5565b60016011600086868581811061147457634e487b7160e01b600052603260045260246000fd5b90506020020135815260200190815260200160002060006101000a81548160ff02191690831515021790555080806114ab906127ae565b9150506112d1565b6010546040516331a9108f60e11b81526004810183905260009182916001600160a01b0390911690636352211e9060240160206040518083038186803b1580156114fc57600080fd5b505afa158015611510573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153491906122b8565b6001600160a01b0316141561157d5760405162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08195e1a5cdd608a1b604482015260640161084d565b5060009081526011602052604090205460ff1690565b6000818152600260205260409020546060906001600160a01b03166116125760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161084d565b600061161c611b05565b9050600081511161163c5760405180602001604052806000815250611667565b8061164684611b14565b60405160200161165792919061256c565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146116985760405162461bcd60e51b815260040161084d9061263d565b6001600160a01b0381166116fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161084d565b610c9e81611a80565b60006001600160e01b031982166380ac58cd60e01b148061173757506001600160e01b03198216635b5e139f60e01b145b8061074057506301ffc9a760e01b6001600160e01b0319831614610740565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061178b82610f8e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661183d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161084d565b600061184883610f8e565b9050806001600160a01b0316846001600160a01b031614806118835750836001600160a01b0316611878846107d8565b6001600160a01b0316145b806118b357506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166118ce82610f8e565b6001600160a01b0316146119365760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161084d565b6001600160a01b0382166119985760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161084d565b6119a3838383611c2e565b6119ae600082611756565b6001600160a01b03831660009081526003602052604081208054600192906119d7908490612730565b90915550506001600160a01b0382166000908152600360205260408120805460019290611a059084906126e5565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610e44828260405180602001604052806000815250611ce6565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611add8484846118bb565b611ae984848484611d19565b6112375760405162461bcd60e51b815260040161084d906125eb565b6060600c805461075590612773565b606081611b385750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b625780611b4c816127ae565b9150611b5b9050600a836126fd565b9150611b3c565b60008167ffffffffffffffff811115611b8b57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611bb5576020820181803683370190505b5090505b84156118b357611bca600183612730565b9150611bd7600a866127c9565b611be29060306126e5565b60f81b818381518110611c0557634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611c27600a866126fd565b9450611bb9565b6001600160a01b038316611c8957611c8481600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611cac565b816001600160a01b0316836001600160a01b031614611cac57611cac8382611e26565b6001600160a01b038216611cc35761098381611ec3565b826001600160a01b0316826001600160a01b031614610983576109838282611f9c565b611cf08383611fe0565b611cfd6000848484611d19565b6109835760405162461bcd60e51b815260040161084d906125eb565b60006001600160a01b0384163b15611e1b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d5d90339089908890889060040161259b565b602060405180830381600087803b158015611d7757600080fd5b505af1925050508015611da7575060408051601f3d908101601f19168201909252611da4918101906124c6565b60015b611e01573d808015611dd5576040519150601f19603f3d011682016040523d82523d6000602084013e611dda565b606091505b508051611df95760405162461bcd60e51b815260040161084d906125eb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506118b3565b506001949350505050565b60006001611e3384611005565b611e3d9190612730565b600083815260076020526040902054909150808214611e90576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611ed590600190612730565b60008381526009602052604081205460088054939450909284908110611f0b57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060088381548110611f3a57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611f8057634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000611fa783611005565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166120365760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161084d565b6000818152600260205260409020546001600160a01b03161561209b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161084d565b6120a760008383611c2e565b6001600160a01b03821660009081526003602052604081208054600192906120d09084906126e5565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461213a90612773565b90600052602060002090601f01602090048101928261215c57600085556121a2565b82601f1061217557805160ff19168380011785556121a2565b828001600101855582156121a2579182015b828111156121a2578251825591602001919060010190612187565b506121ae9291506121b2565b5090565b5b808211156121ae57600081556001016121b3565b600067ffffffffffffffff808411156121e2576121e2612809565b604051601f8501601f19908116603f0116810190828211818310171561220a5761220a612809565b8160405280935085815286868601111561222357600080fd5b858560208301376000602087830101525050509392505050565b60008083601f84011261224e578182fd5b50813567ffffffffffffffff811115612265578182fd5b6020830191508360208260051b850101111561228057600080fd5b9250929050565b8035801515811461229757600080fd5b919050565b6000602082840312156122ad578081fd5b81356116678161281f565b6000602082840312156122c9578081fd5b81516116678161281f565b600080604083850312156122e6578081fd5b82356122f18161281f565b915060208301356123018161281f565b809150509250929050565b600080600060608486031215612320578081fd5b833561232b8161281f565b9250602084013561233b8161281f565b929592945050506040919091013590565b60008060008060808587031215612361578081fd5b843561236c8161281f565b9350602085013561237c8161281f565b925060408501359150606085013567ffffffffffffffff81111561239e578182fd5b8501601f810187136123ae578182fd5b6123bd878235602084016121c7565b91505092959194509250565b600080604083850312156123db578182fd5b82356123e68161281f565b91506123f460208401612287565b90509250929050565b6000806040838503121561240f578182fd5b823561241a8161281f565b946020939093013593505050565b6000806020838503121561243a578182fd5b823567ffffffffffffffff811115612450578283fd5b61245c8582860161223d565b90969095509350505050565b60008060006060848603121561247c578283fd5b61248584612287565b925061249360208501612287565b91506124a160408501612287565b90509250925092565b6000602082840312156124bb578081fd5b813561166781612834565b6000602082840312156124d7578081fd5b815161166781612834565b6000602082840312156124f3578081fd5b813567ffffffffffffffff811115612509578182fd5b8201601f81018413612519578182fd5b6118b3848235602084016121c7565b600060208284031215612539578081fd5b5035919050565b60008151808452612558816020860160208601612747565b601f01601f19169290920160200192915050565b6000835161257e818460208801612747565b835190830190612592818360208801612747565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906125ce90830184612540565b9695505050505050565b6020815260006116676020830184612540565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526008908201526714dbdb19081bdd5d60c21b604082015260600190565b600082198211156126f8576126f86127dd565b500190565b60008261270c5761270c6127f3565b500490565b600081600019048311821515161561272b5761272b6127dd565b500290565b600082821015612742576127426127dd565b500390565b60005b8381101561276257818101518382015260200161274a565b838111156112375750506000910152565b600181811c9082168061278757607f821691505b602082108114156127a857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156127c2576127c26127dd565b5060010190565b6000826127d8576127d86127f3565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610c9e57600080fd5b6001600160e01b031981168114610c9e57600080fdfea2646970667358221220dd510fdc1d69cc56be62f8023d9f99a9db56e7d03b147be6edc1fd2b156d3e5e64736f6c63430008040033000000000000000000000000f5020b6dbaf2de2f244f86ef4ee53478c6ce2f220000000000000000000000004045754a9a150fcf6d30a72258d0fb220c42fb6a

Deployed Bytecode

0x6080604052600436106102255760003560e01c806361d027b311610123578063a22cb465116100ab578063c87b56dd1161006f578063c87b56dd1461065e578063cb5bc2aa1461067e578063e985e9c51461069d578063ed967e1a146106e6578063f2fde38b146106fb57600080fd5b8063a22cb465146105be578063b2af69e3146105de578063b88d4fde146105fe578063bda458411461061e578063c857e1321461063e57600080fd5b8063889724e3116100f2578063889724e31461052f5780638d859f3e1461054f5780638da5cb5b1461056a57806395d89b41146105885780639c6f428b1461059d57600080fd5b806361d027b3146104ba5780636352211e146104da57806370a08231146104fa578063715018a61461051a57600080fd5b806332cb6b0c116101b157806342842e0e1161017557806342842e0e146104255780634d822524146104455780634f6ccce71461046557806355f804b3146104855780635b70ea9f146104a557600080fd5b806332cb6b0c1461036d5780633af32abf146103835780633ccfd60b146103e15780633f2981cf146103f657806341cda2031461041057600080fd5b806318160ddd116101f857806318160ddd146102db57806323245216146102fa57806323b872dd1461031a5780632db115441461033a5780632f745c591461034d57600080fd5b806301ffc9a71461022a57806306fdde031461025f578063081812fc14610281578063095ea7b3146102b9575b600080fd5b34801561023657600080fd5b5061024a6102453660046124aa565b61071b565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b50610274610746565b60405161025691906125d8565b34801561028d57600080fd5b506102a161029c366004612528565b6107d8565b6040516001600160a01b039091168152602001610256565b3480156102c557600080fd5b506102d96102d43660046123fd565b610872565b005b3480156102e757600080fd5b506008545b604051908152602001610256565b34801561030657600080fd5b506102d9610315366004612428565b610988565b34801561032657600080fd5b506102d961033536600461230c565b610a32565b6102d9610348366004612528565b610a63565b34801561035957600080fd5b506102ec6103683660046123fd565b610ba5565b34801561037957600080fd5b506102ec6103e781565b34801561038f57600080fd5b506103ca61039e36600461229c565b6001600160a01b03166000908152600f6020908152604080832054600e9092529091205460ff90911691565b604080519215158352602083019190915201610256565b3480156103ed57600080fd5b506102d9610c3b565b34801561040257600080fd5b50600d5461024a9060ff1681565b34801561041c57600080fd5b506102ec600181565b34801561043157600080fd5b506102d961044036600461230c565b610ca1565b34801561045157600080fd5b506102d9610460366004612428565b610cbc565b34801561047157600080fd5b506102ec610480366004612528565b610d66565b34801561049157600080fd5b506102d96104a03660046124e2565b610e07565b3480156104b157600080fd5b506102d9610e48565b3480156104c657600080fd5b50600b546102a1906001600160a01b031681565b3480156104e657600080fd5b506102a16104f5366004612528565b610f8e565b34801561050657600080fd5b506102ec61051536600461229c565b611005565b34801561052657600080fd5b506102d961108c565b34801561053b57600080fd5b506010546102a1906001600160a01b031681565b34801561055b57600080fd5b506102ec66f523226980800081565b34801561057657600080fd5b50600a546001600160a01b03166102a1565b34801561059457600080fd5b506102746110c2565b3480156105a957600080fd5b5060105461024a90600160a01b900460ff1681565b3480156105ca57600080fd5b506102d96105d93660046123c9565b6110d1565b3480156105ea57600080fd5b506102d96105f9366004612468565b611196565b34801561060a57600080fd5b506102d961061936600461234c565b611205565b34801561062a57600080fd5b506102d9610639366004612428565b61123d565b34801561064a57600080fd5b5061024a610659366004612528565b6114b3565b34801561066a57600080fd5b50610274610679366004612528565b611593565b34801561068a57600080fd5b50600d5461024a90610100900460ff1681565b3480156106a957600080fd5b5061024a6106b83660046122d4565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106f257600080fd5b506102ec600581565b34801561070757600080fd5b506102d961071636600461229c565b61166e565b60006001600160e01b0319821663780e9d6360e01b1480610740575061074082611706565b92915050565b60606000805461075590612773565b80601f016020809104026020016040519081016040528092919081815260200182805461078190612773565b80156107ce5780601f106107a3576101008083540402835291602001916107ce565b820191906000526020600020905b8154815290600101906020018083116107b157829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108565760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061087d82610f8e565b9050806001600160a01b0316836001600160a01b031614156108eb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161084d565b336001600160a01b0382161480610907575061090781336106b8565b6109795760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161084d565b6109838383611756565b505050565b600a546001600160a01b031633146109b25760405162461bcd60e51b815260040161084d9061263d565b60005b81811015610983576000600f60008585858181106109e357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906109f8919061229c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610a2a816127ae565b9150506109b5565b610a3c33826117c4565b610a585760405162461bcd60e51b815260040161084d90612672565b6109838383836118bb565b600d5460ff16610aa75760405162461bcd60e51b815260206004820152600f60248201526e283ab13634b1903737ba1037b832b760891b604482015260640161084d565b6005811115610aeb5760405162461bcd60e51b815260206004820152601060248201526f0a4cac2c6d040dac2f040e0cae440e8f60831b604482015260640161084d565b6000610af660085490565b90506103e7610b0583836126e5565b1115610b235760405162461bcd60e51b815260040161084d906126c3565b610b3466f523226980800083612711565b341015610b755760405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a59081c185e5b595b9d608a1b604482015260640161084d565b60005b8281101561098357610b9333610b8e83856126e5565b611a66565b80610b9d816127ae565b915050610b78565b6000610bb083611005565b8210610c125760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161084d565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610c655760405162461bcd60e51b815260040161084d9061263d565b600b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610c9e573d6000803e3d6000fd5b50565b61098383838360405180602001604052806000815250611205565b600a546001600160a01b03163314610ce65760405162461bcd60e51b815260040161084d9061263d565b60005b81811015610983576001600f6000858585818110610d1757634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610d2c919061229c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d5e816127ae565b915050610ce9565b6000610d7160085490565b8210610dd45760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161084d565b60088281548110610df557634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b600a546001600160a01b03163314610e315760405162461bcd60e51b815260040161084d9061263d565b8051610e4490600c90602084019061212e565b5050565b600d54610100900460ff16610e945760405162461bcd60e51b81526020600482015260126024820152712bb434ba32b634b9ba103737ba1037b832b760711b604482015260640161084d565b336000908152600f6020908152604080832054600e9092529091205460ff9091169081610ef55760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b604482015260640161084d565b60018110610f345760405162461bcd60e51b815260206004820152600c60248201526b115e18d95959081b1a5b5a5d60a21b604482015260640161084d565b6000610f3f60085490565b90506103e7610f4f6001836126e5565b10610f6c5760405162461bcd60e51b815260040161084d906126c3565b610f763382611a66565b5050336000908152600e602052604090206001905550565b6000818152600260205260408120546001600160a01b0316806107405760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161084d565b60006001600160a01b0382166110705760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161084d565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146110b65760405162461bcd60e51b815260040161084d9061263d565b6110c06000611a80565b565b60606001805461075590612773565b6001600160a01b03821633141561112a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161084d565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146111c05760405162461bcd60e51b815260040161084d9061263d565b600d80549215156101000261ff00199415159490941661ffff199093169290921792909217905560108054911515600160a01b0260ff60a01b19909216919091179055565b61120f33836117c4565b61122b5760405162461bcd60e51b815260040161084d90612672565b61123784848484611ad2565b50505050565b601054600160a01b900460ff166112965760405162461bcd60e51b815260206004820181905260248201527f42414d43207820414b20437962657220446f6c7068696e206e6f74206f70656e604482015260640161084d565b60006112a160085490565b90506103e76112b083836126e5565b11156112ce5760405162461bcd60e51b815260040161084d906126c3565b60005b8281101561123757601160008585848181106112fd57634e487b7160e01b600052603260045260246000fd5b602090810292909201358352508101919091526040016000205460ff16156113565760405162461bcd60e51b815260206004820152600c60248201526b151bdad95b881b5a5b9d195960a21b604482015260640161084d565b60105433906001600160a01b0316636352211e86868581811061138957634e487b7160e01b600052603260045260246000fd5b905060200201356040518263ffffffff1660e01b81526004016113ae91815260200190565b60206040518083038186803b1580156113c657600080fd5b505afa1580156113da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fe91906122b8565b6001600160a01b0316146114405760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015260640161084d565b61144e33610b8e83856126e5565b60016011600086868581811061147457634e487b7160e01b600052603260045260246000fd5b90506020020135815260200190815260200160002060006101000a81548160ff02191690831515021790555080806114ab906127ae565b9150506112d1565b6010546040516331a9108f60e11b81526004810183905260009182916001600160a01b0390911690636352211e9060240160206040518083038186803b1580156114fc57600080fd5b505afa158015611510573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153491906122b8565b6001600160a01b0316141561157d5760405162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08195e1a5cdd608a1b604482015260640161084d565b5060009081526011602052604090205460ff1690565b6000818152600260205260409020546060906001600160a01b03166116125760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161084d565b600061161c611b05565b9050600081511161163c5760405180602001604052806000815250611667565b8061164684611b14565b60405160200161165792919061256c565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146116985760405162461bcd60e51b815260040161084d9061263d565b6001600160a01b0381166116fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161084d565b610c9e81611a80565b60006001600160e01b031982166380ac58cd60e01b148061173757506001600160e01b03198216635b5e139f60e01b145b8061074057506301ffc9a760e01b6001600160e01b0319831614610740565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061178b82610f8e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661183d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161084d565b600061184883610f8e565b9050806001600160a01b0316846001600160a01b031614806118835750836001600160a01b0316611878846107d8565b6001600160a01b0316145b806118b357506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166118ce82610f8e565b6001600160a01b0316146119365760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161084d565b6001600160a01b0382166119985760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161084d565b6119a3838383611c2e565b6119ae600082611756565b6001600160a01b03831660009081526003602052604081208054600192906119d7908490612730565b90915550506001600160a01b0382166000908152600360205260408120805460019290611a059084906126e5565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610e44828260405180602001604052806000815250611ce6565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611add8484846118bb565b611ae984848484611d19565b6112375760405162461bcd60e51b815260040161084d906125eb565b6060600c805461075590612773565b606081611b385750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b625780611b4c816127ae565b9150611b5b9050600a836126fd565b9150611b3c565b60008167ffffffffffffffff811115611b8b57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611bb5576020820181803683370190505b5090505b84156118b357611bca600183612730565b9150611bd7600a866127c9565b611be29060306126e5565b60f81b818381518110611c0557634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611c27600a866126fd565b9450611bb9565b6001600160a01b038316611c8957611c8481600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611cac565b816001600160a01b0316836001600160a01b031614611cac57611cac8382611e26565b6001600160a01b038216611cc35761098381611ec3565b826001600160a01b0316826001600160a01b031614610983576109838282611f9c565b611cf08383611fe0565b611cfd6000848484611d19565b6109835760405162461bcd60e51b815260040161084d906125eb565b60006001600160a01b0384163b15611e1b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d5d90339089908890889060040161259b565b602060405180830381600087803b158015611d7757600080fd5b505af1925050508015611da7575060408051601f3d908101601f19168201909252611da4918101906124c6565b60015b611e01573d808015611dd5576040519150601f19603f3d011682016040523d82523d6000602084013e611dda565b606091505b508051611df95760405162461bcd60e51b815260040161084d906125eb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506118b3565b506001949350505050565b60006001611e3384611005565b611e3d9190612730565b600083815260076020526040902054909150808214611e90576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611ed590600190612730565b60008381526009602052604081205460088054939450909284908110611f0b57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060088381548110611f3a57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611f8057634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000611fa783611005565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166120365760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161084d565b6000818152600260205260409020546001600160a01b03161561209b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161084d565b6120a760008383611c2e565b6001600160a01b03821660009081526003602052604081208054600192906120d09084906126e5565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461213a90612773565b90600052602060002090601f01602090048101928261215c57600085556121a2565b82601f1061217557805160ff19168380011785556121a2565b828001600101855582156121a2579182015b828111156121a2578251825591602001919060010190612187565b506121ae9291506121b2565b5090565b5b808211156121ae57600081556001016121b3565b600067ffffffffffffffff808411156121e2576121e2612809565b604051601f8501601f19908116603f0116810190828211818310171561220a5761220a612809565b8160405280935085815286868601111561222357600080fd5b858560208301376000602087830101525050509392505050565b60008083601f84011261224e578182fd5b50813567ffffffffffffffff811115612265578182fd5b6020830191508360208260051b850101111561228057600080fd5b9250929050565b8035801515811461229757600080fd5b919050565b6000602082840312156122ad578081fd5b81356116678161281f565b6000602082840312156122c9578081fd5b81516116678161281f565b600080604083850312156122e6578081fd5b82356122f18161281f565b915060208301356123018161281f565b809150509250929050565b600080600060608486031215612320578081fd5b833561232b8161281f565b9250602084013561233b8161281f565b929592945050506040919091013590565b60008060008060808587031215612361578081fd5b843561236c8161281f565b9350602085013561237c8161281f565b925060408501359150606085013567ffffffffffffffff81111561239e578182fd5b8501601f810187136123ae578182fd5b6123bd878235602084016121c7565b91505092959194509250565b600080604083850312156123db578182fd5b82356123e68161281f565b91506123f460208401612287565b90509250929050565b6000806040838503121561240f578182fd5b823561241a8161281f565b946020939093013593505050565b6000806020838503121561243a578182fd5b823567ffffffffffffffff811115612450578283fd5b61245c8582860161223d565b90969095509350505050565b60008060006060848603121561247c578283fd5b61248584612287565b925061249360208501612287565b91506124a160408501612287565b90509250925092565b6000602082840312156124bb578081fd5b813561166781612834565b6000602082840312156124d7578081fd5b815161166781612834565b6000602082840312156124f3578081fd5b813567ffffffffffffffff811115612509578182fd5b8201601f81018413612519578182fd5b6118b3848235602084016121c7565b600060208284031215612539578081fd5b5035919050565b60008151808452612558816020860160208601612747565b601f01601f19169290920160200192915050565b6000835161257e818460208801612747565b835190830190612592818360208801612747565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906125ce90830184612540565b9695505050505050565b6020815260006116676020830184612540565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526008908201526714dbdb19081bdd5d60c21b604082015260600190565b600082198211156126f8576126f86127dd565b500190565b60008261270c5761270c6127f3565b500490565b600081600019048311821515161561272b5761272b6127dd565b500290565b600082821015612742576127426127dd565b500390565b60005b8381101561276257818101518382015260200161274a565b838111156112375750506000910152565b600181811c9082168061278757607f821691505b602082108114156127a857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156127c2576127c26127dd565b5060010190565b6000826127d8576127d86127f3565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610c9e57600080fd5b6001600160e01b031981168114610c9e57600080fdfea2646970667358221220dd510fdc1d69cc56be62f8023d9f99a9db56e7d03b147be6edc1fd2b156d3e5e64736f6c63430008040033

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

000000000000000000000000f5020b6dbaf2de2f244f86ef4ee53478c6ce2f220000000000000000000000004045754a9a150fcf6d30a72258d0fb220c42fb6a

-----Decoded View---------------
Arg [0] : _treasury (address): 0xf5020B6DbaF2De2F244f86ef4EE53478C6ce2F22
Arg [1] : _bamc48h (address): 0x4045754A9a150FcF6d30a72258D0fb220c42fB6A

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f5020b6dbaf2de2f244f86ef4ee53478c6ce2f22
Arg [1] : 0000000000000000000000004045754a9a150fcf6d30a72258d0fb220c42fb6a


Deployed Bytecode Sourcemap

115:3456:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;909:222:5;;;;;;;;;;-1:-1:-1;909:222:5;;;;;:::i;:::-;;:::i;:::-;;;8168:14:13;;8161:22;8143:41;;8131:2;8116:18;909:222:5;;;;;;;;2349:98:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3860:217::-;;;;;;;;;;-1:-1:-1;3860:217:4;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7466:32:13;;;7448:51;;7436:2;7421:18;3860:217:4;7403:102:13;3398:401:4;;;;;;;;;;-1:-1:-1;3398:401:4;;;;;:::i;:::-;;:::i;:::-;;1534:111:5;;;;;;;;;;-1:-1:-1;1621:10:5;:17;1534:111;;;20043:25:13;;;20031:2;20016:18;1534:111:5;19998:76:13;3266:190:1;;;;;;;;;;-1:-1:-1;3266:190:1;;;;;:::i;:::-;;:::i;4724:330:4:-;;;;;;;;;;-1:-1:-1;4724:330:4;;;;;:::i;:::-;;:::i;866:419:1:-;;;;;;:::i;:::-;;:::i;1210:253:5:-;;;;;;;;;;-1:-1:-1;1210:253:5;;;;;:::i;:::-;;:::i;166:40:1:-;;;;;;;;;;;;203:3;166:40;;2494:149;;;;;;;;;;-1:-1:-1;2494:149:1;;;;;:::i;:::-;-1:-1:-1;;;;;2589:25:1;2556:4;2589:25;;;:15;:25;;;;;;;;;2616:9;:19;;;;;;;2589:25;;;;;2494:149;;;;;8388:14:13;;8381:22;8363:41;;8435:2;8420:18;;8413:34;;;;8336:18;2494:149:1;8318:135:13;3466:103:1;;;;;;;;;;;;;:::i;415:24::-;;;;;;;;;;-1:-1:-1;415:24:1;;;;;;;;257:41;;;;;;;;;;;;297:1;257:41;;5120:179:4;;;;;;;;;;-1:-1:-1;5120:179:4;;;;;:::i;:::-;;:::i;3071:189:1:-;;;;;;;;;;-1:-1:-1;3071:189:1;;;;;:::i;:::-;;:::i;1717:230:5:-;;;;;;;;;;-1:-1:-1;1717:230:5;;;;;:::i;:::-;;:::i;2766:99:1:-;;;;;;;;;;-1:-1:-1;2766:99:1;;;;;:::i;:::-;;:::i;1291:458::-;;;;;;;;;;;;;:::i;353:23::-;;;;;;;;;;-1:-1:-1;353:23:1;;;;-1:-1:-1;;;;;353:23:1;;;2052:235:4;;;;;;;;;;-1:-1:-1;2052:235:4;;;;;:::i;:::-;;:::i;1790:205::-;;;;;;;;;;-1:-1:-1;1790:205:4;;;;;:::i;:::-;;:::i;1598:92:11:-;;;;;;;;;;;;;:::i;582:22:1:-;;;;;;;;;;-1:-1:-1;582:22:1;;;;-1:-1:-1;;;;;582:22:1;;;304:43;;;;;;;;;;;;336:11;304:43;;966:85:11;;;;;;;;;;-1:-1:-1;1038:6:11;;-1:-1:-1;;;;;1038:6:11;966:85;;2511:102:4;;;;;;;;;;;;;:::i;610:25:1:-;;;;;;;;;;-1:-1:-1;610:25:1;;;;-1:-1:-1;;;610:25:1;;;;;;4144:290:4;;;;;;;;;;-1:-1:-1;4144:290:4;;;;;:::i;:::-;;:::i;2871:194:1:-;;;;;;;;;;-1:-1:-1;2871:194:1;;;;;:::i;:::-;;:::i;5365:320:4:-;;;;;;;;;;-1:-1:-1;5365:320:4;;;;;:::i;:::-;;:::i;1755:534:1:-;;;;;;;;;;-1:-1:-1;1755:534:1;;;;;:::i;:::-;;:::i;2295:193::-;;;;;;;;;;-1:-1:-1;2295:193:1;;;;;:::i;:::-;;:::i;2679:329:4:-;;;;;;;;;;-1:-1:-1;2679:329:4;;;;;:::i;:::-;;:::i;445:26:1:-;;;;;;;;;;-1:-1:-1;445:26:1;;;;;;;;;;;4500:162:4;;;;;;;;;;-1:-1:-1;4500:162:4;;;;;:::i;:::-;-1:-1:-1;;;;;4620:25:4;;;4597:4;4620:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4500:162;212:39:1;;;;;;;;;;;;250:1;212:39;;1839:189:11;;;;;;;;;;-1:-1:-1;1839:189:11;;;;;:::i;:::-;;:::i;909:222:5:-;1011:4;-1:-1:-1;;;;;;1034:50:5;;-1:-1:-1;;;1034:50:5;;:90;;;1088:36;1112:11;1088:23;:36::i;:::-;1027:97;909:222;-1:-1:-1;;909:222:5:o;2349:98:4:-;2403:13;2435:5;2428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:98;:::o;3860:217::-;3936:7;7245:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7245:16:4;3955:73;;;;-1:-1:-1;;;3955:73:4;;14514:2:13;3955:73:4;;;14496:21:13;14553:2;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;-1:-1:-1;;;14643:18:13;;;14636:42;14695:19;;3955:73:4;;;;;;;;;-1:-1:-1;4046:24:4;;;;:15;:24;;;;;;-1:-1:-1;;;;;4046:24:4;;3860:217::o;3398:401::-;3478:13;3494:23;3509:7;3494:14;:23::i;:::-;3478:39;;3541:5;-1:-1:-1;;;;;3535:11:4;:2;-1:-1:-1;;;;;3535:11:4;;;3527:57;;;;-1:-1:-1;;;3527:57:4;;16819:2:13;3527:57:4;;;16801:21:13;16858:2;16838:18;;;16831:30;16897:34;16877:18;;;16870:62;-1:-1:-1;;;16948:18:13;;;16941:31;16989:19;;3527:57:4;16791:223:13;3527:57:4;666:10:2;-1:-1:-1;;;;;3616:21:4;;;;:62;;-1:-1:-1;3641:37:4;3658:5;666:10:2;4500:162:4;:::i;3641:37::-;3595:165;;;;-1:-1:-1;;;3595:165:4;;12222:2:13;3595:165:4;;;12204:21:13;12261:2;12241:18;;;12234:30;12300:34;12280:18;;;12273:62;12371:26;12351:18;;;12344:54;12415:19;;3595:165:4;12194:246:13;3595:165:4;3771:21;3780:2;3784:7;3771:8;:21::i;:::-;3398:401;;;:::o;3266:190:1:-;1038:6:11;;-1:-1:-1;;;;;1038:6:11;666:10:2;1178:23:11;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;3352:9:1::1;3347:103;3363:19:::0;;::::1;3347:103;;;3434:5;3403:15;:28;3419:8;;3428:1;3419:11;;;;;-1:-1:-1::0;;;3419:11:1::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3403:28:1::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;3403:28:1;:36;;-1:-1:-1;;3403:36:1::1;::::0;::::1;;::::0;;;::::1;::::0;;3384:3;::::1;::::0;::::1;:::i;:::-;;;;3347:103;;4724:330:4::0;4913:41;666:10:2;4946:7:4;4913:18;:41::i;:::-;4905:103;;;;-1:-1:-1;;;4905:103:4;;;;;;;:::i;:::-;5019:28;5029:4;5035:2;5039:7;5019:9;:28::i;866:419:1:-;932:12;;;;924:40;;;;-1:-1:-1;;;924:40:1;;16475:2:13;924:40:1;;;16457:21:13;16514:2;16494:18;;;16487:30;-1:-1:-1;;;16533:18:13;;;16526:45;16588:18;;924:40:1;16447:165:13;924:40:1;250:1;982:3;:18;;974:47;;;;-1:-1:-1;;;974:47:1;;17565:2:13;974:47:1;;;17547:21:13;17604:2;17584:18;;;17577:30;-1:-1:-1;;;17623:18:13;;;17616:46;17679:18;;974:47:1;17537:166:13;974:47:1;1031:14;1048:13;1621:10:5;:17;;1534:111;1048:13:1;1031:30;-1:-1:-1;203:3:1;1079:12;1088:3;1031:30;1079:12;:::i;:::-;:26;;1071:47;;;;-1:-1:-1;;;1071:47:1;;;;;;;:::i;:::-;1149:11;336;1149:3;:11;:::i;:::-;1136:9;:24;;1128:52;;;;-1:-1:-1;;;1128:52:1;;17221:2:13;1128:52:1;;;17203:21:13;17260:2;17240:18;;;17233:30;-1:-1:-1;;;17279:18:13;;;17272:45;17334:18;;1128:52:1;17193:165:13;1128:52:1;1196:9;1191:88;1211:3;1207:1;:7;1191:88;;;1235:33;1245:10;1257;1266:1;1257:6;:10;:::i;:::-;1235:9;:33::i;:::-;1216:3;;;;:::i;:::-;;;;1191:88;;1210:253:5;1307:7;1342:23;1359:5;1342:16;:23::i;:::-;1334:5;:31;1326:87;;;;-1:-1:-1;;;1326:87:5;;9108:2:13;1326:87:5;;;9090:21:13;9147:2;9127:18;;;9120:30;9186:34;9166:18;;;9159:62;-1:-1:-1;;;9237:18:13;;;9230:41;9288:19;;1326:87:5;9080:233:13;1326:87:5;-1:-1:-1;;;;;;1430:19:5;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;1210:253::o;3466:103:1:-;1038:6:11;;-1:-1:-1;;;;;1038:6:11;666:10:2;1178:23:11;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;3521:8:1::1;::::0;3513:49:::1;::::0;-1:-1:-1;;;;;3521:8:1;;::::1;::::0;3540:21:::1;3513:49:::0;::::1;;;::::0;3521:8:::1;3513:49:::0;3521:8;3513:49;3540:21;3521:8;3513:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;3466:103::o:0;5120:179:4:-;5253:39;5270:4;5276:2;5280:7;5253:39;;;;;;;;;;;;:16;:39::i;3071:189:1:-;1038:6:11;;-1:-1:-1;;;;;1038:6:11;666:10:2;1178:23:11;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;3157:9:1::1;3152:102;3168:19:::0;;::::1;3152:102;;;3239:4;3208:15;:28;3224:8;;3233:1;3224:11;;;;;-1:-1:-1::0;;;3224:11:1::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3208:28:1::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;3208:28:1;:35;;-1:-1:-1;;3208:35:1::1;::::0;::::1;;::::0;;;::::1;::::0;;3189:3;::::1;::::0;::::1;:::i;:::-;;;;3152:102;;1717:230:5::0;1792:7;1827:30;1621:10;:17;;1534:111;1827:30;1819:5;:38;1811:95;;;;-1:-1:-1;;;1811:95:5;;19342:2:13;1811:95:5;;;19324:21:13;19381:2;19361:18;;;19354:30;19420:34;19400:18;;;19393:62;-1:-1:-1;;;19471:18:13;;;19464:42;19523:19;;1811:95:5;19314:234:13;1811:95:5;1923:10;1934:5;1923:17;;;;;;-1:-1:-1;;;1923:17:5;;;;;;;;;;;;;;;;;1916:24;;1717:230;;;:::o;2766:99:1:-;1038:6:11;;-1:-1:-1;;;;;1038:6:11;666:10:2;1178:23:11;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;2836:22:1;;::::1;::::0;:12:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;2766:99:::0;:::o;1291:458::-;1336:14;;;;;;;1328:45;;;;-1:-1:-1;;;1328:45:1;;10346:2:13;1328:45:1;;;10328:21:13;10385:2;10365:18;;;10358:30;-1:-1:-1;;;10404:18:13;;;10397:48;10462:18;;1328:45:1;10318:168:13;1328:45:1;1433:10;1384:16;2589:25;;;:15;:25;;;;;;;;;2616:9;:19;;;;;;;2589:25;;;;;;1454:39;;;;-1:-1:-1;;;1454:39:1;;12647:2:13;1454:39:1;;;12629:21:13;12686:2;12666:18;;;12659:30;-1:-1:-1;;;12705:18:13;;;12698:45;12760:18;;1454:39:1;12619:165:13;1454:39:1;297:1;1511:5;:21;1503:46;;;;-1:-1:-1;;;1503:46:1;;14173:2:13;1503:46:1;;;14155:21:13;14212:2;14192:18;;;14185:30;-1:-1:-1;;;14231:18:13;;;14224:42;14283:18;;1503:46:1;14145:162:13;1503:46:1;1559:14;1576:13;1621:10:5;:17;;1534:111;1576:13:1;1559:30;-1:-1:-1;203:3:1;1607:22;297:1;1559:30;1607:22;:::i;:::-;:35;1599:56;;;;-1:-1:-1;;;1599:56:1;;;;;;;:::i;:::-;1666:29;1676:10;1688:6;1666:9;:29::i;:::-;-1:-1:-1;;1715:10:1;1705:21;;;;:9;:21;;;;;297:1;1705:37;;-1:-1:-1;1291:458:1:o;2052:235:4:-;2124:7;2159:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2159:16:4;2193:19;2185:73;;;;-1:-1:-1;;;2185:73:4;;13402:2:13;2185:73:4;;;13384:21:13;13441:2;13421:18;;;13414:30;13480:34;13460:18;;;13453:62;-1:-1:-1;;;13531:18:13;;;13524:39;13580:19;;2185:73:4;13374:231:13;1790:205:4;1862:7;-1:-1:-1;;;;;1889:19:4;;1881:74;;;;-1:-1:-1;;;1881:74:4;;12991:2:13;1881:74:4;;;12973:21:13;13030:2;13010:18;;;13003:30;13069:34;13049:18;;;13042:62;-1:-1:-1;;;13120:18:13;;;13113:40;13170:19;;1881:74:4;12963:232:13;1881:74:4;-1:-1:-1;;;;;;1972:16:4;;;;;:9;:16;;;;;;;1790:205::o;1598:92:11:-;1038:6;;-1:-1:-1;;;;;1038:6:11;666:10:2;1178:23:11;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;2511:102:4:-;2567:13;2599:7;2592:14;;;;;:::i;4144:290::-;-1:-1:-1;;;;;4246:24:4;;666:10:2;4246:24:4;;4238:62;;;;-1:-1:-1;;;4238:62:4;;11455:2:13;4238:62:4;;;11437:21:13;11494:2;11474:18;;;11467:30;11533:27;11513:18;;;11506:55;11578:18;;4238:62:4;11427:175:13;4238:62:4;666:10:2;4311:32:4;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;4311:42:4;;;;;;;;;;;;:53;;-1:-1:-1;;4311:53:4;;;;;;;;;;4379:48;;8143:41:13;;;4311:42:4;;666:10:2;4379:48:4;;8116:18:13;4379:48:4;;;;;;;4144:290;;:::o;2871:194:1:-;1038:6:11;;-1:-1:-1;;;;;1038:6:11;666:10:2;1178:23:11;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;2966:12:1::1;:22:::0;;2998:26;::::1;;2966:22;2998:26;-1:-1:-1::0;;2966:22:1;::::1;;2998:26:::0;;;;-1:-1:-1;;2998:26:1;;;;;;;;;;::::1;::::0;;3034:13:::1;:24:::0;;;::::1;;-1:-1:-1::0;;;3034:24:1::1;-1:-1:-1::0;;;;3034:24:1;;::::1;::::0;;;::::1;::::0;;2871:194::o;5365:320:4:-;5534:41;666:10:2;5567:7:4;5534:18;:41::i;:::-;5526:103;;;;-1:-1:-1;;;5526:103:4;;;;;;;:::i;:::-;5639:39;5653:4;5659:2;5663:7;5672:5;5639:13;:39::i;:::-;5365:320;;;;:::o;1755:534:1:-;1826:13;;-1:-1:-1;;;1826:13:1;;;;1818:58;;;;-1:-1:-1;;;1818:58:1;;16114:2:13;1818:58:1;;;16096:21:13;;;16133:18;;;16126:30;16192:34;16172:18;;;16165:62;16244:18;;1818:58:1;16086:182:13;1818:58:1;1886:14;1903:13;1621:10:5;:17;;1534:111;1903:13:1;1886:30;-1:-1:-1;203:3:1;1934:20;1943:4;1886:30;1934:20;:::i;:::-;:34;;1926:55;;;;-1:-1:-1;;;1926:55:1;;;;;;;:::i;:::-;2005:9;2000:283;2016:15;;;2000:283;;;2060:13;:22;2074:4;;2079:1;2074:7;;;;;-1:-1:-1;;;2074:7:1;;;;;;;;;;;;;;;;;;2060:22;;-1:-1:-1;2060:22:1;;;;;;;;-1:-1:-1;2060:22:1;;;;:31;2052:56;;;;-1:-1:-1;;;2052:56:1;;19001:2:13;2052:56:1;;;18983:21:13;19040:2;19020:18;;;19013:30;-1:-1:-1;;;19059:18:13;;;19052:42;19111:18;;2052:56:1;18973:162:13;2052:56:1;2130:7;;2158:10;;-1:-1:-1;;;;;2130:7:1;:15;2146:4;;2151:1;2146:7;;;;;-1:-1:-1;;;2146:7:1;;;;;;;;;;;;;;;2130:24;;;;;;;;;;;;;20043:25:13;;20031:2;20016:18;;19998:76;2130:24:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2130:38:1;;2122:60;;;;-1:-1:-1;;;2122:60:1;;17910:2:13;2122:60:1;;;17892:21:13;17949:1;17929:18;;;17922:29;-1:-1:-1;;;17967:18:13;;;17960:39;18016:18;;2122:60:1;17882:158:13;2122:60:1;2196:33;2206:10;2218;2227:1;2218:6;:10;:::i;2196:33::-;2268:4;2243:13;:22;2257:4;;2262:1;2257:7;;;;;-1:-1:-1;;;2257:7:1;;;;;;;;;;;;;;;2243:22;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;2033:3;;;;;:::i;:::-;;;;2000:283;;2295:193;2382:7;;:25;;-1:-1:-1;;;2382:25:1;;;;;20043::13;;;2359:4:1;;;;-1:-1:-1;;;;;2382:7:1;;;;:15;;20016:18:13;;2382:25:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2382:39:1;;;2374:67;;;;-1:-1:-1;;;2374:67:1;;19755:2:13;2374:67:1;;;19737:21:13;19794:2;19774:18;;;19767:30;-1:-1:-1;;;19813:18:13;;;19806:45;19868:18;;2374:67:1;19727:165:13;2374:67:1;-1:-1:-1;2458:23:1;;;;:13;:23;;;;;;;;;2295:193::o;2679:329:4:-;7222:4;7245:16;;;:7;:16;;;;;;2752:13;;-1:-1:-1;;;;;7245:16:4;2777:76;;;;-1:-1:-1;;;2777:76:4;;15698:2:13;2777:76:4;;;15680:21:13;15737:2;15717:18;;;15710:30;15776:34;15756:18;;;15749:62;-1:-1:-1;;;15827:18:13;;;15820:45;15882:19;;2777:76:4;15670:237:13;2777:76:4;2864:21;2888:10;:8;:10::i;:::-;2864:34;;2939:1;2921:7;2915:21;:25;:86;;;;;;;;;;;;;;;;;2967:7;2976:18;:7;:16;:18::i;:::-;2950:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2915:86;2908:93;2679:329;-1:-1:-1;;;2679:329:4:o;1839:189:11:-;1038:6;;-1:-1:-1;;;;;1038:6:11;666:10:2;1178:23:11;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;-1:-1:-1;;;;;1927:22:11;::::1;1919:73;;;::::0;-1:-1:-1;;;1919:73:11;;9939:2:13;1919:73:11::1;::::0;::::1;9921:21:13::0;9978:2;9958:18;;;9951:30;10017:34;9997:18;;;9990:62;-1:-1:-1;;;10068:18:13;;;10061:36;10114:19;;1919:73:11::1;9911:228:13::0;1919:73:11::1;2002:19;2012:8;2002:9;:19::i;1431:300:4:-:0;1533:4;-1:-1:-1;;;;;;1568:40:4;;-1:-1:-1;;;1568:40:4;;:104;;-1:-1:-1;;;;;;;1624:48:4;;-1:-1:-1;;;1624:48:4;1568:104;:156;;;-1:-1:-1;;;;;;;;;;871:40:3;;;1688:36:4;763:155:3;11008:171:4;11082:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;11082:29:4;-1:-1:-1;;;;;11082:29:4;;;;;;;;:24;;11135:23;11082:24;11135:14;:23::i;:::-;-1:-1:-1;;;;;11126:46:4;;;;;;;;;;;11008:171;;:::o;7440:344::-;7533:4;7245:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7245:16:4;7549:73;;;;-1:-1:-1;;;7549:73:4;;11809:2:13;7549:73:4;;;11791:21:13;11848:2;11828:18;;;11821:30;11887:34;11867:18;;;11860:62;-1:-1:-1;;;11938:18:13;;;11931:42;11990:19;;7549:73:4;11781:234:13;7549:73:4;7632:13;7648:23;7663:7;7648:14;:23::i;:::-;7632:39;;7700:5;-1:-1:-1;;;;;7689:16:4;:7;-1:-1:-1;;;;;7689:16:4;;:51;;;;7733:7;-1:-1:-1;;;;;7709:31:4;:20;7721:7;7709:11;:20::i;:::-;-1:-1:-1;;;;;7709:31:4;;7689:51;:87;;;-1:-1:-1;;;;;;4620:25:4;;;4597:4;4620:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7744:32;7681:96;7440:344;-1:-1:-1;;;;7440:344:4:o;10337:560::-;10491:4;-1:-1:-1;;;;;10464:31:4;:23;10479:7;10464:14;:23::i;:::-;-1:-1:-1;;;;;10464:31:4;;10456:85;;;;-1:-1:-1;;;10456:85:4;;15288:2:13;10456:85:4;;;15270:21:13;15327:2;15307:18;;;15300:30;15366:34;15346:18;;;15339:62;-1:-1:-1;;;15417:18:13;;;15410:39;15466:19;;10456:85:4;15260:231:13;10456:85:4;-1:-1:-1;;;;;10559:16:4;;10551:65;;;;-1:-1:-1;;;10551:65:4;;11050:2:13;10551:65:4;;;11032:21:13;11089:2;11069:18;;;11062:30;11128:34;11108:18;;;11101:62;-1:-1:-1;;;11179:18:13;;;11172:34;11223:19;;10551:65:4;11022:226:13;10551:65:4;10627:39;10648:4;10654:2;10658:7;10627:20;:39::i;:::-;10728:29;10745:1;10749:7;10728:8;:29::i;:::-;-1:-1:-1;;;;;10768:15:4;;;;;;:9;:15;;;;;:20;;10787:1;;10768:15;:20;;10787:1;;10768:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10798:13:4;;;;;;:9;:13;;;;;:18;;10815:1;;10798:13;:18;;10815:1;;10798:18;:::i;:::-;;;;-1:-1:-1;;10826:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10826:21:4;-1:-1:-1;;;;;10826:21:4;;;;;;;;;10863:27;;10826:16;;10863:27;;;;;;;10337:560;;;:::o;8114:108::-;8189:26;8199:2;8203:7;8189:26;;;;;;;;;;;;:9;:26::i;2034:169:11:-;2108:6;;;-1:-1:-1;;;;;2124:17:11;;;-1:-1:-1;;;;;;2124:17:11;;;;;;;2156:40;;2108:6;;;2124:17;2108:6;;2156:40;;2089:16;;2156:40;2034:169;;:::o;6547:307:4:-;6698:28;6708:4;6714:2;6718:7;6698:9;:28::i;:::-;6744:48;6767:4;6773:2;6777:7;6786:5;6744:22;:48::i;:::-;6736:111;;;;-1:-1:-1;;;6736:111:4;;;;;;;:::i;2649::1:-;2709:13;2741:12;2734:19;;;;;:::i;275:703:12:-;331:13;548:10;544:51;;-1:-1:-1;;574:10:12;;;;;;;;;;;;-1:-1:-1;;;574:10:12;;;;;275:703::o;544:51::-;619:5;604:12;658:75;665:9;;658:75;;690:8;;;;:::i;:::-;;-1:-1:-1;712:10:12;;-1:-1:-1;720:2:12;712:10;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;-1:-1:-1;;;764:17:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;764:17:12;;742:39;;791:150;798:10;;791:150;;824:11;834:1;824:11;;:::i;:::-;;-1:-1:-1;892:10:12;900:2;892:5;:10;:::i;:::-;879:24;;:2;:24;:::i;:::-;866:39;;849:6;856;849:14;;;;;;-1:-1:-1;;;849:14:12;;;;;;;;;;;;:56;-1:-1:-1;;;;;849:56:12;;;;;;;;-1:-1:-1;919:11:12;928:2;919:11;;:::i;:::-;;;791:150;;2543:572:5;-1:-1:-1;;;;;2742:18:5;;2738:183;;2776:40;2808:7;3924:10;:17;;3897:24;;;;:15;:24;;;;;:44;;;3951:24;;;;;;;;;;;;3821:161;2776:40;2738:183;;;2845:2;-1:-1:-1;;;;;2837:10:5;:4;-1:-1:-1;;;;;2837:10:5;;2833:88;;2863:47;2896:4;2902:7;2863:32;:47::i;:::-;-1:-1:-1;;;;;2934:16:5;;2930:179;;2966:45;3003:7;2966:36;:45::i;2930:179::-;3038:4;-1:-1:-1;;;;;3032:10:5;:2;-1:-1:-1;;;;;3032:10:5;;3028:81;;3058:40;3086:2;3090:7;3058:27;:40::i;8443:311:4:-;8568:18;8574:2;8578:7;8568:5;:18::i;:::-;8617:54;8648:1;8652:2;8656:7;8665:5;8617:22;:54::i;:::-;8596:151;;;;-1:-1:-1;;;8596:151:4;;;;;;;:::i;11732:778::-;11882:4;-1:-1:-1;;;;;11902:13:4;;1034:20:0;1080:8;11898:606:4;;11937:72;;-1:-1:-1;;;11937:72:4;;-1:-1:-1;;;;;11937:36:4;;;;;:72;;666:10:2;;11988:4:4;;11994:7;;12003:5;;11937:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11937:72:4;;;;;;;;-1:-1:-1;;11937:72:4;;;;;;;;;;;;:::i;:::-;;;11933:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12176:13:4;;12172:266;;12218:60;;-1:-1:-1;;;12218:60:4;;;;;;;:::i;12172:266::-;12390:6;12384:13;12375:6;12371:2;12367:15;12360:38;11933:519;-1:-1:-1;;;;;;12059:51:4;-1:-1:-1;;;12059:51:4;;-1:-1:-1;12052:58:4;;11898:606;-1:-1:-1;12489:4:4;11732:778;;;;;;:::o;4599:970:5:-;4861:22;4911:1;4886:22;4903:4;4886:16;:22::i;:::-;:26;;;;:::i;:::-;4922:18;4943:26;;;:17;:26;;;;;;4861:51;;-1:-1:-1;5073:28:5;;;5069:323;;-1:-1:-1;;;;;5139:18:5;;5117:19;5139:18;;;:12;:18;;;;;;;;:34;;;;;;;;;5188:30;;;;;;:44;;;5304:30;;:17;:30;;;;;:43;;;5069:323;-1:-1:-1;5485:26:5;;;;:17;:26;;;;;;;;5478:33;;;-1:-1:-1;;;;;5528:18:5;;;;;:12;:18;;;;;:34;;;;;;;5521:41;4599:970::o;5857:1061::-;6131:10;:17;6106:22;;6131:21;;6151:1;;6131:21;:::i;:::-;6162:18;6183:24;;;:15;:24;;;;;;6551:10;:26;;6106:46;;-1:-1:-1;6183:24:5;;6106:46;;6551:26;;;;-1:-1:-1;;;6551:26:5;;;;;;;;;;;;;;;;;6529:48;;6613:11;6588:10;6599;6588:22;;;;;;-1:-1:-1;;;6588:22:5;;;;;;;;;;;;;;;;;;;;:36;;;;6692:28;;;:15;:28;;;;;;;:41;;;6861:24;;;;;6854:31;6895:10;:16;;;;;-1:-1:-1;;;6895:16:5;;;;;;;;;;;;;;;;;;;;;;;;;;5857:1061;;;;:::o;3409:217::-;3493:14;3510:20;3527:2;3510:16;:20::i;:::-;-1:-1:-1;;;;;3540:16:5;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;3584:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;3409:217:5:o;9076:372:4:-;-1:-1:-1;;;;;9155:16:4;;9147:61;;;;-1:-1:-1;;;9147:61:4;;13812:2:13;9147:61:4;;;13794:21:13;;;13831:18;;;13824:30;13890:34;13870:18;;;13863:62;13942:18;;9147:61:4;13784:182:13;9147:61:4;7222:4;7245:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7245:16:4;:30;9218:58;;;;-1:-1:-1;;;9218:58:4;;10693:2:13;9218:58:4;;;10675:21:13;10732:2;10712:18;;;10705:30;10771;10751:18;;;10744:58;10819:18;;9218:58:4;10665:178:13;9218:58:4;9287:45;9316:1;9320:2;9324:7;9287:20;:45::i;:::-;-1:-1:-1;;;;;9343:13:4;;;;;;:9;:13;;;;;:18;;9360:1;;9343:13;:18;;9360:1;;9343:18;:::i;:::-;;;;-1:-1:-1;;9371:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9371:21:4;-1:-1:-1;;;;;9371:21:4;;;;;;;;9408:33;;9371:16;;;9408:33;;9371:16;;9408:33;9076:372;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:13;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:13;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:395::-;713:8;723:6;777:3;770:4;762:6;758:17;754:27;744:2;;802:8;792;785:26;744:2;-1:-1:-1;832:20:13;;875:18;864:30;;861:2;;;914:8;904;897:26;861:2;958:4;950:6;946:17;934:29;;1018:3;1011:4;1001:6;998:1;994:14;986:6;982:27;978:38;975:47;972:2;;;1035:1;1032;1025:12;972:2;734:311;;;;;:::o;1050:160::-;1115:20;;1171:13;;1164:21;1154:32;;1144:2;;1200:1;1197;1190:12;1144:2;1096:114;;;:::o;1215:257::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:2;;;1348:6;1340;1333:22;1295:2;1392:9;1379:23;1411:31;1436:5;1411:31;:::i;1477:261::-;1547:6;1600:2;1588:9;1579:7;1575:23;1571:32;1568:2;;;1621:6;1613;1606:22;1568:2;1658:9;1652:16;1677:31;1702:5;1677:31;:::i;1743:398::-;1811:6;1819;1872:2;1860:9;1851:7;1847:23;1843:32;1840:2;;;1893:6;1885;1878:22;1840:2;1937:9;1924:23;1956:31;1981:5;1956:31;:::i;:::-;2006:5;-1:-1:-1;2063:2:13;2048:18;;2035:32;2076:33;2035:32;2076:33;:::i;:::-;2128:7;2118:17;;;1830:311;;;;;:::o;2146:466::-;2223:6;2231;2239;2292:2;2280:9;2271:7;2267:23;2263:32;2260:2;;;2313:6;2305;2298:22;2260:2;2357:9;2344:23;2376:31;2401:5;2376:31;:::i;:::-;2426:5;-1:-1:-1;2483:2:13;2468:18;;2455:32;2496:33;2455:32;2496:33;:::i;:::-;2250:362;;2548:7;;-1:-1:-1;;;2602:2:13;2587:18;;;;2574:32;;2250:362::o;2617:824::-;2712:6;2720;2728;2736;2789:3;2777:9;2768:7;2764:23;2760:33;2757:2;;;2811:6;2803;2796:22;2757:2;2855:9;2842:23;2874:31;2899:5;2874:31;:::i;:::-;2924:5;-1:-1:-1;2981:2:13;2966:18;;2953:32;2994:33;2953:32;2994:33;:::i;:::-;3046:7;-1:-1:-1;3100:2:13;3085:18;;3072:32;;-1:-1:-1;3155:2:13;3140:18;;3127:32;3182:18;3171:30;;3168:2;;;3219:6;3211;3204:22;3168:2;3247:22;;3300:4;3292:13;;3288:27;-1:-1:-1;3278:2:13;;3334:6;3326;3319:22;3278:2;3362:73;3427:7;3422:2;3409:16;3404:2;3400;3396:11;3362:73;:::i;:::-;3352:83;;;2747:694;;;;;;;:::o;3446:325::-;3511:6;3519;3572:2;3560:9;3551:7;3547:23;3543:32;3540:2;;;3593:6;3585;3578:22;3540:2;3637:9;3624:23;3656:31;3681:5;3656:31;:::i;:::-;3706:5;-1:-1:-1;3730:35:13;3761:2;3746:18;;3730:35;:::i;:::-;3720:45;;3530:241;;;;;:::o;3776:325::-;3844:6;3852;3905:2;3893:9;3884:7;3880:23;3876:32;3873:2;;;3926:6;3918;3911:22;3873:2;3970:9;3957:23;3989:31;4014:5;3989:31;:::i;:::-;4039:5;4091:2;4076:18;;;;4063:32;;-1:-1:-1;;;3863:238:13:o;4106:457::-;4192:6;4200;4253:2;4241:9;4232:7;4228:23;4224:32;4221:2;;;4274:6;4266;4259:22;4221:2;4319:9;4306:23;4352:18;4344:6;4341:30;4338:2;;;4389:6;4381;4374:22;4338:2;4433:70;4495:7;4486:6;4475:9;4471:22;4433:70;:::i;:::-;4522:8;;4407:96;;-1:-1:-1;4211:352:13;-1:-1:-1;;;;4211:352:13:o;5030:326::-;5098:6;5106;5114;5167:2;5155:9;5146:7;5142:23;5138:32;5135:2;;;5188:6;5180;5173:22;5135:2;5216:26;5232:9;5216:26;:::i;:::-;5206:36;;5261:35;5292:2;5281:9;5277:18;5261:35;:::i;:::-;5251:45;;5315:35;5346:2;5335:9;5331:18;5315:35;:::i;:::-;5305:45;;5125:231;;;;;:::o;5361:255::-;5419:6;5472:2;5460:9;5451:7;5447:23;5443:32;5440:2;;;5493:6;5485;5478:22;5440:2;5537:9;5524:23;5556:30;5580:5;5556:30;:::i;5621:259::-;5690:6;5743:2;5731:9;5722:7;5718:23;5714:32;5711:2;;;5764:6;5756;5749:22;5711:2;5801:9;5795:16;5820:30;5844:5;5820:30;:::i;5885:480::-;5954:6;6007:2;5995:9;5986:7;5982:23;5978:32;5975:2;;;6028:6;6020;6013:22;5975:2;6073:9;6060:23;6106:18;6098:6;6095:30;6092:2;;;6143:6;6135;6128:22;6092:2;6171:22;;6224:4;6216:13;;6212:27;-1:-1:-1;6202:2:13;;6258:6;6250;6243:22;6202:2;6286:73;6351:7;6346:2;6333:16;6328:2;6324;6320:11;6286:73;:::i;6370:190::-;6429:6;6482:2;6470:9;6461:7;6457:23;6453:32;6450:2;;;6503:6;6495;6488:22;6450:2;-1:-1:-1;6531:23:13;;6440:120;-1:-1:-1;6440:120:13:o;6565:257::-;6606:3;6644:5;6638:12;6671:6;6666:3;6659:19;6687:63;6743:6;6736:4;6731:3;6727:14;6720:4;6713:5;6709:16;6687:63;:::i;:::-;6804:2;6783:15;-1:-1:-1;;6779:29:13;6770:39;;;;6811:4;6766:50;;6614:208;-1:-1:-1;;6614:208:13:o;6827:470::-;7006:3;7044:6;7038:13;7060:53;7106:6;7101:3;7094:4;7086:6;7082:17;7060:53;:::i;:::-;7176:13;;7135:16;;;;7198:57;7176:13;7135:16;7232:4;7220:17;;7198:57;:::i;:::-;7271:20;;7014:283;-1:-1:-1;;;;7014:283:13:o;7510:488::-;-1:-1:-1;;;;;7779:15:13;;;7761:34;;7831:15;;7826:2;7811:18;;7804:43;7878:2;7863:18;;7856:34;;;7926:3;7921:2;7906:18;;7899:31;;;7704:4;;7947:45;;7972:19;;7964:6;7947:45;:::i;:::-;7939:53;7713:285;-1:-1:-1;;;;;;7713:285:13:o;8682:219::-;8831:2;8820:9;8813:21;8794:4;8851:44;8891:2;8880:9;8876:18;8868:6;8851:44;:::i;9318:414::-;9520:2;9502:21;;;9559:2;9539:18;;;9532:30;9598:34;9593:2;9578:18;;9571:62;-1:-1:-1;;;9664:2:13;9649:18;;9642:48;9722:3;9707:19;;9492:240::o;14725:356::-;14927:2;14909:21;;;14946:18;;;14939:30;15005:34;15000:2;14985:18;;14978:62;15072:2;15057:18;;14899:182::o;18045:413::-;18247:2;18229:21;;;18286:2;18266:18;;;18259:30;18325:34;18320:2;18305:18;;18298:62;-1:-1:-1;;;18391:2:13;18376:18;;18369:47;18448:3;18433:19;;18219:239::o;18463:331::-;18665:2;18647:21;;;18704:1;18684:18;;;18677:29;-1:-1:-1;;;18737:2:13;18722:18;;18715:38;18785:2;18770:18;;18637:157::o;20079:128::-;20119:3;20150:1;20146:6;20143:1;20140:13;20137:2;;;20156:18;;:::i;:::-;-1:-1:-1;20192:9:13;;20127:80::o;20212:120::-;20252:1;20278;20268:2;;20283:18;;:::i;:::-;-1:-1:-1;20317:9:13;;20258:74::o;20337:168::-;20377:7;20443:1;20439;20435:6;20431:14;20428:1;20425:21;20420:1;20413:9;20406:17;20402:45;20399:2;;;20450:18;;:::i;:::-;-1:-1:-1;20490:9:13;;20389:116::o;20510:125::-;20550:4;20578:1;20575;20572:8;20569:2;;;20583:18;;:::i;:::-;-1:-1:-1;20620:9:13;;20559:76::o;20640:258::-;20712:1;20722:113;20736:6;20733:1;20730:13;20722:113;;;20812:11;;;20806:18;20793:11;;;20786:39;20758:2;20751:10;20722:113;;;20853:6;20850:1;20847:13;20844:2;;;-1:-1:-1;;20888:1:13;20870:16;;20863:27;20693:205::o;20903:380::-;20982:1;20978:12;;;;21025;;;21046:2;;21100:4;21092:6;21088:17;21078:27;;21046:2;21153;21145:6;21142:14;21122:18;21119:38;21116:2;;;21199:10;21194:3;21190:20;21187:1;21180:31;21234:4;21231:1;21224:15;21262:4;21259:1;21252:15;21116:2;;20958:325;;;:::o;21288:135::-;21327:3;-1:-1:-1;;21348:17:13;;21345:2;;;21368:18;;:::i;:::-;-1:-1:-1;21415:1:13;21404:13;;21335:88::o;21428:112::-;21460:1;21486;21476:2;;21491:18;;:::i;:::-;-1:-1:-1;21525:9:13;;21466:74::o;21545:127::-;21606:10;21601:3;21597:20;21594:1;21587:31;21637:4;21634:1;21627:15;21661:4;21658:1;21651:15;21677:127;21738:10;21733:3;21729:20;21726:1;21719:31;21769:4;21766:1;21759:15;21793:4;21790:1;21783:15;21809:127;21870:10;21865:3;21861:20;21858:1;21851:31;21901:4;21898:1;21891:15;21925:4;21922:1;21915:15;21941:131;-1:-1:-1;;;;;22016:31:13;;22006:42;;21996:2;;22062:1;22059;22052:12;22077:131;-1:-1:-1;;;;;;22151:32:13;;22141:43;;22131:2;;22198:1;22195;22188:12

Swarm Source

ipfs://dd510fdc1d69cc56be62f8023d9f99a9db56e7d03b147be6edc1fd2b156d3e5e
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.