Feature Tip: Add private address tag to any address under My Name Tag !
Overview
TokenID
2620
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DiamondExhibitionChoicePass
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 9999 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright 2023 PROOF Holdings Incpragma solidity ^0.8.15;import {ERC721A, ERC721ACommon, BaseTokenURI, ERC721ACommonBaseTokenURI} from "ethier/erc721/BaseTokenURI.sol";import {OperatorFilterOS} from "ethier/erc721/OperatorFilterOS.sol";import {TransferRestrictedRedeemableERC721ACommon,TransferRestriction} from "proof/redemption/voucher/TransferRestrictedRedeemableERC721ACommon.sol";import {SellableERC721ACommon} from "proof/sellers/sellable/SellableERC721ACommon.sol";import {RoleGatedFreeOfCharge} from "proof/sellers/presets/RoleGatedFreeOfCharge.sol";/*** @title Diamond Exhibition: Choice Pass* @notice A redeemable token airdropped to all day-1 nested Moonbirds that allows mints with preferences from the diamond exhibition.*/contract DiamondExhibitionChoicePass isERC721ACommonBaseTokenURI,OperatorFilterOS,SellableERC721ACommon,TransferRestrictedRedeemableERC721ACommon{/*** @notice The seller handling the airdrop.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright (c) 2023 the ethier authors (github.com/divergencetech/ethier)pragma solidity >=0.8.0 <0.9.0;import {AccessControlEnumerable} from "../utils/AccessControlEnumerable.sol";import {ERC721A, ERC721ACommon} from "./ERC721ACommon.sol";/*** @notice ERC721 extension that implements a commonly used _baseURI() function* to return an URL prefix that can be set by the contract steerer.*/contract BaseTokenURI is AccessControlEnumerable {/*** @notice Base token URI used as a prefix by tokenURI().*/string private _baseTokenURI;constructor(string memory baseTokenURI_) {_setBaseTokenURI(baseTokenURI_);}/*** @notice Sets the base token URI prefix.* @dev Only callable by the contract steerer.*/function setBaseTokenURI(string memory baseTokenURI_)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright (c) 2023 the ethier authors (github.com/divergencetech/ethier)pragma solidity >=0.8.0 <0.9.0;import {Address} from "@openzeppelin/contracts/utils/Address.sol";import {DefaultOperatorFilterer} from "operator-filter-registry/src/DefaultOperatorFilterer.sol";import {ERC721A, ERC721ACommon} from "./ERC721ACommon.sol";/*** @notice ERC721ACommon extension that adds Opensea's operator filtering.*/abstract contract OperatorFilterOS is ERC721ACommon, DefaultOperatorFilterer {using Address for address;/*** @notice Calling the operator filter registry with given calldata.* @dev The registry contract did not foresee role-based contract access* control -- only the contract itself, or its (EIP-173) owner is allowed to* change subscription settings. To work around this, we enforce* authorisation here and forward arbitrary calldata to the registry.* Use with care!*/function callOperatorFilterRegistry(bytes calldata cdata)externalonlyRole(DEFAULT_STEERING_ROLE)returns (bytes memory)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright 2023 PROOF Holdings Incpragma solidity ^0.8.16;import {ERC721A, ERC721ACommon} from "ethier/erc721/ERC721ACommon.sol";import {RedeemableERC721ACommon} from "./RedeemableERC721ACommon.sol";import {TransferRestriction,ERC721ATransferRestrictedBase,ERC721ATransferRestricted} from "../restricted/ERC721ATransferRestricted.sol";/*** @notice An ERC721 token intended to act as freely tradeable voucher.* @dev This is mainly a convenience wrapper.*/abstract contract TransferRestrictedRedeemableERC721ACommon is RedeemableERC721ACommon, ERC721ATransferRestricted {/*** @notice Overrides supportsInterface as required by inheritance.*/function supportsInterface(bytes4 interfaceId)publicviewvirtualoverride(RedeemableERC721ACommon, ERC721ACommon)returns (bool)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright 2023 PROOF Holdings Incpragma solidity >=0.8.0 <0.9.0;import {ERC721ACommon} from "ethier/erc721/ERC721ACommon.sol";import {AccessControlEnumerable, BaseSellable} from "./BaseSellable.sol";/*** @notice Base contract for sellable ERC721ACommon tokens.*/abstract contract SellableERC721ACommon is BaseSellable, ERC721ACommon {/*** @inheritdoc BaseSellable*/function _handleSale(address to, uint64 num, bytes calldata) internal virtual override {_mint(to, num);}function supportsInterface(bytes4 interfaceId)publicviewvirtualoverride(ERC721ACommon, AccessControlEnumerable)returns (bool){return ERC721ACommon.supportsInterface(interfaceId) || AccessControlEnumerable.supportsInterface(interfaceId);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright (c) 2021 the ethier authors (github.com/divergencetech/ethier)pragma solidity >=0.8.0 <0.9.0;import {ISellable, CallbackerWithAccessControl} from "./CallbackerWithAccessControl.sol";import {FixedSupply} from "../base/SupplyLimited.sol";/*** @notice Seller module that adds a role-gated free-of-charge purchase (e.g. to facilitate to owner mints).*/contract RoleGatedFreeOfCharge is CallbackerWithAccessControl, FixedSupply {error WrongNumSoldAfterPurchase(uint256 actual, uint256 expected);constructor(address admin, address steerer, ISellable sellable_, uint64 numMaxSellable_)CallbackerWithAccessControl(admin, steerer, sellable_)FixedSupply(numMaxSellable_){// solhint-disable-line no-empty-blocks}/*** @notice Encodes a free-of-charge purchase.* @param to The address to receive the purchased items.* @param num The number of items to purchase.*/struct Receiver {
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// Copyright (c) 2023 the ethier authors (github.com/divergencetech/ethier)pragma solidity >=0.8.0 <0.9.0;import {AccessControlEnumerable as ACE} from "@openzeppelin/contracts/access/AccessControlEnumerable.sol";contract AccessControlEnumerable is ACE {/// @notice The default role intended to perform access-restricted actions./// @dev We are using this instead of DEFAULT_ADMIN_ROLE because the latter/// is intended to grant/revoke roles and will be secured differently.bytes32 public constant DEFAULT_STEERING_ROLE =keccak256("DEFAULT_STEERING_ROLE");/// @dev Overrides supportsInterface so that inheriting contracts can/// reference this contract instead of OZ's version for further overrides.function supportsInterface(bytes4 interfaceId)publicviewvirtualoverride(ACE)returns (bool){return ACE.supportsInterface(interfaceId);}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright (c) 2022 the ethier authors (github.com/divergencetech/ethier)pragma solidity >=0.8.0 <0.9.0;import {ERC721A} from "erc721a/contracts/ERC721A.sol";import {ERC2981} from "@openzeppelin/contracts/token/common/ERC2981.sol";import {AccessControlEnumerable} from "../utils/AccessControlEnumerable.sol";import {AccessControlPausable} from "../utils/AccessControlPausable.sol";import {ERC4906} from "./ERC4906.sol";/**@notice An ERC721A contract with common functionality:- Pausable with toggling functions exposed to Owner only- ERC2981 royalties*/contract ERC721ACommon is ERC721A, AccessControlPausable, ERC2981, ERC4906 {constructor(address admin,address steerer,string memory name,string memory symbol,address payable royaltyReciever,uint96 royaltyBasisPoints) ERC721A(name, symbol) {_setDefaultRoyalty(royaltyReciever, royaltyBasisPoints);_grantRole(DEFAULT_ADMIN_ROLE, admin);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)pragma solidity ^0.8.1;/*** @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* ====*
1234567891011121314151617// SPDX-License-Identifier: MITpragma solidity ^0.8.13;import {OperatorFilterer} from "./OperatorFilterer.sol";import {CANONICAL_CORI_SUBSCRIPTION} from "./lib/Constants.sol";/*** @title DefaultOperatorFilterer* @notice Inherits from OperatorFilterer and automatically subscribes to the default OpenSea subscription.* @dev Please note that if your token contract does not provide an owner with EIP-173, it must provide* administration methods on the contract itself to interact with the registry otherwise the subscription* will be locked to the options set during construction.*/abstract contract DefaultOperatorFilterer is OperatorFilterer {/// @dev The constructor that is called when the contract is being deployed.constructor() OperatorFilterer(CANONICAL_CORI_SUBSCRIPTION, true) {}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright 2023 PROOF Holdings Incpragma solidity ^0.8.16;import {ERC721ACommon} from "ethier/erc721/ERC721ACommon.sol";import {BaseRedeemableToken} from "./BaseRedeemableToken.sol";/*** @notice An ERC721 token intended to act as freely tradeable voucher.* @dev This is mainly a convenience wrapper.*/abstract contract RedeemableERC721ACommon is BaseRedeemableToken, ERC721ACommon {// =========================================================================// Internals// =========================================================================/*** @notice Allows spending if the sender is the owner of or approved for* transfers of a given token.*/function _isSenderAllowedToSpend(address sender, uint256 tokenId)internalviewvirtualoverride
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.16 <0.9.0;import {ERC721ATransferRestrictedBase, TransferRestriction} from "./ERC721ATransferRestrictedBase.sol";/*** @notice Extension of ERC721 transfer restrictions with manual restriction* setter.*/abstract contract ERC721ATransferRestricted is ERC721ATransferRestrictedBase {// =========================================================================// Error// =========================================================================error TransferRestrictionLocked();error TransferRestrictionCheckFailed(TransferRestriction want);// =========================================================================// Storage// =========================================================================/*** @notice The current restrictions.*/TransferRestriction private _transferRestriction;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright 2023 PROOF Holdings Incpragma solidity >=0.8.0 <0.9.0;import {AccessControlEnumerable} from "ethier/utils/AccessControlEnumerable.sol";import {ISellable} from "../interfaces/ISellable.sol";/*** @notice A base contract for selling content via authorised sellers.*/abstract contract BaseSellable is ISellable, AccessControlEnumerable {/*** @notice Authorised sellers.*/bytes32 public constant AUTHORISED_SELLER_ROLE = keccak256("AUTHORISED_SELLER_ROLE");/*** @notice A role that cannot be granted or revoked.* @dev Used to lock in members of the `AUTHORISED_SELLER_ROLE` role.*/bytes32 private constant _NOOP_ROLE = keccak256("NOOP_ROLE");constructor() {_setRoleAdmin(AUTHORISED_SELLER_ROLE, DEFAULT_STEERING_ROLE);_setRoleAdmin(_NOOP_ROLE, _NOOP_ROLE);}
12345678910111213141516// SPDX-License-Identifier: MIT// Copyright 2023 PROOF Holdings Incpragma solidity ^0.8.16;import {AccessControlEnumerable} from "ethier/utils/AccessControlEnumerable.sol";import {ISellable, SellableCallbacker} from "../base/SellableCallbacker.sol";/*** @notice Base contract for seller presets that call back to a sellable contract.*/contract CallbackerWithAccessControl is SellableCallbacker, AccessControlEnumerable {constructor(address admin, address steerer, ISellable sellable_) SellableCallbacker(sellable_) {_grantRole(DEFAULT_ADMIN_ROLE, admin);_grantRole(DEFAULT_STEERING_ROLE, steerer);}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright 2023 PROOF Holdings Incpragma solidity >=0.8.0 <0.9.0;import {Seller} from "./Seller.sol";/*** @notice Seller module that adds an upper limit on the number of sellable items.*/abstract contract SupplyLimited is Seller {error SupplyLimitExceeded(uint64 numRequested, uint64 numLeft);/*** @notice The number of tokens that have already been sold by the seller.*/uint64 private _numSold;/*** @notice Returns the total number of items sold by this contract.*/function numSold() public view returns (uint64) {return _numSold;}/*** @notice Returns the total number of items sold by this contract.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.5.0) (access/AccessControlEnumerable.sol)pragma solidity ^0.8.0;import "./IAccessControlEnumerable.sol";import "./AccessControl.sol";import "../utils/structs/EnumerableSet.sol";/*** @dev Extension of {AccessControl} that allows enumerating the members of each role.*/abstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {using EnumerableSet for EnumerableSet.AddressSet;mapping(bytes32 => EnumerableSet.AddressSet) private _roleMembers;/*** @dev See {IERC165-supportsInterface}.*/function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId);}/*** @dev Returns one of the accounts that have `role`. `index` must be a
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// ERC721A Contracts v4.2.3// Creator: Chiru Labspragma solidity ^0.8.4;import './IERC721A.sol';/*** @dev Interface of ERC721 token receiver.*/interface ERC721A__IERC721Receiver {function onERC721Received(address operator,address from,uint256 tokenId,bytes calldata data) external returns (bytes4);}/*** @title ERC721A** @dev Implementation of the [ERC721](https://eips.ethereum.org/EIPS/eip-721)* Non-Fungible Token Standard, including the Metadata extension.* Optimized for lower gas during batch mints.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.7.0) (token/common/ERC2981.sol)pragma solidity ^0.8.0;import "../../interfaces/IERC2981.sol";import "../../utils/introspection/ERC165.sol";/*** @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information.** Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for* specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first.** Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the* fee is specified in basis points by default.** IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See* https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to* voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.** _Available since v4.5._*/abstract contract ERC2981 is IERC2981, ERC165 {struct RoyaltyInfo {address receiver;
1234567891011121314151617181920// SPDX-License-Identifier: MIT// Copyright (c) 2021 the ethier authors (github.com/divergencetech/ethier)pragma solidity >=0.8.0 <0.9.0;import {Pausable} from "@openzeppelin/contracts/security/Pausable.sol";import {AccessControlEnumerable} from "./AccessControlEnumerable.sol";/// @notice A Pausable contract that can only be toggled by a member of the/// STEERING role.contract AccessControlPausable is AccessControlEnumerable, Pausable {/// @notice Pauses the contract.function pause() public onlyRole(DEFAULT_STEERING_ROLE) {Pausable._pause();}/// @notice Unpauses the contract.function unpause() public onlyRole(DEFAULT_STEERING_ROLE) {Pausable._unpause();}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: CC0-1.0pragma solidity ^0.8.0;import {IERC165, ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol";interface IERC4906Events {/// @dev This event emits when the metadata of a token is changed./// So that the third-party platforms such as NFT market could/// timely update the images and related attributes of the NFT.event MetadataUpdate(uint256 _tokenId);/// @dev This event emits when the metadata of a range of tokens is changed./// So that the third-party platforms such as NFT market could/// timely update the images and related attributes of the NFTs.event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId);}/// @title EIP-721 Metadata Update Extension// solhint-disable-next-line no-empty-blocksinterface IERC4906 is IERC165, IERC4906Events {}contract ERC4906 is IERC4906, ERC165 {function _refreshMetadata(uint256 tokenId) internal {emit MetadataUpdate(tokenId);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.13;import {IOperatorFilterRegistry} from "./IOperatorFilterRegistry.sol";import {CANONICAL_OPERATOR_FILTER_REGISTRY_ADDRESS} from "./lib/Constants.sol";/*** @title OperatorFilterer* @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another* registrant's entries in the OperatorFilterRegistry.* @dev This smart contract is meant to be inherited by token contracts so they can use the following:* - `onlyAllowedOperator` modifier for `transferFrom` and `safeTransferFrom` methods.* - `onlyAllowedOperatorApproval` modifier for `approve` and `setApprovalForAll` methods.* Please note that if your token contract does not provide an owner with EIP-173, it must provide* administration methods on the contract itself to interact with the registry otherwise the subscription* will be locked to the options set during construction.*/abstract contract OperatorFilterer {/// @dev Emitted when an operator is not allowed.error OperatorNotAllowed(address operator);IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY =IOperatorFilterRegistry(CANONICAL_OPERATOR_FILTER_REGISTRY_ADDRESS);/// @dev The constructor that is called when the contract is being deployed.constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {
12345// SPDX-License-Identifier: MITpragma solidity ^0.8.13;address constant CANONICAL_OPERATOR_FILTER_REGISTRY_ADDRESS = 0x000000000000AAeB6D7670E522A718067333cd4E;address constant CANONICAL_CORI_SUBSCRIPTION = 0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright 2023 PROOF Holdings Incpragma solidity ^0.8.16;import {AccessControlEnumerable} from "ethier/utils/AccessControlEnumerable.sol";import {IRedeemableToken} from "../interfaces/IRedeemableToken.sol";/*** @notice Base implementation of a voucher token with approvable redeemer contracts.*/abstract contract BaseRedeemableToken is IRedeemableToken, AccessControlEnumerable {/*** @notice Authorised redeemers.*/bytes32 public constant REDEEMER_ROLE = keccak256("REDEEMER_ROLE");/*** @notice A role that cannot be granted or revoked.* @dev Used to lock in members of the `REDEEMER_ROLE` role.*/bytes32 private constant _NOOP_ROLE = keccak256("NOOP_ROLE");constructor() {_setRoleAdmin(REDEEMER_ROLE, DEFAULT_STEERING_ROLE);_setRoleAdmin(_NOOP_ROLE, _NOOP_ROLE);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright 2023 PROOF Holdings Incpragma solidity >=0.8.16 <0.9.0;import {ERC721ACommon} from "ethier/erc721/ERC721ACommon.sol";/*** @notice Possible transfer restrictions.*/enum TransferRestriction {None,OnlyMint,OnlyBurn,Frozen}/*** @notice Implements restrictions for ERC721 transfers.* @dev This is intended to facilitate a soft expiry for voucher tokens, having an intermediate stage that still allows* voucher to be redeemed but not traded before closing all activity indefinitely.* @dev The activation of restrictions is left to the extending contract.*/abstract contract ERC721ATransferRestrictedBase is ERC721ACommon {// =========================================================================// Errors// =========================================================================
1234567891011121314// SPDX-License-Identifier: MIT// Copyright 2023 PROOF Holdings Incpragma solidity >=0.8.0 <0.9.0;/*** @notice Basic interface for a contract providing sellable content.*/interface ISellable {/*** @notice Handles the sale of sellable content.* @dev This is usually only callable by Sellers.*/function handleSale(address to, uint64 num, bytes calldata data) external payable;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright 2023 PROOF Holdings Incpragma solidity >=0.8.0 <0.9.0;import {ISellable} from "../interfaces/ISellable.sol";import {PurchaseExecuter} from "../interfaces/PurchaseExecuter.sol";/*** @notice Executes a purchase by calling the purchase interface of a `ISellable` contract.*/abstract contract SellableCallbacker is PurchaseExecuter {/*** @notice Emitted when the callback to the `ISellable` contract fails.*/error CallbackFailed(bytes reason);/*** @notice The `ISellable` contract that will be called to execute the purchase.*/ISellable public immutable sellable;constructor(ISellable sellable_) {sellable = ISellable(sellable_);}/**
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright 2023 PROOF Holdings Incpragma solidity >=0.8.0 <0.9.0;import {ReentrancyGuard} from "openzeppelin-contracts/security/ReentrancyGuard.sol";import {PurchaseExecuter} from "../interfaces/PurchaseExecuter.sol";/*** @notice Abstract base contract for all `Seller`s.* @dev The intention of this contract is to provide an extensible base for various kinds of Seller modules that can be* flexibly composed to build more complex sellers - allowing effective code reuse.* Derived contracts are intended to implement their logic by overriding and extending the `_checkAndModifyPurchase` and* `_beforePurchase` hooks (calling the parent implementation(s) to compose logic). The former is intended to perform* manipulations and checks of the input data; the latter to update the internal state of the module.* Final sellers will compose these modules and expose an addition external purchase function for buyers.*/abstract contract Seller is PurchaseExecuter, ReentrancyGuard {uint256 internal constant _UNDEFINED_COST = type(uint256).max;/*** @notice Internal function handling a given purchase, performing checks and input manipulations depending on the* logic in the hooks.* @param to The receiver of the purchase* @param num Number of requested purchases* @param externalTotalCost Total cost of the purchase
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)pragma solidity ^0.8.0;import "./IAccessControl.sol";/*** @dev External interface of AccessControlEnumerable declared to support ERC165 detection.*/interface IAccessControlEnumerable is IAccessControl {/*** @dev Returns one of the accounts that have `role`. `index` must be a* value between 0 and {getRoleMemberCount}, non-inclusive.** Role bearers are not sorted in any particular way, and their ordering may* change at any point.** WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure* you perform all queries on the same block. See the following* https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]* for more information.*/function getRoleMember(bytes32 role, uint256 index) external view returns (address);/**
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)pragma solidity ^0.8.0;import "./IAccessControl.sol";import "../utils/Context.sol";import "../utils/Strings.sol";import "../utils/introspection/ERC165.sol";/*** @dev Contract module that allows children to implement role-based access* control mechanisms. This is a lightweight version that doesn't allow enumerating role* members except through off-chain means by accessing the contract event logs. Some* applications may benefit from on-chain enumerability, for those cases see* {AccessControlEnumerable}.** Roles are referred to by their `bytes32` identifier. These should be exposed* in the external API and be unique. The best way to achieve this is by* using `public constant` hash digests:** ```* bytes32 public constant MY_ROLE = keccak256("MY_ROLE");* ```** Roles can be used to represent a set of permissions. To restrict access to a
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (utils/structs/EnumerableSet.sol)// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.pragma solidity ^0.8.0;/*** @dev Library for managing* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive* types.** Sets have the following properties:** - Elements are added, removed, and checked for existence in constant time* (O(1)).* - Elements are enumerated in O(n). No guarantees are made on the ordering.** ```* contract Example {* // Add the library methods* using EnumerableSet for EnumerableSet.AddressSet;** // Declare a set state variable* EnumerableSet.AddressSet private mySet;* }* ```
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// ERC721A Contracts v4.2.3// Creator: Chiru Labspragma solidity ^0.8.4;/*** @dev Interface of ERC721A.*/interface IERC721A {/*** The caller must own the token or be an approved operator.*/error ApprovalCallerNotOwnerNorApproved();/*** The token does not exist.*/error ApprovalQueryForNonexistentToken();/*** Cannot query the balance for the zero address.*/error BalanceQueryForZeroAddress();/**
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol)pragma solidity ^0.8.0;import "../utils/introspection/IERC165.sol";/*** @dev Interface for the NFT Royalty Standard.** A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal* support for royalty payments across all NFT marketplaces and ecosystem participants.** _Available since v4.5._*/interface IERC2981 is IERC165 {/*** @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of* exchange. The royalty amount is denominated and should be paid in that same unit of exchange.*/function royaltyInfo(uint256 tokenId, uint256 salePrice)externalviewreturns (address receiver, uint256 royaltyAmount);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)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) {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)pragma solidity ^0.8.0;import "../utils/Context.sol";/*** @dev Contract module which allows children to implement an emergency stop* mechanism that can be triggered by an authorized account.** This module is used through inheritance. It will make available the* modifiers `whenNotPaused` and `whenPaused`, which can be applied to* the functions of your contract. Note that they will not be pausable by* simply including this module, only once the modifiers are put in place.*/abstract contract Pausable is Context {/*** @dev Emitted when the pause is triggered by `account`.*/event Paused(address account);/*** @dev Emitted when the pause is lifted by `account`.*/event Unpaused(address account);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.13;interface IOperatorFilterRegistry {/*** @notice Returns true if operator is not filtered for a given token, either by address or codeHash. Also returns* true if supplied registrant address is not registered.*/function isOperatorAllowed(address registrant, address operator) external view returns (bool);/*** @notice Registers an address with the registry. May be called by address itself or by EIP-173 owner.*/function register(address registrant) external;/*** @notice Registers an address with the registry and "subscribes" to another address's filtered operators and codeHashes.*/function registerAndSubscribe(address registrant, address subscription) external;/*** @notice Registers an address with the registry and copies the filtered operators and codeHashes from another* address without subscribing.*/function registerAndCopyEntries(address registrant, address registrantToCopy) external;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright 2023 PROOF Holdings Incpragma solidity ^0.8.0;/*** @notice Interface for a redeemable Voucher token preventing double spending* through internal book-keeping (e.g. burning the token, token property, etc.).* @dev Voucher tokens are intendent to be redeemed through a redeemer contract.*/interface IRedeemableToken {/*** @notice Thrown if the redemption caller is not allowed to spend a given* voucher.*/error RedeemerCallerNotAllowedToSpendVoucher(address sender, uint256 tokenId);/*** @notice Interface through which a `IRedeemer` contract informs the* voucher about its redemption.* @param sender The address that initiate the redemption on the* redeemer contract.* @param tokenId The voucher token to be redeemed.* @dev This function MUST be called by redeemer contracts.* @dev MUST revert with `RedeemerNotApproved` if the calling redeemer* contract is not approved to spend this voucher.* @dev MUST revert with `RedeemerCallerNotAllowedToSpendVoucher` if
1234567891011// SPDX-License-Identifier: MIT// Copyright 2023 PROOF Holdings Incpragma solidity >=0.8.0 <0.9.0;/*** @notice Interface to execute purchases in `Seller`s.* @dev This executes the final purchase. This can be anything from minting ERC721 tokens to transfering funds, etc.*/abstract contract PurchaseExecuter {function _executePurchase(address to, uint64 num, uint256 cost, bytes memory data) internal virtual;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)pragma solidity ^0.8.0;/*** @dev Contract module that helps prevent reentrant calls to a function.** Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier* available, which can be applied to functions to make sure there are no nested* (reentrant) calls to them.** Note that because there is a single `nonReentrant` guard, functions marked as* `nonReentrant` may not call one another. This can be worked around by making* those functions `private`, and then adding `external` `nonReentrant` entry* points to them.** TIP: If you would like to learn more about reentrancy and alternative ways* to protect against it, check out our blog post* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].*/abstract contract ReentrancyGuard {// Booleans are more expensive than uint256 or any type that takes up a full// word because each write operation emits an extra SLOAD to first read the// slot's contents, replace the bits taken up by the boolean, and then write// back. This is the compiler's defense against contract upgrades and
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)pragma solidity ^0.8.0;/*** @dev External interface of AccessControl declared to support ERC165 detection.*/interface IAccessControl {/*** @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`** `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite* {RoleAdminChanged} not being emitted signaling this.** _Available since v3.1._*/event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);/*** @dev Emitted when `account` is granted `role`.** `sender` is the account that originated the contract call, an admin role* bearer except when using {AccessControl-_setupRole}.*/event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
123456789101112131415161718192021222324// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)pragma solidity ^0.8.0;/*** @dev Provides information about the current execution context, including the* sender of the transaction and its data. While these are generally available* via msg.sender and msg.data, they should not be accessed in such a direct* manner, since when dealing with meta-transactions the account sending and* paying for execution may not be the actual sender (as far as an application* is concerned).** This contract is only required for intermediate, library-like contracts.*/abstract contract Context {function _msgSender() internal view virtual returns (address) {return msg.sender;}function _msgData() internal view virtual returns (bytes calldata) {return msg.data;}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)pragma solidity ^0.8.0;import "./math/Math.sol";/*** @dev String operations.*/library Strings {bytes16 private constant _SYMBOLS = "0123456789abcdef";uint8 private constant _ADDRESS_LENGTH = 20;/*** @dev Converts a `uint256` to its ASCII `string` decimal representation.*/function toString(uint256 value) internal pure returns (string memory) {unchecked {uint256 length = Math.log10(value) + 1;string memory buffer = new string(length);uint256 ptr;/// @solidity memory-safe-assemblyassembly {ptr := add(buffer, add(32, length))}
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)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);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)pragma solidity ^0.8.0;/*** @dev Standard math utilities missing in the Solidity language.*/library Math {enum Rounding {Down, // Toward negative infinityUp, // Toward infinityZero // Toward zero}/*** @dev Returns the largest of two numbers.*/function max(uint256 a, uint256 b) internal pure returns (uint256) {return a > b ? a : b;}/*** @dev Returns the smallest of two numbers.*/function min(uint256 a, uint256 b) internal pure returns (uint256) {
12345678910111213141516171819202122232425{"remappings": ["@divergencetech/ethier/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ethier_0-55-0/","@openzeppelin/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/","ERC721A/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ERC721A_4-2-3/contracts/","ERC721A_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ERC721A_4-2-3/","delegation-registry/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/delegation-registry_2d1a158b/src/","delegation-registry_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/delegation-registry_2d1a158b/","ds-test/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ds-test_013e6c64/src/","ds-test_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ds-test_013e6c64/","erc721a/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ERC721A_4-2-3/","ethier/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ethier_0-55-0/contracts/","ethier_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ethier_0-55-0/","forge-std/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/forge-std_1-4-0/src/","openzeppelin-contracts/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/contracts/","openzeppelin-contracts/contracts/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/contracts/","openzeppelin-contracts_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/","operator-filter-registry/src/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/operator-filter-registry_1-4-1/src/","operator-filter-registry_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/operator-filter-registry_1-4-1/","proof/constants/=/home/dave/proof/proof-seller/contracts/constants/src/","proof/redemption/=/home/dave/proof/proof-seller/contracts/redemption/src/","proof/sellers/=/home/dave/proof/proof-seller/contracts/sellers/src/"],"optimizer": {"enabled": true,
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"address","name":"steerer","type":"address"},{"internalType":"address payable","name":"secondaryReceiver","type":"address"},{"internalType":"uint64","name":"numDayOneBirds","type":"uint64"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[{"internalType":"enum TransferRestriction","name":"","type":"uint8"}],"name":"DisallowedByTransferRestriction","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"RedeemerCallerNotAllowedToSpendVoucher","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[{"internalType":"enum TransferRestriction","name":"want","type":"uint8"}],"name":"TransferRestrictionCheckFailed","type":"error"},{"inputs":[],"name":"TransferRestrictionLocked","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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":false,"internalType":"uint256","name":"_fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_toTokenId","type":"uint256"}],"name":"BatchMetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"MetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"AUTHORISED_SELLER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_STEERING_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REDEEMER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropper","outputs":[{"internalType":"contract RoleGatedFreeOfCharge","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"cdata","type":"bytes"}],"name":"callOperatorFilterRegistry","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitMetadataUpdateForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint64","name":"num","type":"uint64"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"handleSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"lockRedeemers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockSellers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum TransferRestriction","name":"restriction","type":"uint8"}],"name":"lockTransferRestriction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"safeTransferFrom","outputs":[],"stateMutability":"payable","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":"payable","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":"baseTokenURI_","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"basisPoints","type":"uint96"}],"name":"setDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum TransferRestriction","name":"restriction","type":"uint8"}],"name":"setTransferRestriction","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":"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":"payable","type":"function"},{"inputs":[],"name":"transferRestriction","outputs":[{"internalType":"enum TransferRestriction","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620057ed380380620057ed833981016040819052620000349162000698565b733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060600160405280603b815260200162005752603b913960408051808201825260208082527f4469616d6f6e642045786869626974696f6e3a20446179204f6e6520506173738183015282518084019093526008835267444159315041535360c01b908301528891889190886101f483836002620000cd8382620007af565b506003620000dc8282620007af565b505060008055506200010d600080516020620057cd8339815191526000805160206200578d833981519152620003ce565b62000128600080516020620057ad83398151915280620003ce565b620001637f44ac9762eec3a11893fefb11d028bb3102560094137c3ed4518712475b2577cc6000805160206200578d833981519152620003ce565b6200017e600080516020620057ad83398151915280620003ce565b600a805460ff1916905562000194828262000419565b620001a16000876200051e565b620001bc6000805160206200578d833981519152866200051e565b505050505050620001d3816200054960201b60201c565b506daaeb6d7670e522a718067333cd4e3b15620003195780156200026757604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b1580156200024857600080fd5b505af11580156200025d573d6000803e3d6000fd5b5050505062000319565b6001600160a01b03821615620002b85760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af2903906044016200022d565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b158015620002ff57600080fd5b505af115801562000314573d6000803e3d6000fd5b505050505b5050838330836040516200032d9062000671565b6001600160a01b0394851681529284166020840152921660408201526001600160401b039091166060820152608001604051809103906000f08015801562000379573d6000803e3d6000fd5b50600e805462010000600160b01b031916620100006001600160a01b0393841681029190911791829055620003c492600080516020620057cd8339815191529291909104166200051e565b505050506200087b565b600082815260086020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6127106001600160601b03821611156200048d5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620004e55760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640162000484565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600b55565b6200052a82826200055b565b6000828152600960205260409020620005449082620005ff565b505050565b600d620005578282620007af565b5050565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff16620005575760008281526008602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620005bb3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600062000616836001600160a01b0384166200061f565b90505b92915050565b6000818152600183016020526040812054620006685750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000619565b50600062000619565b6117ce8062003f8483390190565b6001600160a01b03811681146200069557600080fd5b50565b60008060008060808587031215620006af57600080fd5b8451620006bc816200067f565b6020860151909450620006cf816200067f565b6040860151909350620006e2816200067f565b60608601519092506001600160401b03811681146200070057600080fd5b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200073657607f821691505b6020821081036200075757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200054457600081815260208120601f850160051c81016020861015620007865750805b601f850160051c820191505b81811015620007a75782815560010162000792565b505050505050565b81516001600160401b03811115620007cb57620007cb6200070b565b620007e381620007dc845462000721565b846200075d565b602080601f8311600181146200081b5760008415620008025750858301515b600019600386901b1c1916600185901b178555620007a7565b600085815260208120601f198616915b828110156200084c578886015182559484019460019091019084016200082b565b50858210156200086b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6136f9806200088b6000396000f3fe6080604052600436106102dc5760003560e01c806342842e0e1161018457806395d89b41116100d6578063c87b56dd1161008a578063d547741f11610064578063d547741f1461081c578063d547cfb71461083c578063e985e9c51461085157600080fd5b8063c87b56dd146107b6578063c9d68389146107d6578063ca15c873146107fc57600080fd5b8063a22cb465116100bb578063a22cb4651461076e578063b88d4fde1461078e578063c1627297146107a157600080fd5b806395d89b4114610744578063a217fddf1461075957600080fd5b806370a08231116101385780638456cb59116101125780638456cb59146106c95780639010d07c146106de57806391d14854146106fe57600080fd5b806370a08231146106605780637fa46ab4146106805780638222b7d7146106b457600080fd5b80635ada5c55116101695780635ada5c55146106155780635c975abb146106285780636352211e1461064057600080fd5b806342842e0e146105e2578063461d338c146105f557600080fd5b80631e9a69501161023d57806330176e13116101f15780633dcc23a0116101cb5780633dcc23a01461058b5780633f4ba83a146105ab57806341f43434146105c057600080fd5b806330176e131461051757806331c23d201461053757806336568abe1461056b57600080fd5b8063248a9ca311610222578063248a9ca3146104885780632a55205a146104b85780632f2ff15d146104f757600080fd5b80631e9a69501461045557806323b872dd1461047557600080fd5b80630dc3b9091161029457806318160ddd1161027957806318160ddd146104075780631b38388e146104205780631d23354a1461044057600080fd5b80630dc3b909146103a5578063117ad57a146103e757600080fd5b806306fdde03116102c557806306fdde0314610338578063081812fc1461035a578063095ea7b31461039257600080fd5b806301ffc9a7146102e157806304634d8d14610316575b600080fd5b3480156102ed57600080fd5b506103016102fc366004612df1565b61089a565b60405190151581526020015b60405180910390f35b34801561032257600080fd5b50610336610331366004612e2a565b6108c9565b005b34801561034457600080fd5b5061034d610902565b60405161030d9190612ec2565b34801561036657600080fd5b5061037a610375366004612ed5565b610994565b6040516001600160a01b03909116815260200161030d565b6103366103a0366004612eee565b6109f1565b3480156103b157600080fd5b506103d97fe0fb75b40f2731fce9fd08fd8e51c7db44b9ffb2e43369a2734fc1a121a6b30781565b60405190815260200161030d565b3480156103f357600080fd5b50610336610402366004612f18565b6109ff565b34801561041357600080fd5b50600154600054036103d9565b34801561042c57600080fd5b5061033661043b366004612f18565b610a74565b34801561044c57600080fd5b50610336610b3e565b34801561046157600080fd5b50610336610470366004612eee565b610b73565b610336610483366004612f39565b610bf9565b34801561049457600080fd5b506103d96104a3366004612ed5565b60009081526008602052604090206001015490565b3480156104c457600080fd5b506104d86104d3366004612f75565b610c04565b604080516001600160a01b03909316835260208301919091520161030d565b34801561050357600080fd5b50610336610512366004612f97565b610ce3565b34801561052357600080fd5b50610336610532366004613068565b610d08565b34801561054357600080fd5b506103d97f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf7681565b34801561057757600080fd5b50610336610586366004612f97565b610d3b565b34801561059757600080fd5b5061034d6105a63660046130f3565b610ddd565b3480156105b757600080fd5b50610336610e61565b3480156105cc57600080fd5b5061037a6daaeb6d7670e522a718067333cd4e81565b6103366105f0366004612f39565b610e93565b34801561060157600080fd5b50600e5460ff1660405161030d9190613164565b6103366106233660046131a5565b610e9e565b34801561063457600080fd5b50600a5460ff16610301565b34801561064c57600080fd5b5061037a61065b366004612ed5565b610edb565b34801561066c57600080fd5b506103d961067b366004613211565b610ee6565b34801561068c57600080fd5b506103d97f44ac9762eec3a11893fefb11d028bb3102560094137c3ed4518712475b2577cc81565b3480156106c057600080fd5b50610336610f4e565b3480156106d557600080fd5b50610336610f8f565b3480156106ea57600080fd5b5061037a6106f9366004612f75565b610fc1565b34801561070a57600080fd5b50610301610719366004612f97565b60009182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561075057600080fd5b5061034d610fe0565b34801561076557600080fd5b506103d9600081565b34801561077a57600080fd5b5061033661078936600461323a565b610fef565b61033661079c366004613266565b610ff9565b3480156107ad57600080fd5b5061033661100b565b3480156107c257600080fd5b5061034d6107d1366004612ed5565b61103d565b3480156107e257600080fd5b50600e5461037a906201000090046001600160a01b031681565b34801561080857600080fd5b506103d9610817366004612ed5565b6110d9565b34801561082857600080fd5b50610336610837366004612f97565b6110f0565b34801561084857600080fd5b5061034d611115565b34801561085d57600080fd5b5061030161086c3660046132e2565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b60006108a582611124565b806108b457506108b48261112f565b806108c357506108c38261112f565b92915050565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf766108f381611149565b6108fd8383611153565b505050565b6060600280546109119061330c565b80601f016020809104026020016040519081016040528092919081815260200182805461093d9061330c565b801561098a5780601f1061095f5761010080835404028352916020019161098a565b820191906000526020600020905b81548152906001019060200180831161096d57829003601f168201915b5050505050905090565b600061099f826112b2565b6109d5576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6109fb82826112f2565b5050565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610a2981611149565b600e54610100900460ff1615610a6b576040517fc5dbcbf100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109fb82611306565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610a9e81611149565b600e5460ff166003811115610ab557610ab5613135565b826003811115610ac757610ac7613135565b14610b0e57600e546040517f6e7074f2000000000000000000000000000000000000000000000000000000008152610b059160ff1690600401613164565b60405180910390fd5b5050600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610b6881611149565b610b7061132d565b50565b7f44ac9762eec3a11893fefb11d028bb3102560094137c3ed4518712475b2577cc610b9d81611149565b610ba78383611379565b610bef576040517f262f0dbe0000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101839052604401610b05565b6108fd83836113f8565b6108fd838383611401565b6000828152600c602090815260408083208151808301909252546001600160a01b038116808352740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff16928201929092528291610ca5575060408051808201909152600b546001600160a01b03811682527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1660208201525b602081015160009061271090610cc9906bffffffffffffffffffffffff168761338e565b610cd391906133a5565b91519350909150505b9250929050565b600082815260086020526040902060010154610cfe81611149565b6108fd8383611426565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610d3281611149565b6109fb82611448565b6001600160a01b0381163314610dd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610b05565b6109fb8282611454565b60607f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610e0981611149565b610e5984848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506daaeb6d7670e522a718067333cd4e939250506114769050565b949350505050565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610e8b81611149565b610b706114ba565b6108fd83838361150c565b7fe0fb75b40f2731fce9fd08fd8e51c7db44b9ffb2e43369a2734fc1a121a6b307610ec881611149565b610ed485858585611531565b5050505050565b60006108c382611545565b60006001600160a01b038216610f28576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610f7881611149565b610b706000610f8a6001546000540390565b6115de565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610fb981611149565b610b7061161b565b6000828152600960205260408120610fd99083611658565b9392505050565b6060600380546109119061330c565b6109fb8282611664565b61100584848484611678565b50505050565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf7661103581611149565b610b7061169e565b6060611048826112b2565b61107e576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110886116e8565b905080516000036110a85760405180602001604052806000815250610fd9565b806110b2846116f7565b6040516020016110c39291906133e0565b6040516020818303038152906040529392505050565b60008181526009602052604081206108c39061173b565b60008281526008602052604090206001015461110b81611149565b6108fd8383611454565b6060600d80546109119061330c565b60006108c382611745565b600061113a8261175b565b806108c357506108c382611793565b610b70813361179e565b6127106bffffffffffffffffffffffff821611156111f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401610b05565b6001600160a01b038216611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610b05565b604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff90911660209092018290527401000000000000000000000000000000000000000090910217600b55565b60008054821080156108c35750506000908152600460205260409020547c0100000000000000000000000000000000000000000000000000000000161590565b816112fc8161182d565b6108fd8383611918565b600e805482919060ff1916600183600381111561132557611325613135565b021790555050565b6113777fe0fb75b40f2731fce9fd08fd8e51c7db44b9ffb2e43369a2734fc1a121a6b3077fd83ac62169e315c6fc3ecdb2c5b6ae75284053b2c2f2fb9fc715ba380283e9426119e9565b565b60008061138583610edb565b9050806001600160a01b0316846001600160a01b031614806113cc57506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b80610e5957506113db83610994565b6001600160a01b0316846001600160a01b03161491505092915050565b6109fb81611a34565b826001600160a01b038116331461141b5761141b3361182d565b611005848484611a3f565b6114308282611c6d565b60008281526009602052604090206108fd9082611d0f565b600d6109fb8282613455565b61145e8282611d24565b60008281526009602052604090206108fd9082611da7565b6060610fd9838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250611dbc565b6114c2611ec8565b600a805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b826001600160a01b0381163314611526576115263361182d565b611005848484611f34565b611005848467ffffffffffffffff16611f4f565b6000816000548110156115ac57600081815260046020526040812054907c0100000000000000000000000000000000000000000000000000000000821690036115aa575b80600003610fd9575060001901600081815260046020526040902054611589565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051838152602081018390527f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c910160405180910390a15050565b61162361208d565b600a805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586114ef3390565b6000610fd983836120fa565b8161166e8161182d565b6108fd8383612124565b836001600160a01b0381163314611692576116923361182d565b610ed485858585612190565b6113777f44ac9762eec3a11893fefb11d028bb3102560094137c3ed4518712475b2577cc7fd83ac62169e315c6fc3ecdb2c5b6ae75284053b2c2f2fb9fc715ba380283e9426119e9565b60606116f26121ed565b905090565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a9004806117115750819003601f19909101908152919050565b60006108c3825490565b6000611750826121f7565b806108c357506108c3825b60006117668261224d565b8061177557506117758261232e565b80611784575061178482611793565b806108c357506108c382612384565b60006108c38261241b565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff166109fb576117d181612471565b6117dc836020612483565b6040516020016117ed929190613515565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610b0591600401612ec2565b6daaeb6d7670e522a718067333cd4e3b15610b70576040517fc61711340000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156118b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d79190613596565b610b70576040517fede71dcc0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610b05565b600061192382610edb565b9050336001600160a01b038216146119755761193f813361086c565b611975576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600082815260086020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b610b708160006126c6565b6000611a4a82611545565b9050836001600160a01b0316816001600160a01b031614611a97576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090208054611ac38187335b6001600160a01b039081169116811491141790565b611b0757611ad1863361086c565b611b07576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611b47576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b548686866001612869565b8015611b5f57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b177c0200000000000000000000000000000000000000000000000000000000176000858152600460205260408120919091557c020000000000000000000000000000000000000000000000000000000084169003611c2357600184016000818152600460205260408120549003611c21576000548114611c215760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff166109fb5760008281526008602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611ccb3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610fd9836001600160a01b038416612875565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff16156109fb5760008281526008602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610fd9836001600160a01b0384166128c4565b606082471015611e4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610b05565b600080866001600160a01b03168587604051611e6a91906135b3565b60006040518083038185875af1925050503d8060008114611ea7576040519150601f19603f3d011682016040523d82523d6000602084013e611eac565b606091505b5091509150611ebd878383876129b7565b979650505050505050565b600a5460ff16611377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b05565b6108fd83838360405180602001604052806000815250610ff9565b6000805490829003611f8d576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f9a6000848385612869565b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461204957808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101612011565b5081600003612084576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005550505050565b600a5460ff1615611377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b05565b6000826000018281548110612111576121116135cf565b9060005260206000200154905092915050565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61219b848484610bf9565b6001600160a01b0383163b15611005576121b784848484612a4a565b611005576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606116f2611115565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f1e9a69500000000000000000000000000000000000000000000000000000000014806108c357506108c382611793565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806122e057507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806108c35750507fffffffff00000000000000000000000000000000000000000000000000000000167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a0000000000000000000000000000000000000000000000000000000014806108c357506108c3826121f7565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f490649060000000000000000000000000000000000000000000000000000000014806108c357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146108c3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806108c357506108c382612b95565b60606108c36001600160a01b03831660145b6060600061249283600261338e565b61249d9060026135fe565b67ffffffffffffffff8111156124b5576124b5612fc3565b6040519080825280601f01601f1916602001820160405280156124df576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612516576125166135cf565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612579576125796135cf565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006125b584600261338e565b6125c09060016135fe565b90505b600181111561265d577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612601576126016135cf565b1a60f81b828281518110612617576126176135cf565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361265681613611565b90506125c3565b508315610fd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610b05565b60006126d183611545565b9050806000806126ef86600090815260066020526040902080549091565b91509150841561274857612704818433611aae565b61274857612712833361086c565b612748576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612756836000886001612869565b801561276157600082555b6001600160a01b038316600081815260056020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b177c0300000000000000000000000000000000000000000000000000000000176000878152600460205260408120919091557c0200000000000000000000000000000000000000000000000000000000851690036128215760018601600081815260046020526040812054900361281f57600054811461281f5760008181526004602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050600180548101905550505050565b61100584848484612c2c565b60008181526001830160205260408120546128bc575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108c3565b5060006108c3565b600081815260018301602052604081205480156129ad5760006128e8600183613628565b85549091506000906128fc90600190613628565b905081811461296157600086600001828154811061291c5761291c6135cf565b906000526020600020015490508087600001848154811061293f5761293f6135cf565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806129725761297261363b565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108c3565b60009150506108c3565b60608315612a40578251600003612a39576001600160a01b0385163b612a39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b05565b5081610e59565b610e598383612c38565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081526000906001600160a01b0385169063150b7a0290612a9890339089908890889060040161366a565b6020604051808303816000875af1925050508015612ad3575060408051601f3d908101601f19168201909252612ad0918101906136a6565b60015b612b4a573d808015612b01576040519150601f19603f3d011682016040523d82523d6000602084013e612b06565b606091505b508051600003612b42576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050610e59565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806108c357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146108c3565b61100584848484612c7c565b815115612c485781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b059190612ec2565b612c8884848484612d51565b6000612c96600e5460ff1690565b90506000816003811115612cac57612cac613135565b03612cb75750611005565b6001816003811115612ccb57612ccb613135565b148015612cdf57506001600160a01b038516155b15612cea5750611005565b6002816003811115612cfe57612cfe613135565b148015612d1257506001600160a01b038416155b15612d1d5750611005565b806040517ffc40c881000000000000000000000000000000000000000000000000000000008152600401610b059190613164565b600a5460ff1615612dbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f45524337323141436f6d6d6f6e3a2070617573656400000000000000000000006044820152606401610b05565b611005565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610b7057600080fd5b600060208284031215612e0357600080fd5b8135610fd981612dc3565b80356001600160a01b0381168114612e2557600080fd5b919050565b60008060408385031215612e3d57600080fd5b612e4683612e0e565b915060208301356bffffffffffffffffffffffff81168114612e6757600080fd5b809150509250929050565b60005b83811015612e8d578181015183820152602001612e75565b50506000910152565b60008151808452612eae816020860160208601612e72565b601f01601f19169290920160200192915050565b602081526000610fd96020830184612e96565b600060208284031215612ee757600080fd5b5035919050565b60008060408385031215612f0157600080fd5b612f0a83612e0e565b946020939093013593505050565b600060208284031215612f2a57600080fd5b813560048110610fd957600080fd5b600080600060608486031215612f4e57600080fd5b612f5784612e0e565b9250612f6560208501612e0e565b9150604084013590509250925092565b60008060408385031215612f8857600080fd5b50508035926020909101359150565b60008060408385031215612faa57600080fd5b82359150612fba60208401612e0e565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff8084111561300d5761300d612fc3565b604051601f8501601f19908116603f0116810190828211818310171561303557613035612fc3565b8160405280935085815286868601111561304e57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561307a57600080fd5b813567ffffffffffffffff81111561309157600080fd5b8201601f810184136130a257600080fd5b610e5984823560208401612ff2565b60008083601f8401126130c357600080fd5b50813567ffffffffffffffff8111156130db57600080fd5b602083019150836020828501011115610cdc57600080fd5b6000806020838503121561310657600080fd5b823567ffffffffffffffff81111561311d57600080fd5b613129858286016130b1565b90969095509350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016004831061319f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080600080606085870312156131bb57600080fd5b6131c485612e0e565b9350602085013567ffffffffffffffff80821682146131e257600080fd5b909350604086013590808211156131f857600080fd5b50613205878288016130b1565b95989497509550505050565b60006020828403121561322357600080fd5b610fd982612e0e565b8015158114610b7057600080fd5b6000806040838503121561324d57600080fd5b61325683612e0e565b91506020830135612e678161322c565b6000806000806080858703121561327c57600080fd5b61328585612e0e565b935061329360208601612e0e565b925060408501359150606085013567ffffffffffffffff8111156132b657600080fd5b8501601f810187136132c757600080fd5b6132d687823560208401612ff2565b91505092959194509250565b600080604083850312156132f557600080fd5b6132fe83612e0e565b9150612fba60208401612e0e565b600181811c9082168061332057607f821691505b602082108103613359577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176108c3576108c361335f565b6000826133db577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600083516133f2818460208801612e72565b835190830190613406818360208801612e72565b01949350505050565b601f8211156108fd57600081815260208120601f850160051c810160208610156134365750805b601f850160051c820191505b81811015611c6557828155600101613442565b815167ffffffffffffffff81111561346f5761346f612fc3565b6134838161347d845461330c565b8461340f565b602080601f8311600181146134b857600084156134a05750858301515b600019600386901b1c1916600185901b178555611c65565b600085815260208120601f198616915b828110156134e7578886015182559484019460019091019084016134c8565b50858210156135055787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161354d816017850160208801612e72565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161358a816028840160208801612e72565b01602801949350505050565b6000602082840312156135a857600080fd5b8151610fd98161322c565b600082516135c5818460208701612e72565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b808201808211156108c3576108c361335f565b6000816136205761362061335f565b506000190190565b818103818111156108c3576108c361335f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006001600160a01b0380871683528086166020840152508360408301526080606083015261369c6080830184612e96565b9695505050505050565b6000602082840312156136b857600080fd5b8151610fd981612dc356fea264697066735822122036527a4d4f45007bcf0cafed856208399abd97e588a0b0693def1d84df0c5e0264736f6c6343000813003360c06040523480156200001157600080fd5b50604051620017ce380380620017ce8339810160408190526200003491620001f4565b6001600160a01b03821660805280848484620000526000846200009d565b6200007e7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76836200009d565b50506001600255506001600160401b031660a052506200026792505050565b620000a98282620000c8565b6000828152600160205260409020620000c3908262000169565b505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000165576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001243390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600062000180836001600160a01b03841662000189565b90505b92915050565b6000818152600183016020526040812054620001d25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000183565b50600062000183565b6001600160a01b0381168114620001f157600080fd5b50565b600080600080608085870312156200020b57600080fd5b84516200021881620001db565b60208601519094506200022b81620001db565b60408601519093506200023e81620001db565b60608601519092506001600160401b03811681146200025c57600080fd5b939692955090935050565b60805160a0516115336200029b600039600081816101a40152610e2e0152600081816101e20152610f4c01526115336000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80639010d07c11610097578063ca15c87311610066578063ca15c8731461029b578063d547741f146102ae578063dde13d6a146102c1578063f309455a146102d457600080fd5b80639010d07c1461022957806391d148541461023c578063a217fddf14610280578063c14a58de1461028857600080fd5b806331c23d20116100d357806331c23d201461016857806336568abe1461018f578063423ca91d146101a25780636deefc7a146101dd57600080fd5b806301ffc9a7146100fa578063248a9ca3146101225780632f2ff15d14610153575b600080fd5b61010d61010836600461101a565b6102e6565b60405190151581526020015b60405180910390f35b61014561013036600461105c565b60009081526020819052604090206001015490565b604051908152602001610119565b61016661016136600461109e565b6102f7565b005b6101457f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf7681565b61016661019d36600461109e565b610321565b7f00000000000000000000000000000000000000000000000000000000000000005b60405167ffffffffffffffff9091168152602001610119565b6102047f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610119565b6102046102373660046110ca565b6103d9565b61010d61024a36600461109e565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610145600081565b610166610296366004611138565b6103f8565b6101456102a936600461105c565b61049e565b6101666102bc36600461109e565b6104b5565b6101666102cf366004611184565b6104da565b60035467ffffffffffffffff166101c4565b60006102f18261050e565b92915050565b60008281526020819052604090206001015461031281610564565b61031c8383610571565b505050565b73ffffffffffffffffffffffffffffffffffffffff811633146103cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b6103d58282610593565b5050565b60008281526001602052604081206103f190836105b5565b9392505050565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf7661042281610564565b61042c84846105c1565b8161044060035467ffffffffffffffff1690565b67ffffffffffffffff1614610498576003546040517f859443fc00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602481018390526044016103c2565b50505050565b60008181526001602052604081206102f190610648565b6000828152602081905260409020600101546104d081610564565b61031c8383610593565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf7661050481610564565b61031c83836105c1565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806102f157506102f182610652565b61056e81336106e9565b50565b61057b82826107a1565b600082815260016020526040902061031c9082610891565b61059d82826108b3565b600082815260016020526040902061031c908261096a565b60006103f1838361098c565b60005b8181101561031c576106388383838181106105e1576105e16111c6565b6105f792602060409092020190810191506111f5565b848484818110610609576106096111c6565b90506040020160200160208101906106219190611210565b6000604051806020016040528060008152506109b6565b61064181611269565b90506105c4565b60006102f1825490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146102f1565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166103d557610727816109f6565b610732836020610a15565b6040516020016107439291906112c5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526103c291600401611390565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166103d55760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556108333390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006103f18373ffffffffffffffffffffffffffffffffffffffff8416610c58565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156103d55760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006103f18373ffffffffffffffffffffffffffffffffffffffff8416610ca7565b60008260000182815481106109a3576109a36111c6565b9060005260206000200154905092915050565b6109be610da1565b60006109cc85858585610e12565b919650945090506109df85858385610ec4565b6109eb85858385610f0f565b506104986001600255565b60606102f173ffffffffffffffffffffffffffffffffffffffff831660145b60606000610a248360026113a3565b610a2f9060026113ba565b67ffffffffffffffff811115610a4757610a476113cd565b6040519080825280601f01601f191660200182016040528015610a71576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610aa857610aa86111c6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110610b0b57610b0b6111c6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000610b478460026113a3565b610b529060016113ba565b90505b6001811115610bef577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110610b9357610b936111c6565b1a60f81b828281518110610ba957610ba96111c6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93610be8816113fc565b9050610b55565b5083156103f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016103c2565b6000818152600183016020526040812054610c9f575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556102f1565b5060006102f1565b60008181526001830160205260408120548015610d90576000610ccb600183611431565b8554909150600090610cdf90600190611431565b9050818114610d44576000866000018281548110610cff57610cff6111c6565b9060005260206000200154905080876000018481548110610d2257610d226111c6565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610d5557610d55611444565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506102f1565b60009150506102f1565b5092915050565b6002805403610e0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103c2565b60028055565b60035460009081908190819067ffffffffffffffff16610e52907f0000000000000000000000000000000000000000000000000000000000000000611473565b90508067ffffffffffffffff168767ffffffffffffffff161115610eb6576040517f85d70e9c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8089166004830152821660248201526044016103c2565b509596949550929392505050565b60038054849190600090610ee390849067ffffffffffffffff16611494565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050565b6040517f5ada5c5500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635ada5c55908490610f87908890889087906004016114b5565b6000604051808303818588803b158015610fa057600080fd5b505af193505050508015610fb2575060015b610498573d808015610fe0576040519150601f19603f3d011682016040523d82523d6000602084013e610fe5565b606091505b50806040517f30b9b6dd0000000000000000000000000000000000000000000000000000000081526004016103c29190611390565b60006020828403121561102c57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146103f157600080fd5b60006020828403121561106e57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461109957600080fd5b919050565b600080604083850312156110b157600080fd5b823591506110c160208401611075565b90509250929050565b600080604083850312156110dd57600080fd5b50508035926020909101359150565b60008083601f8401126110fe57600080fd5b50813567ffffffffffffffff81111561111657600080fd5b6020830191508360208260061b850101111561113157600080fd5b9250929050565b60008060006040848603121561114d57600080fd5b833567ffffffffffffffff81111561116457600080fd5b611170868287016110ec565b909790965060209590950135949350505050565b6000806020838503121561119757600080fd5b823567ffffffffffffffff8111156111ae57600080fd5b6111ba858286016110ec565b90969095509350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561120757600080fd5b6103f182611075565b60006020828403121561122257600080fd5b813567ffffffffffffffff811681146103f157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361129a5761129a61123a565b5060010190565b60005b838110156112bc5781810151838201526020016112a4565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516112fd8160178501602088016112a1565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161133a8160288401602088016112a1565b01602801949350505050565b6000815180845261135e8160208601602086016112a1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006103f16020830184611346565b80820281158282048414176102f1576102f161123a565b808201808211156102f1576102f161123a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008161140b5761140b61123a565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b818103818111156102f1576102f161123a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b67ffffffffffffffff828116828216039080821115610d9a57610d9a61123a565b67ffffffffffffffff818116838216019080821115610d9a57610d9a61123a565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff831660208201526060604082015260006114f46060830184611346565b9594505050505056fea26469706673582212208cdea60e92c2079371a95a7f971088eb468d8f65568970f6835e4088fa1a15ca64736f6c6343000813003368747470733a2f2f6d657461646174612e70726f6f662e78797a2f6469616d6f6e642d65786869626974696f6e2d706173732f6461792d6f6e652f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76d83ac62169e315c6fc3ecdb2c5b6ae75284053b2c2f2fb9fc715ba380283e942e0fb75b40f2731fce9fd08fd8e51c7db44b9ffb2e43369a2734fc1a121a6b30700000000000000000000000032220f07dbcd18149f619f28cd09fd911cc0372d00000000000000000000000032220f07dbcd18149f619f28cd09fd911cc0372d0000000000000000000000002ed939a9285b42eb5cdb3cfd3b0bb9a48ab1c5b70000000000000000000000000000000000000000000000000000000000002710
Deployed Bytecode
0x6080604052600436106102dc5760003560e01c806342842e0e1161018457806395d89b41116100d6578063c87b56dd1161008a578063d547741f11610064578063d547741f1461081c578063d547cfb71461083c578063e985e9c51461085157600080fd5b8063c87b56dd146107b6578063c9d68389146107d6578063ca15c873146107fc57600080fd5b8063a22cb465116100bb578063a22cb4651461076e578063b88d4fde1461078e578063c1627297146107a157600080fd5b806395d89b4114610744578063a217fddf1461075957600080fd5b806370a08231116101385780638456cb59116101125780638456cb59146106c95780639010d07c146106de57806391d14854146106fe57600080fd5b806370a08231146106605780637fa46ab4146106805780638222b7d7146106b457600080fd5b80635ada5c55116101695780635ada5c55146106155780635c975abb146106285780636352211e1461064057600080fd5b806342842e0e146105e2578063461d338c146105f557600080fd5b80631e9a69501161023d57806330176e13116101f15780633dcc23a0116101cb5780633dcc23a01461058b5780633f4ba83a146105ab57806341f43434146105c057600080fd5b806330176e131461051757806331c23d201461053757806336568abe1461056b57600080fd5b8063248a9ca311610222578063248a9ca3146104885780632a55205a146104b85780632f2ff15d146104f757600080fd5b80631e9a69501461045557806323b872dd1461047557600080fd5b80630dc3b9091161029457806318160ddd1161027957806318160ddd146104075780631b38388e146104205780631d23354a1461044057600080fd5b80630dc3b909146103a5578063117ad57a146103e757600080fd5b806306fdde03116102c557806306fdde0314610338578063081812fc1461035a578063095ea7b31461039257600080fd5b806301ffc9a7146102e157806304634d8d14610316575b600080fd5b3480156102ed57600080fd5b506103016102fc366004612df1565b61089a565b60405190151581526020015b60405180910390f35b34801561032257600080fd5b50610336610331366004612e2a565b6108c9565b005b34801561034457600080fd5b5061034d610902565b60405161030d9190612ec2565b34801561036657600080fd5b5061037a610375366004612ed5565b610994565b6040516001600160a01b03909116815260200161030d565b6103366103a0366004612eee565b6109f1565b3480156103b157600080fd5b506103d97fe0fb75b40f2731fce9fd08fd8e51c7db44b9ffb2e43369a2734fc1a121a6b30781565b60405190815260200161030d565b3480156103f357600080fd5b50610336610402366004612f18565b6109ff565b34801561041357600080fd5b50600154600054036103d9565b34801561042c57600080fd5b5061033661043b366004612f18565b610a74565b34801561044c57600080fd5b50610336610b3e565b34801561046157600080fd5b50610336610470366004612eee565b610b73565b610336610483366004612f39565b610bf9565b34801561049457600080fd5b506103d96104a3366004612ed5565b60009081526008602052604090206001015490565b3480156104c457600080fd5b506104d86104d3366004612f75565b610c04565b604080516001600160a01b03909316835260208301919091520161030d565b34801561050357600080fd5b50610336610512366004612f97565b610ce3565b34801561052357600080fd5b50610336610532366004613068565b610d08565b34801561054357600080fd5b506103d97f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf7681565b34801561057757600080fd5b50610336610586366004612f97565b610d3b565b34801561059757600080fd5b5061034d6105a63660046130f3565b610ddd565b3480156105b757600080fd5b50610336610e61565b3480156105cc57600080fd5b5061037a6daaeb6d7670e522a718067333cd4e81565b6103366105f0366004612f39565b610e93565b34801561060157600080fd5b50600e5460ff1660405161030d9190613164565b6103366106233660046131a5565b610e9e565b34801561063457600080fd5b50600a5460ff16610301565b34801561064c57600080fd5b5061037a61065b366004612ed5565b610edb565b34801561066c57600080fd5b506103d961067b366004613211565b610ee6565b34801561068c57600080fd5b506103d97f44ac9762eec3a11893fefb11d028bb3102560094137c3ed4518712475b2577cc81565b3480156106c057600080fd5b50610336610f4e565b3480156106d557600080fd5b50610336610f8f565b3480156106ea57600080fd5b5061037a6106f9366004612f75565b610fc1565b34801561070a57600080fd5b50610301610719366004612f97565b60009182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561075057600080fd5b5061034d610fe0565b34801561076557600080fd5b506103d9600081565b34801561077a57600080fd5b5061033661078936600461323a565b610fef565b61033661079c366004613266565b610ff9565b3480156107ad57600080fd5b5061033661100b565b3480156107c257600080fd5b5061034d6107d1366004612ed5565b61103d565b3480156107e257600080fd5b50600e5461037a906201000090046001600160a01b031681565b34801561080857600080fd5b506103d9610817366004612ed5565b6110d9565b34801561082857600080fd5b50610336610837366004612f97565b6110f0565b34801561084857600080fd5b5061034d611115565b34801561085d57600080fd5b5061030161086c3660046132e2565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b60006108a582611124565b806108b457506108b48261112f565b806108c357506108c38261112f565b92915050565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf766108f381611149565b6108fd8383611153565b505050565b6060600280546109119061330c565b80601f016020809104026020016040519081016040528092919081815260200182805461093d9061330c565b801561098a5780601f1061095f5761010080835404028352916020019161098a565b820191906000526020600020905b81548152906001019060200180831161096d57829003601f168201915b5050505050905090565b600061099f826112b2565b6109d5576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6109fb82826112f2565b5050565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610a2981611149565b600e54610100900460ff1615610a6b576040517fc5dbcbf100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109fb82611306565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610a9e81611149565b600e5460ff166003811115610ab557610ab5613135565b826003811115610ac757610ac7613135565b14610b0e57600e546040517f6e7074f2000000000000000000000000000000000000000000000000000000008152610b059160ff1690600401613164565b60405180910390fd5b5050600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610b6881611149565b610b7061132d565b50565b7f44ac9762eec3a11893fefb11d028bb3102560094137c3ed4518712475b2577cc610b9d81611149565b610ba78383611379565b610bef576040517f262f0dbe0000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101839052604401610b05565b6108fd83836113f8565b6108fd838383611401565b6000828152600c602090815260408083208151808301909252546001600160a01b038116808352740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff16928201929092528291610ca5575060408051808201909152600b546001600160a01b03811682527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1660208201525b602081015160009061271090610cc9906bffffffffffffffffffffffff168761338e565b610cd391906133a5565b91519350909150505b9250929050565b600082815260086020526040902060010154610cfe81611149565b6108fd8383611426565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610d3281611149565b6109fb82611448565b6001600160a01b0381163314610dd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610b05565b6109fb8282611454565b60607f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610e0981611149565b610e5984848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506daaeb6d7670e522a718067333cd4e939250506114769050565b949350505050565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610e8b81611149565b610b706114ba565b6108fd83838361150c565b7fe0fb75b40f2731fce9fd08fd8e51c7db44b9ffb2e43369a2734fc1a121a6b307610ec881611149565b610ed485858585611531565b5050505050565b60006108c382611545565b60006001600160a01b038216610f28576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610f7881611149565b610b706000610f8a6001546000540390565b6115de565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610fb981611149565b610b7061161b565b6000828152600960205260408120610fd99083611658565b9392505050565b6060600380546109119061330c565b6109fb8282611664565b61100584848484611678565b50505050565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf7661103581611149565b610b7061169e565b6060611048826112b2565b61107e576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110886116e8565b905080516000036110a85760405180602001604052806000815250610fd9565b806110b2846116f7565b6040516020016110c39291906133e0565b6040516020818303038152906040529392505050565b60008181526009602052604081206108c39061173b565b60008281526008602052604090206001015461110b81611149565b6108fd8383611454565b6060600d80546109119061330c565b60006108c382611745565b600061113a8261175b565b806108c357506108c382611793565b610b70813361179e565b6127106bffffffffffffffffffffffff821611156111f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401610b05565b6001600160a01b038216611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610b05565b604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff90911660209092018290527401000000000000000000000000000000000000000090910217600b55565b60008054821080156108c35750506000908152600460205260409020547c0100000000000000000000000000000000000000000000000000000000161590565b816112fc8161182d565b6108fd8383611918565b600e805482919060ff1916600183600381111561132557611325613135565b021790555050565b6113777fe0fb75b40f2731fce9fd08fd8e51c7db44b9ffb2e43369a2734fc1a121a6b3077fd83ac62169e315c6fc3ecdb2c5b6ae75284053b2c2f2fb9fc715ba380283e9426119e9565b565b60008061138583610edb565b9050806001600160a01b0316846001600160a01b031614806113cc57506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b80610e5957506113db83610994565b6001600160a01b0316846001600160a01b03161491505092915050565b6109fb81611a34565b826001600160a01b038116331461141b5761141b3361182d565b611005848484611a3f565b6114308282611c6d565b60008281526009602052604090206108fd9082611d0f565b600d6109fb8282613455565b61145e8282611d24565b60008281526009602052604090206108fd9082611da7565b6060610fd9838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250611dbc565b6114c2611ec8565b600a805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b826001600160a01b0381163314611526576115263361182d565b611005848484611f34565b611005848467ffffffffffffffff16611f4f565b6000816000548110156115ac57600081815260046020526040812054907c0100000000000000000000000000000000000000000000000000000000821690036115aa575b80600003610fd9575060001901600081815260046020526040902054611589565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051838152602081018390527f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c910160405180910390a15050565b61162361208d565b600a805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586114ef3390565b6000610fd983836120fa565b8161166e8161182d565b6108fd8383612124565b836001600160a01b0381163314611692576116923361182d565b610ed485858585612190565b6113777f44ac9762eec3a11893fefb11d028bb3102560094137c3ed4518712475b2577cc7fd83ac62169e315c6fc3ecdb2c5b6ae75284053b2c2f2fb9fc715ba380283e9426119e9565b60606116f26121ed565b905090565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a9004806117115750819003601f19909101908152919050565b60006108c3825490565b6000611750826121f7565b806108c357506108c3825b60006117668261224d565b8061177557506117758261232e565b80611784575061178482611793565b806108c357506108c382612384565b60006108c38261241b565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff166109fb576117d181612471565b6117dc836020612483565b6040516020016117ed929190613515565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610b0591600401612ec2565b6daaeb6d7670e522a718067333cd4e3b15610b70576040517fc61711340000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156118b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d79190613596565b610b70576040517fede71dcc0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610b05565b600061192382610edb565b9050336001600160a01b038216146119755761193f813361086c565b611975576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600082815260086020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b610b708160006126c6565b6000611a4a82611545565b9050836001600160a01b0316816001600160a01b031614611a97576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090208054611ac38187335b6001600160a01b039081169116811491141790565b611b0757611ad1863361086c565b611b07576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611b47576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b548686866001612869565b8015611b5f57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b177c0200000000000000000000000000000000000000000000000000000000176000858152600460205260408120919091557c020000000000000000000000000000000000000000000000000000000084169003611c2357600184016000818152600460205260408120549003611c21576000548114611c215760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff166109fb5760008281526008602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611ccb3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610fd9836001600160a01b038416612875565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff16156109fb5760008281526008602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610fd9836001600160a01b0384166128c4565b606082471015611e4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610b05565b600080866001600160a01b03168587604051611e6a91906135b3565b60006040518083038185875af1925050503d8060008114611ea7576040519150601f19603f3d011682016040523d82523d6000602084013e611eac565b606091505b5091509150611ebd878383876129b7565b979650505050505050565b600a5460ff16611377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b05565b6108fd83838360405180602001604052806000815250610ff9565b6000805490829003611f8d576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f9a6000848385612869565b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461204957808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101612011565b5081600003612084576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005550505050565b600a5460ff1615611377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b05565b6000826000018281548110612111576121116135cf565b9060005260206000200154905092915050565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61219b848484610bf9565b6001600160a01b0383163b15611005576121b784848484612a4a565b611005576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606116f2611115565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f1e9a69500000000000000000000000000000000000000000000000000000000014806108c357506108c382611793565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806122e057507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806108c35750507fffffffff00000000000000000000000000000000000000000000000000000000167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a0000000000000000000000000000000000000000000000000000000014806108c357506108c3826121f7565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f490649060000000000000000000000000000000000000000000000000000000014806108c357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146108c3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806108c357506108c382612b95565b60606108c36001600160a01b03831660145b6060600061249283600261338e565b61249d9060026135fe565b67ffffffffffffffff8111156124b5576124b5612fc3565b6040519080825280601f01601f1916602001820160405280156124df576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612516576125166135cf565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612579576125796135cf565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006125b584600261338e565b6125c09060016135fe565b90505b600181111561265d577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612601576126016135cf565b1a60f81b828281518110612617576126176135cf565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361265681613611565b90506125c3565b508315610fd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610b05565b60006126d183611545565b9050806000806126ef86600090815260066020526040902080549091565b91509150841561274857612704818433611aae565b61274857612712833361086c565b612748576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612756836000886001612869565b801561276157600082555b6001600160a01b038316600081815260056020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b177c0300000000000000000000000000000000000000000000000000000000176000878152600460205260408120919091557c0200000000000000000000000000000000000000000000000000000000851690036128215760018601600081815260046020526040812054900361281f57600054811461281f5760008181526004602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050600180548101905550505050565b61100584848484612c2c565b60008181526001830160205260408120546128bc575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108c3565b5060006108c3565b600081815260018301602052604081205480156129ad5760006128e8600183613628565b85549091506000906128fc90600190613628565b905081811461296157600086600001828154811061291c5761291c6135cf565b906000526020600020015490508087600001848154811061293f5761293f6135cf565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806129725761297261363b565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108c3565b60009150506108c3565b60608315612a40578251600003612a39576001600160a01b0385163b612a39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b05565b5081610e59565b610e598383612c38565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081526000906001600160a01b0385169063150b7a0290612a9890339089908890889060040161366a565b6020604051808303816000875af1925050508015612ad3575060408051601f3d908101601f19168201909252612ad0918101906136a6565b60015b612b4a573d808015612b01576040519150601f19603f3d011682016040523d82523d6000602084013e612b06565b606091505b508051600003612b42576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050610e59565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806108c357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146108c3565b61100584848484612c7c565b815115612c485781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b059190612ec2565b612c8884848484612d51565b6000612c96600e5460ff1690565b90506000816003811115612cac57612cac613135565b03612cb75750611005565b6001816003811115612ccb57612ccb613135565b148015612cdf57506001600160a01b038516155b15612cea5750611005565b6002816003811115612cfe57612cfe613135565b148015612d1257506001600160a01b038416155b15612d1d5750611005565b806040517ffc40c881000000000000000000000000000000000000000000000000000000008152600401610b059190613164565b600a5460ff1615612dbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f45524337323141436f6d6d6f6e3a2070617573656400000000000000000000006044820152606401610b05565b611005565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610b7057600080fd5b600060208284031215612e0357600080fd5b8135610fd981612dc3565b80356001600160a01b0381168114612e2557600080fd5b919050565b60008060408385031215612e3d57600080fd5b612e4683612e0e565b915060208301356bffffffffffffffffffffffff81168114612e6757600080fd5b809150509250929050565b60005b83811015612e8d578181015183820152602001612e75565b50506000910152565b60008151808452612eae816020860160208601612e72565b601f01601f19169290920160200192915050565b602081526000610fd96020830184612e96565b600060208284031215612ee757600080fd5b5035919050565b60008060408385031215612f0157600080fd5b612f0a83612e0e565b946020939093013593505050565b600060208284031215612f2a57600080fd5b813560048110610fd957600080fd5b600080600060608486031215612f4e57600080fd5b612f5784612e0e565b9250612f6560208501612e0e565b9150604084013590509250925092565b60008060408385031215612f8857600080fd5b50508035926020909101359150565b60008060408385031215612faa57600080fd5b82359150612fba60208401612e0e565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff8084111561300d5761300d612fc3565b604051601f8501601f19908116603f0116810190828211818310171561303557613035612fc3565b8160405280935085815286868601111561304e57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561307a57600080fd5b813567ffffffffffffffff81111561309157600080fd5b8201601f810184136130a257600080fd5b610e5984823560208401612ff2565b60008083601f8401126130c357600080fd5b50813567ffffffffffffffff8111156130db57600080fd5b602083019150836020828501011115610cdc57600080fd5b6000806020838503121561310657600080fd5b823567ffffffffffffffff81111561311d57600080fd5b613129858286016130b1565b90969095509350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016004831061319f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080600080606085870312156131bb57600080fd5b6131c485612e0e565b9350602085013567ffffffffffffffff80821682146131e257600080fd5b909350604086013590808211156131f857600080fd5b50613205878288016130b1565b95989497509550505050565b60006020828403121561322357600080fd5b610fd982612e0e565b8015158114610b7057600080fd5b6000806040838503121561324d57600080fd5b61325683612e0e565b91506020830135612e678161322c565b6000806000806080858703121561327c57600080fd5b61328585612e0e565b935061329360208601612e0e565b925060408501359150606085013567ffffffffffffffff8111156132b657600080fd5b8501601f810187136132c757600080fd5b6132d687823560208401612ff2565b91505092959194509250565b600080604083850312156132f557600080fd5b6132fe83612e0e565b9150612fba60208401612e0e565b600181811c9082168061332057607f821691505b602082108103613359577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176108c3576108c361335f565b6000826133db577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600083516133f2818460208801612e72565b835190830190613406818360208801612e72565b01949350505050565b601f8211156108fd57600081815260208120601f850160051c810160208610156134365750805b601f850160051c820191505b81811015611c6557828155600101613442565b815167ffffffffffffffff81111561346f5761346f612fc3565b6134838161347d845461330c565b8461340f565b602080601f8311600181146134b857600084156134a05750858301515b600019600386901b1c1916600185901b178555611c65565b600085815260208120601f198616915b828110156134e7578886015182559484019460019091019084016134c8565b50858210156135055787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161354d816017850160208801612e72565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161358a816028840160208801612e72565b01602801949350505050565b6000602082840312156135a857600080fd5b8151610fd98161322c565b600082516135c5818460208701612e72565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b808201808211156108c3576108c361335f565b6000816136205761362061335f565b506000190190565b818103818111156108c3576108c361335f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006001600160a01b0380871683528086166020840152508360408301526080606083015261369c6080830184612e96565b9695505050505050565b6000602082840312156136b857600080fd5b8151610fd981612dc356fea264697066735822122036527a4d4f45007bcf0cafed856208399abd97e588a0b0693def1d84df0c5e0264736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000032220f07dbcd18149f619f28cd09fd911cc0372d00000000000000000000000032220f07dbcd18149f619f28cd09fd911cc0372d0000000000000000000000002ed939a9285b42eb5cdb3cfd3b0bb9a48ab1c5b70000000000000000000000000000000000000000000000000000000000002710
-----Decoded View---------------
Arg [0] : admin (address): 0x32220f07DBcd18149f619F28cD09FD911cc0372D
Arg [1] : steerer (address): 0x32220f07DBcd18149f619F28cD09FD911cc0372D
Arg [2] : secondaryReceiver (address): 0x2eD939a9285B42EB5CdB3cfD3B0bb9a48aB1c5b7
Arg [3] : numDayOneBirds (uint64): 10000
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000032220f07dbcd18149f619f28cd09fd911cc0372d
Arg [1] : 00000000000000000000000032220f07dbcd18149f619f28cd09fd911cc0372d
Arg [2] : 0000000000000000000000002ed939a9285b42eb5cdb3cfd3b0bb9a48ab1c5b7
Arg [3] : 0000000000000000000000000000000000000000000000000000000000002710
Loading...
Loading
Loading...
Loading
[ 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.