Source Code
Latest 25 from a total of 3,177 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Redeem Artist Pa... | 15266133 | 1310 days ago | IN | 0 ETH | 0.00169346 | ||||
| __Withdraw ERC20 | 15244910 | 1313 days ago | IN | 0 ETH | 0.00086941 | ||||
| Redeem GT | 15219542 | 1317 days ago | IN | 0 ETH | 0.00118213 | ||||
| __Withdraw ERC20 | 15192260 | 1321 days ago | IN | 0 ETH | 0.00061809 | ||||
| _Live Mint Artis... | 15187853 | 1322 days ago | IN | 0 ETH | 0.00121214 | ||||
| __Minter Add | 15187848 | 1322 days ago | IN | 0 ETH | 0.00044035 | ||||
| Redeem Artist Pa... | 15174426 | 1324 days ago | IN | 0 ETH | 0.00480779 | ||||
| _Live Mint Artis... | 15044517 | 1344 days ago | IN | 0 ETH | 0.00985873 | ||||
| _Live Mint Artis... | 15034784 | 1346 days ago | IN | 0 ETH | 0.04370948 | ||||
| Redeem Artist Pa... | 15034372 | 1346 days ago | IN | 0 ETH | 0.00410366 | ||||
| Redeem Artist Pa... | 15032286 | 1347 days ago | IN | 0 ETH | 0.00409871 | ||||
| _Live Mint Artis... | 15031101 | 1347 days ago | IN | 0 ETH | 0.01746809 | ||||
| Redeem Artist Pa... | 15030771 | 1347 days ago | IN | 0 ETH | 0.00374355 | ||||
| _Live Mint Artis... | 15029907 | 1347 days ago | IN | 0 ETH | 0.02134694 | ||||
| Redeem Artist Pa... | 15029853 | 1347 days ago | IN | 0 ETH | 0.00476527 | ||||
| _Live Mint Artis... | 15020468 | 1349 days ago | IN | 0 ETH | 0.01324334 | ||||
| Redeem Artist Pa... | 15020461 | 1349 days ago | IN | 0 ETH | 0.00483892 | ||||
| _Live Mint Artis... | 14893590 | 1371 days ago | IN | 0 ETH | 0.01684192 | ||||
| Redeem Artist Pa... | 14892443 | 1371 days ago | IN | 0 ETH | 0.00997796 | ||||
| _Live Mint Artis... | 14818730 | 1383 days ago | IN | 0 ETH | 0.01794666 | ||||
| Redeem Artist Pa... | 14818722 | 1383 days ago | IN | 0 ETH | 0.00468758 | ||||
| _Live Mint Artis... | 14818503 | 1383 days ago | IN | 0 ETH | 0.00707802 | ||||
| Redeem Artist Pa... | 14818485 | 1383 days ago | IN | 0 ETH | 0.00314757 | ||||
| _Live Mint Artis... | 14818446 | 1383 days ago | IN | 0 ETH | 0.01248393 | ||||
| Redeem Artist Pa... | 14815276 | 1384 days ago | IN | 0 ETH | 0.00210853 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CryptoCitizenLiveMint
Compiler Version
v0.8.13+commit.abaa5c0e
Optimization Enabled:
Yes with 1000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
/**
* @dev: @brougkr
*/
pragma solidity 0.8.13;
import {IERC721} from '@openzeppelin/contracts/interfaces/IERC721.sol';
import {IERC20} from '@openzeppelin/contracts/interfaces/IERC20.sol';
import {Pausable} from '@openzeppelin/contracts/security/Pausable.sol';
import {Ownable} from '@openzeppelin/contracts/access/Ownable.sol';
import {ReentrancyGuard} from '@openzeppelin/contracts/security/ReentrancyGuard.sol';
import {IArtBlocks} from './IArtBlocks.sol';
import {IRandomEdition} from './IRandomEdition.sol';
contract CryptoCitizenLiveMint is Ownable, Pausable, ReentrancyGuard
{
/*-------------------*/
/* STATE VARIABLES */
/*-------------------*/
bytes32 private immutable _MINTER_ROLE = keccak256("MINTER_ROLE"); // Minter Role
bytes32 private immutable _DEACTIVATED_ROLE = keccak256("DELISTED_ROLE"); // Deactivated Role
address public _BRTMULTISIG = 0x90DBc54DBfe6363aCdBa4E54eE97A2e0073EA7ad; // BRT Multisig Address
address public _ERC20_BRT_Token = 0x85674c97eC09A9018e96EBf67536B62A446fD290; // BRT ERC-20 Contract Address
address public _ArtBlocksMintingContractCitizens = 0xDd06d8483868Cd0C5E69C24eEaA2A5F2bEaFd42b; // ArtBlocks Minting Contract Address CryptoCitizens
address public _ArtBlocksMintingContractArtists = 0x7b9a45E278b5B374bb2d96C65665d4360C97BF01; // ArtBlocks Minting Contract Address Bright Moments
address public _ArtBlocksCoreContractCitizens = 0xbDdE08BD57e5C9fD563eE7aC61618CB2ECdc0ce0; // ArtBlocks Citizen NFT Collection Contract Address
address public _ArtBlocksCoreContractArtists = 0x0A1BBD57033F57E7B6743621b79fCB9Eb2CE3676; // ArtBlocks Artist NFT Collection Contract Address
address public _GoldenToken = 0xd64a6F3c0bC12A619fF7eEf511b0258DA913C5c3; // Golden Token Contract Address
uint public _ArtBlocksProjectID = 3; // ArtBlocks Project ID
uint public _CurrentCityIndex; // Current City Index
/*-------------------*/
/* MAPPINGS */
/*-------------------*/
mapping(uint => mapping(uint => mapping(uint => address))) public BrightListArtist; // Returns Address Of Minting Receiver For Artist Mint
mapping(uint => mapping(uint => mapping(uint => uint))) public SelectedTimeSlotArtistMintPass; // Returns Selected TimeSlot Corresponding To Artist Mint Pass
mapping(uint => mapping(uint => mapping(uint => bool))) public DelegateStatusArtist; // Returns Delegate Status Of Artist TicketID
mapping(uint => mapping(uint => mapping(uint => bool))) public MintedArtist; // Returns Boolean If Artist MintPass ID Has Minted Or Not
mapping(uint => mapping(uint => address)) public BrightListCitizen; // Returns Address Of Minting Receiver For CryptoCitizen Mint
mapping(uint => mapping(uint => address)) public ArtistMintPasses; // Returns Contract Address Of Artist Mint Pass NFT
mapping(uint => mapping(uint => address)) public ArtistContracts; // Returns Contract Address Of Artist Collection NFT
mapping(uint => mapping(uint => bool)) public MintType; // Artist Mint Type (true for ArtBlocks | false for Random Edition)
mapping(uint => mapping(uint => uint)) public BookingsAvailable; // Returns Amount Of Bookings Available For Input TimeSlot
mapping(uint => mapping(uint => uint)) public SelectedTimeSlotGoldenTicket; // Returns Selected TimeSlot Corresponding To Golden Ticket
mapping(uint => mapping(uint => bool)) public MintedCitizen; // Returns Boolean If Golden Ticket ID Has Minted Or Not
mapping(uint => mapping(uint => bool)) public DelegateStatusCitizen; // Returns Delegate Status Of Citizen TicketID
mapping(address => bytes32) private Role; // BRT Minter Role Mapping
/*-------------------*/
/* EVENTS */
/*-------------------*/
/**
* @dev Emitted When `Redeemer` IRL-mints CryptoCitizen Corresponding To Their Redeemed `TicketID`.
**/
event LiveMintComplete(address indexed Redeemer, uint TicketID, uint TokenID, bool Delegate);
/**
* @dev Emitted When `Redeemer` IRL-Mints Artist Corresponding To `ArtistID`
*/
event LiveMintCompleteArtist(address indexed Redeemer, uint ArtistID, uint TicketID, uint TokenID, bool Delegate);
/**
* @dev Emitted When `Redeemer` Redeems Golden Token Corresponding To `TicketID`
**/
event GoldenTokenRedeemed(address indexed Redeemer, uint TicketID, uint Slot, bool Delegate);
/**
* @dev Emitted When `Redeemer` Redeems Artist Mint Pass Corresponding To `TicketID`
*/
event ArtistMintPassRedeemed(address indexed Redeemer, uint ArtistID, uint TicketID, uint Slot, bool Delegate);
/**
* @dev Emitted When `NewMinter` Is Added To BRT Minter List
*/
event MinterAdded(address NewMinter);
/**
* @dev Emitted When `RemovedMinter` Is Removed From BRT Minter List
*/
event MinterRemoved(address RemovedMinter);
/**
* @dev Emitted When `NewProjectID` Replaces `OldProjectID`
*/
event ModifiedProjectID(uint OldProjectID, uint NewProjectID);
/**
* @dev Emitted When `NewMintingAddress` Replaces `OldMintingAddress`
*/
event ArtBlocksMintingAddressChanged(address OldMintingAddress, address NewMintingAddress);
/**
* @dev Emitted When `NewCoreAddress` Replaces `OldCoreAddress` For ArtBlocks Citizen Mints
*/
event ArtBlocksCoreAddressChanged(address OldCoreAddress, address NewCoreAddress);
/**
* @dev Emitted When `NewCoreAddress` Replaces `OldCoreAddress` For ArtBlocks Artist Mints
*/
event ArtBlocksCoreAddressChangedArtist(address OldCoreAddress, address NewCoreAddress);
/**
* @dev Emitted When `NewGTAddress` Replaces `OldGTAddress`
*/
event GoldenTokenAddressChanged(address OldGTAddress, address NewGTAddress);
/**
* @dev Emitted When `NewERC20Address` Replaces `OldERC20Address`
*/
event ERC20AddressChanged(address OldERC20Address, address NewERC20Address);
/**
* @dev Emitted When `NewIndex` Replaces `OldIndex`
*/
event CurrentCityIndexChanged(uint OldIndex, uint NewIndex);
/**
* @dev Emitted When Singular Timeslot Changes From `OldAmount` to `NewAmount`
*/
event TimeSlotChanged(uint OldAmount, uint NewAmount);
/**
* @dev Emitted When Multiple Timeslot Changes Occur
*/
event TimeSlotsChanged(uint[] Slots, uint[] Amounts);
/**
* @dev Emitted When Artist Contract Address Changes
*/
event ArtistContractAddressChanged(address OldContractAddress, address NewContractAddress);
/**
* @dev Emitted When Artist Mint Type Changes
*/
event ArtistMintTypeChanged(bool OldMintType, bool NewMintType);
/**
* @dev Emitted When Multisig Address Changes
*/
event MultisigAddressChanged(address OldAddress, address NewAddress);
/**
* @dev Emitted When New City State Variables Are Modified
*/
event NewCityStarted(
address ERC20_BRT_TokenAddress,
address ArtBlocksMintingContractAddress,
address ArtBlocksCoreContractAddressCitizen,
address ArtBlocksCoreContractAddressArtist,
address GoldenTokenAddress,
uint ArtBlocksProjectID,
uint CurrentCityIndex
);
/**
* @dev Emitted When New Artists Are Seeded Into The Contract
*/
event NewArtists(uint[] ArtistIDs, address[] MintPasses, address[] MintingAddresses, bool[] MintTypes);
/*-------------------*/
/* CONSTRUCTOR */
/*-------------------*/
/**
* @dev Pre-Approves 1000 BRT For Purchasing, Grants BRT Minter Roles, & Transfers Ownership To BRT Multisig
**/
constructor()
{
Role[0x1A0a3E3AE390a0710f8A6d00587082273eA8F6C9] = _MINTER_ROLE; // BRT Minter #1
Role[0x4d8013b0c264034CBf22De9DF33e22f58D52F207] = _MINTER_ROLE; // BRT Minter #2
Role[0x4D9A8CF2fE52b8D49C7F7EAA87b2886c2bCB4160] = _MINTER_ROLE; // BRT Minter #3
Role[0x124fd966A0D83aA020D3C54AE2c9f4800b46F460] = _MINTER_ROLE; // BRT Minter #4
Role[0x100469feA90Ac1Fe1073E1B2b5c020A8413635c4] = _MINTER_ROLE; // BRT Minter #5
Role[0x756De4236373fd17652b377315954ca327412bBA] = _MINTER_ROLE; // BRT Minter #6
Role[0xc5Dfba6ef7803665C1BDE478B51Bd7eB257A2Cb9] = _MINTER_ROLE; // BRT Minter #7
Role[0xFBF32b29Bcf8fEe32d43a4Bfd3e7249daec457C0] = _MINTER_ROLE; // BRT Minter #8
Role[0xF2A15A83DEE7f03C70936449037d65a1C100FF27] = _MINTER_ROLE; // BRT Minter #9
Role[0x1D2BAB965a4bB72f177Cd641C7BacF3d8257230D] = _MINTER_ROLE; // BRT Minter #10
Role[0x2e51E8b950D72BDf003b58E357C2BA28FB77c7fB] = _MINTER_ROLE; // BRT Minter #11
Role[0x8a7186dECb91Da854090be8226222eA42c5eeCb6] = _MINTER_ROLE; // BRT Minter #12
BookingsAvailable[_CurrentCityIndex][20220604] = 200; // April 6th
BookingsAvailable[_CurrentCityIndex][20220804] = 200; // April 8th
BookingsAvailable[_CurrentCityIndex][20220904] = 200; // April 9th
BookingsAvailable[_CurrentCityIndex][20221304] = 200; // April 13th
BookingsAvailable[_CurrentCityIndex][20221504] = 200; // April 15th
BookingsAvailable[_CurrentCityIndex][20221604] = 200; // April 16th
BookingsAvailable[_CurrentCityIndex][20221704] = 200; // April 17th
BookingsAvailable[_CurrentCityIndex][20222004] = 200; // April 20th
BookingsAvailable[_CurrentCityIndex][20222204] = 200; // April 22nd
BookingsAvailable[_CurrentCityIndex][20222304] = 200; // April 23rd
IERC20(_ERC20_BRT_Token).approve( // Approves BRT For CryptoCitizen Mints
_ArtBlocksMintingContractCitizens,
0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff //Approves Maximum BRT For ArtBlocks Purchasing
);
IERC20(0xC7C984A44716B00FACCb55Fb1210417Ac95ED6b4).approve( // Approves BRT For PBAB Artist #1
_ArtBlocksMintingContractArtists,
0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff //Approves Maximum BRT For ArtBlocks Purchasing
);
IERC20(0x45cea915AD27c46E65709C63B1aE35091b9dF020).approve( // Approves BRT For PBAB Artist #2
_ArtBlocksMintingContractArtists,
0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff //Approves Maximum BRT For ArtBlocks Purchasing
);
IERC20(0x19007Ad537838B7aBc913BdCAB4E0139fC570fbB).approve( // Approves BRT For PBAB Artist #3
_ArtBlocksMintingContractArtists,
0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff //Approves Maximum BRT For ArtBlocks Purchasing
);
IERC20(0xeeB508b7bFF99d6fD03C8D28A305908d74220fd7).approve( // Approves BRT For PBAB Artist #4
_ArtBlocksMintingContractArtists,
0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff //Approves Maximum BRT For ArtBlocks Purchasing
);
IERC20(0x7670baB5fb8171AE138DB5C4E0F7309bF09a0B57).approve( // Approves BRT For PBAB Artist #5
_ArtBlocksMintingContractArtists,
0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff //Approves Maximum BRT For ArtBlocks Purchasing
);
IERC20(0x557586605a6Db4379b5384a0D61b2D749e0799be).approve( // Approves BRT For PBAB Artist #6
_ArtBlocksMintingContractArtists,
0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff //Approves Maximum BRT For ArtBlocks Purchasing
);
transferOwnership(_BRTMULTISIG); // Transfers Ownership To Multisig
}
/*-------------------*/
/* PUBLIC FUNCTIONS */
/*-------------------*/
/**
* @dev Redeems Golden Token & BrightLists Address To Receive CryptoCitizen
**/
function RedeemGT(uint TicketID, uint TimeSlot, bool Delegate) public nonReentrant whenNotPaused
{
require(BookingsAvailable[_CurrentCityIndex][TimeSlot] > 0, "LiveMint: TimeSlot Fully Booked");
require(IERC721(_GoldenToken).ownerOf(TicketID) == msg.sender, "ERC721: Sender Does Not Own Token With The Input Token ID");
IERC721(_GoldenToken).transferFrom(msg.sender, _BRTMULTISIG, TicketID);
require(IERC721(_GoldenToken).ownerOf(TicketID) == _BRTMULTISIG, "ERC721: Golden Token Redemption Failed");
BookingsAvailable[_CurrentCityIndex][TimeSlot]--;
SelectedTimeSlotGoldenTicket[_CurrentCityIndex][TicketID] = TimeSlot;
BrightListCitizen[_CurrentCityIndex][TicketID] = msg.sender;
DelegateStatusCitizen[_CurrentCityIndex][TicketID] = Delegate;
emit GoldenTokenRedeemed(msg.sender, TicketID, TimeSlot, Delegate);
}
/**
* @dev Redeems Artist Mint Pass & BrightLists Address To Receive Artist Mint
**/
function RedeemArtistPass(uint ArtistID, uint TicketID, uint TimeSlot, bool Delegate) public nonReentrant whenNotPaused
{
require(BookingsAvailable[_CurrentCityIndex][TimeSlot] > 0, "LiveMint: TimeSlot Fully Booked");
address ArtistMintPass = resolveArtistMintPass(ArtistID);
require(IERC721(ArtistMintPass).ownerOf(TicketID) == msg.sender, "ERC721: Sender Does Not Own Token With The Input Token ID");
IERC721(ArtistMintPass).transferFrom(msg.sender, _BRTMULTISIG, TicketID);
require(IERC721(ArtistMintPass).ownerOf(TicketID) == _BRTMULTISIG, "ERC721: Golden Token Redemption Failed");
BrightListArtist[_CurrentCityIndex][ArtistID][TicketID] = msg.sender;
BookingsAvailable[_CurrentCityIndex][TimeSlot]--;
SelectedTimeSlotArtistMintPass[_CurrentCityIndex][ArtistID][TicketID] = TimeSlot;
DelegateStatusArtist[_CurrentCityIndex][ArtistID][TicketID] = Delegate;
emit ArtistMintPassRedeemed(msg.sender, ArtistID, TicketID, TimeSlot, Delegate);
}
/*-------------------*/
/* BRT STAFF */
/*-------------------*/
/**
* @dev IRL Minting Function Available Only At Bright Moments NFT Art Gallery
**/
function _LiveMint(uint TicketID) public onlyMinter whenNotPaused
{
address Recipient = readBrightListCitizen(TicketID);
require(Recipient != address(0), "LiveMint: Golden Token Entered Is Not Brightlisted");
require(!MintedCitizen[_CurrentCityIndex][TicketID], "LiveMint: Golden Token Already Minted");
BrightListCitizen[_CurrentCityIndex][TicketID] = address(0);
MintedCitizen[_CurrentCityIndex][TicketID] = true;
uint TokenID = IArtBlocks(_ArtBlocksMintingContractCitizens).purchase(_ArtBlocksProjectID);
IERC721(_ArtBlocksCoreContractCitizens).transferFrom(address(this), Recipient, TokenID);
emit LiveMintComplete(Recipient, TicketID, TokenID, DelegateStatusCitizen[_CurrentCityIndex][TicketID]);
}
/**
* @dev IRL Minting Function Available Only At Bright Moments NFT Art Gallery
**/
function _LiveMintArtist(uint ArtistID, uint TicketID) public onlyMinter whenNotPaused
{
address Recipient = readBrightListArtist(ArtistID, TicketID);
require(Recipient != address(0), "LiveMint: Mint Pass Entered Is Not Brightlisted");
require(!MintedArtist[_CurrentCityIndex][ArtistID][TicketID], "LiveMint: Artist Mint Pass Already Minted");
BrightListArtist[_CurrentCityIndex][ArtistID][TicketID] = address(0);
MintedArtist[_CurrentCityIndex][ArtistID][TicketID] = true;
address ArtistMintingContractAddress = resolveArtistContract(ArtistID);
bool ArtBlocksMint = resolveArtistMint(ArtistID);
if(ArtBlocksMint)
{
uint TokenID = IArtBlocks(ArtistMintingContractAddress).purchase(ArtistID);
IERC721(_ArtBlocksCoreContractArtists).transferFrom(address(this), Recipient, TokenID);
emit LiveMintCompleteArtist(Recipient, ArtistID, TicketID, TokenID, DelegateStatusArtist[_CurrentCityIndex][ArtistID][TicketID]);
}
else
{
uint TokenID = IRandomEdition(ArtistMintingContractAddress)._Mint(Recipient, 1);
emit LiveMintCompleteArtist(Recipient, ArtistID, TicketID, TokenID, DelegateStatusArtist[_CurrentCityIndex][ArtistID][TicketID]);
}
}
/*-------------------*/
/* ADMIN FUNCTIONS */
/*-------------------*/
/**
* @dev Delegate Mints Citizens
*/
function __DelegateMintCitizens(uint[] calldata TicketIDs) external onlyOwner
{
for(uint i; i < TicketIDs.length; i++)
{
address Recipient = readBrightListCitizen(TicketIDs[i]);
require(Recipient != address(0), "LiveMint: Golden Token Entered Is Not Brightlisted");
require(!MintedCitizen[_CurrentCityIndex][TicketIDs[i]], "LiveMint: Golden Token Already Minted");
BrightListCitizen[_CurrentCityIndex][TicketIDs[i]] = address(0);
MintedCitizen[_CurrentCityIndex][TicketIDs[i]] = true;
uint TokenID = IArtBlocks(_ArtBlocksMintingContractCitizens).purchase(_ArtBlocksProjectID);
IERC721(_ArtBlocksCoreContractCitizens).transferFrom(address(this), Recipient, TokenID);
emit LiveMintComplete(Recipient, TicketIDs[i], TokenID, true);
}
}
/**
* @dev Delegate Mints Artists
*/
function __DelegateMintArtists(uint[] calldata ArtistIDs, uint[] calldata TicketIDs) external onlyOwner
{
require(ArtistIDs.length == TicketIDs.length, "LiveMint: Arrays Must Be Of Equal Length");
for(uint i; i < TicketIDs.length; i++)
{
address Recipient = readBrightListArtist(ArtistIDs[i], TicketIDs[i]);
require(Recipient != address(0), "LiveMint: Mint Pass Entered Is Not Brightlisted");
require(!MintedArtist[_CurrentCityIndex][ArtistIDs[i]][TicketIDs[i]], "LiveMint: Artist Mint Pass Already Minted");
BrightListArtist[_CurrentCityIndex][ArtistIDs[i]][TicketIDs[i]] = address(0);
MintedArtist[_CurrentCityIndex][ArtistIDs[i]][TicketIDs[i]] = true;
address ArtistContractAddress = resolveArtistContract(ArtistIDs[i]);
bool ArtBlocksMint = resolveArtistMint(ArtistIDs[i]);
if(ArtBlocksMint)
{
uint TokenID = IArtBlocks(ArtistContractAddress).purchase(ArtistIDs[i]);
IERC721(_ArtBlocksCoreContractArtists).transferFrom(address(this), Recipient, TokenID);
emit LiveMintCompleteArtist(Recipient, ArtistIDs[i], TicketIDs[i], TokenID, true);
}
else
{
uint TokenID = IRandomEdition(ArtistContractAddress)._Mint(Recipient, 1);
emit LiveMintCompleteArtist(Recipient, ArtistIDs[i], TicketIDs[i], TokenID, true);
}
}
}
/**
* @dev Approves BRT For Purchasing On ArtBlocks Contract
**/
function __ApproveERC20(address BRT, address Operator, uint Amount) external onlyOwner { IERC20(BRT).approve(Operator, Amount); }
/**
* @dev Batch Approves BRT For Purchasing
*/
function __BatchApproveERC20(address[] calldata ERC20s, address[] calldata Operators, uint[] calldata Amounts) external onlyOwner
{
require(ERC20s.length == Operators.length && Operators.length == Amounts.length, "LiveMint: Arrays Must Be Equal Length");
for(uint i; i < ERC20s.length; i++)
{
IERC20(ERC20s[i]).approve(Operators[i], Amounts[i]);
}
}
/**
* @dev Grants Address BRT Minter Role
**/
function __MinterAdd(address Minter) external onlyOwner
{
Role[Minter] = _MINTER_ROLE;
emit MinterAdded(Minter);
}
/**
* @dev Deactivates Address From BRT Minter Role
**/
function __MinterRemove(address Minter) external onlyOwner
{
Role[Minter] = _DEACTIVATED_ROLE;
emit MinterRemoved(Minter);
}
/**
* @dev Modifies ArtBlocks Minting Address Citizens
*/
function __ChangeArtBlocksMintingAddress(address NewMintingAddress) external onlyOwner
{
address OldMintingAddress = _ArtBlocksMintingContractCitizens;
_ArtBlocksMintingContractCitizens = NewMintingAddress;
emit ArtBlocksMintingAddressChanged(OldMintingAddress, _ArtBlocksMintingContractCitizens);
}
/**
* @dev Modifies ArtBlocks Minting Address Artists
*/
function __ChangeArtBlocksMintingAddressArtists(address NewMintingAddress) external onlyOwner
{
address OldMintingAddress = _ArtBlocksMintingContractArtists;
_ArtBlocksMintingContractArtists = NewMintingAddress;
emit ArtBlocksMintingAddressChanged(OldMintingAddress, _ArtBlocksMintingContractArtists);
}
/**
* @dev Modifies ArtBlocks Core Address Citizens
*/
function __ChangeArtBlocksCoreAddress(address NewMintingAddress) external onlyOwner
{
address OldMintingAddress = _ArtBlocksCoreContractCitizens;
_ArtBlocksCoreContractCitizens = NewMintingAddress;
emit ArtBlocksCoreAddressChanged(OldMintingAddress, _ArtBlocksCoreContractCitizens);
}
/**
* @dev Modifies ArtBlocks Core Address Artists
*/
function __ChangeArtBlocksCoreAddressArtist(address NewMintingAddress) external onlyOwner
{
address OldMintingAddress = _ArtBlocksCoreContractArtists;
_ArtBlocksCoreContractArtists = NewMintingAddress;
emit ArtBlocksCoreAddressChangedArtist(OldMintingAddress, _ArtBlocksCoreContractArtists);
}
/**
* @dev Modifies Artist Contract Address
*/
function __ChangeArtistContractAddress(uint ArtistID, address NewContractAddress) external onlyOwner
{
address OldArtistContractAddress = resolveArtistContract(ArtistID);
ArtistContracts[_CurrentCityIndex][ArtistID] = NewContractAddress;
emit ArtistContractAddressChanged(OldArtistContractAddress, NewContractAddress);
}
/**
* @dev Modifies Artist Mint Type
* note: True For ArtBlocks | False For Random Edition
*/
function __ChangeArtistMintType(uint ArtistID, bool NewMintType) external onlyOwner
{
bool OldMintType = resolveArtistMint(ArtistID);
MintType[_CurrentCityIndex][ArtistID] = NewMintType;
emit ArtistMintTypeChanged(OldMintType, NewMintType);
}
/**
* @dev Modifies The Current ArtBlocks ProjectID
**/
function __ChangeArtBlocksProjectID(uint ArtBlocksProjectID) external onlyOwner
{
uint OldProjectID = _ArtBlocksProjectID;
_ArtBlocksProjectID = ArtBlocksProjectID;
emit ModifiedProjectID(OldProjectID, _ArtBlocksProjectID);
}
/**
* @dev Modifies Golden Token Address
*/
function __ChangeGoldenTokenAddress(address NewGTAddress) external onlyOwner
{
address OldAddress = _GoldenToken;
_GoldenToken = NewGTAddress;
emit GoldenTokenAddressChanged(OldAddress, _GoldenToken);
}
/**
* @dev Modifies ERC20 BRT Minting Token Address
*/
function __ChangeERC20Address(address NewERC20Address) external onlyOwner
{
address OldAddress = _ERC20_BRT_Token;
_ERC20_BRT_Token = NewERC20Address;
emit ERC20AddressChanged(OldAddress, _ERC20_BRT_Token);
}
/**
* @dev Modifies Current City Index
*/
function __ChangeCityIndex(uint Index) external onlyOwner
{
uint OldIndex = _CurrentCityIndex;
_CurrentCityIndex = Index;
emit CurrentCityIndexChanged(OldIndex, _CurrentCityIndex);
}
/**
* @dev Changes TimeSlot At Index `Slot`
* note: Slot is denoted in YYYY-DD-MM with no -'s (20220101) for Jan 1st
*/
function __ChangeTimeSlot(uint Slot, uint Amount) external onlyOwner
{
uint OldAmount = BookingsAvailable[_CurrentCityIndex][Slot];
BookingsAvailable[_CurrentCityIndex][Slot] = Amount;
emit TimeSlotChanged(OldAmount, Amount);
}
/**
* @dev Changes Multisig Address
*/
function __ChangeMultisigAddress(address NewAddress) external onlyOwner
{
address OldAddress = _BRTMULTISIG;
_BRTMULTISIG = NewAddress;
emit MultisigAddressChanged(OldAddress, NewAddress);
}
/**
* @dev Changes Multiple TimeSlots
* note: Slot is denoted in YYYY-DD-MM with no -'s (20220101) for Jan 1st
*/
function __ChangeTimeSlots(uint[] calldata Slots, uint[] calldata Amounts) external onlyOwner
{
require(Slots.length == Amounts.length, "Arrays Must Match Length");
for(uint i; i < Slots.length; i++)
{
BookingsAvailable[_CurrentCityIndex][Slots[i]] = Amounts[i];
}
emit TimeSlotsChanged(Slots, Amounts);
}
/**
* @dev Batch Changes State Variables For LiveMint
* note: __ApproveBRT(_ERC20_BRT_Token) Will Need To Be Called On This Contract After This Function
* note: This Is So That Variables Can Be Double Checked & Mint Will Not Be Active Until That Is Complete
*/
function __NewCity(
address ERC20TokenAddress,
address ArtBlocksMintingContractAddress,
address ArtBlocksCoreContractAddress,
address ArtBlocksCoreContractAddressArtist,
address GoldenTokenAddress,
uint ArtBlocksProjectID,
uint CurrentCityIndex
)
external onlyOwner
{
_ERC20_BRT_Token = ERC20TokenAddress;
_ArtBlocksMintingContractCitizens = ArtBlocksMintingContractAddress;
_ArtBlocksCoreContractCitizens = ArtBlocksCoreContractAddress;
_ArtBlocksCoreContractArtists = ArtBlocksCoreContractAddressArtist;
_GoldenToken = GoldenTokenAddress;
_ArtBlocksProjectID = ArtBlocksProjectID;
_CurrentCityIndex = CurrentCityIndex;
emit NewCityStarted(
_ERC20_BRT_Token,
_ArtBlocksMintingContractCitizens,
_ArtBlocksCoreContractCitizens,
_ArtBlocksCoreContractArtists,
_GoldenToken,
_ArtBlocksProjectID,
_CurrentCityIndex
);
}
/**
* @dev Instantiates New Artists At `CurrentCityIndex` => `ArtistID[i]`
* @dev note: ArtistIDs = uint[]
* @dev note: MintPasses = address[] (this is the MintPass contract addresses)
* @dev note: MintingAddresses = address[] (this is the NFTs to be Minted)
* @dev note: MintTypes = bool[] (true for ArtBlocks) | (false for Random Edition)
*/
function __NewArtists(
uint[] calldata ArtistIDs,
address[] calldata MintPasses,
address[] calldata MintingAddresses,
bool[] calldata MintTypes
) external onlyOwner {
require(
ArtistIDs.length == MintPasses.length
&& MintPasses.length == MintingAddresses.length
&& MintingAddresses.length == MintTypes.length,
"LiveMint: Array Lengths Must Be Of Equal Value"
);
for(uint i; i < ArtistIDs.length; i++)
{
ArtistMintPasses[_CurrentCityIndex][ArtistIDs[i]] = MintPasses[i];
ArtistContracts[_CurrentCityIndex][ArtistIDs[i]] = MintingAddresses[i];
MintType[_CurrentCityIndex][ArtistIDs[i]] = MintTypes[i];
}
emit NewArtists(ArtistIDs, MintPasses, MintingAddresses, MintTypes);
}
/**
* @dev Withdraws Any Ether Mistakenly Sent to Contract to Multisig
**/
function __WithdrawEther() external onlyOwner { payable(msg.sender).transfer(address(this).balance); }
/**
* @dev Withdraws ERC20 Tokens to Multisig
**/
function __WithdrawERC20(address tokenAddress) external onlyOwner
{
IERC20 erc20Token = IERC20(tokenAddress);
uint balance = erc20Token.balanceOf(address(this));
require(balance > 0, "0 ERC20 Balance At `tokenAddress`");
erc20Token.transfer(msg.sender, balance);
}
/**
* @dev Withdraws Any NFT Mistakenly Sent To This Contract.
*/
function __WithdrawERC721(address ContractAddress, address Recipient, uint TokenID) external onlyOwner
{
IERC721(ContractAddress).transferFrom(address(this), Recipient, TokenID);
}
/*-------------------*/
/* PUBLIC VIEW */
/*-------------------*/
/**
* @dev Returns BrightListed Address Corresponding to Golden Ticket `TicketID`
**/
function readBrightListCitizen(uint TicketID) public view returns(address)
{
return BrightListCitizen[_CurrentCityIndex][TicketID];
}
/**
* @dev Returns BrightListed Address Corresponding to Mint Pass `ArtistID` & `TicketID`
*/
function readBrightListArtist(uint ArtistID, uint TicketID) public view returns(address)
{
return BrightListArtist[_CurrentCityIndex][ArtistID][TicketID];
}
/**
* @dev Returns Artist NFT Contract Address Correpsonding To ArtistID (1 through 10)
*/
function resolveArtistContract(uint ArtistID) public view returns(address)
{
return ArtistContracts[_CurrentCityIndex][ArtistID];
}
/**
* @dev Returns Artist Mint Pass Contract Address Correpsonding To ArtistID
*/
function resolveArtistMintPass(uint ArtistID) public view returns(address)
{
return ArtistMintPasses[_CurrentCityIndex][ArtistID];
}
/**
* @dev Batch Returns Owned Artist Mint Passes
*/
function resolveArtistMintPasses(uint[] calldata ArtistIDs) public view returns(address[] memory)
{
address[] memory MintPasses = new address[](ArtistIDs.length);
for(uint i; i < ArtistIDs.length; i++)
{
address x = resolveArtistMintPass(ArtistIDs[i]);
MintPasses[i] = x;
}
return MintPasses;
}
/**
* @dev Returns Artist ArtBlocks Mint Type (true for ArtBlocks Mint) | (false for Random Edition Mint)
*/
function resolveArtistMint(uint ArtistID) public view returns(bool)
{
return MintType[_CurrentCityIndex][ArtistID];
}
/**
* @dev Returns Booked TimeSlot For Golden Ticket Corresponding `TicketID`
*/
function readTimeSlotGoldenTicket(uint TicketID) public view returns(uint)
{
return SelectedTimeSlotGoldenTicket[_CurrentCityIndex][TicketID];
}
/**
* @dev Returns Booked TimeSlot For Artist Mint Pass Corresponding To `TicketID`
*/
function readTimeSlotArtistMintPass(uint ArtistID, uint TicketID) public view returns(uint)
{
return SelectedTimeSlotArtistMintPass[_CurrentCityIndex][ArtistID][TicketID];
}
/**
* @dev Returns If Golden Token Corresponding To `TicketID` Has Been Minted
*/
function readMintedCitizen(uint TicketID) public view returns(bool)
{
return MintedCitizen[_CurrentCityIndex][TicketID];
}
/**
* @dev Returns If Artist Mint Pass Corresponding To `TicketID` Has Been Minted
*/
function readMintedArtist(uint ArtistID, uint TicketID) public view returns(bool)
{
return MintedArtist[_CurrentCityIndex][ArtistID][TicketID];
}
/**
* @dev Returns Owner Of Mint Pass Corresponding To `TicketID`
*/
function readOwnerOfMintPass(uint ArtistID, uint TicketID) public view returns(address)
{
return IERC721(resolveArtistMintPass(ArtistID)).ownerOf(TicketID);
}
/**
* @dev Returns Owner Of Golden Token Corresponding To `TicketID`
*/
function readOwnerOfGoldenToken(uint TicketID) public view returns(address)
{
return IERC721(_GoldenToken).ownerOf(TicketID);
}
/**
* @dev Returns Artist Metadata
*/
function readMetadataArtist(uint ArtistID, uint TokenID) public view returns(string memory)
{
if(!resolveArtistMint(ArtistID))
{
return IRandomEdition(resolveArtistContract(ArtistID)).tokenURI(TokenID);
}
else if(resolveArtistMint(ArtistID))
{
return IArtBlocks(resolveArtistContract(ArtistID)).tokenURI(TokenID);
}
else { return "Artist NFT Corresponding To `TicketID` Not Minted"; }
}
/**
* @dev Returns Citizen Metadata
*/
function readMetadataCitizen(uint TokenID) public view returns (string memory)
{
return IArtBlocks(_ArtBlocksCoreContractCitizens).tokenURI(TokenID);
}
/**
* @dev Batch Returns If `Wallet` Owns Multiple TokenIDs Of Singular NFT Address
*/
function readNFTOwnedTokenIDs(
address Wallet,
address NFTAddress,
uint Range
) public view returns (uint[] memory) {
IERC721 NFT = IERC721(NFTAddress);
uint[] memory temp = new uint[](Range);
uint counter;
for (uint x; x <= Range; x++)
{
try NFT.ownerOf(x)
{
if(NFT.ownerOf(x) == Wallet)
{
temp[counter] = x;
counter++;
}
} catch { }
}
uint[] memory OwnedIDs = new uint[](counter);
uint index;
for(uint z; z < Range; z++)
{
if(temp[z] != 0 || (z == 0 && temp[z] == 0))
{
OwnedIDs[index] = temp[z];
index++;
}
}
return OwnedIDs;
}
/**
* @dev Batch Returns If Wallet Owns Multiple TokenIDs Of Multiple NFTs
*/
function readNFTsOwnedTokenIDs(
address Wallet,
address[] calldata NFTAddresses,
uint Range
) public view returns (uint[][] memory) {
uint[][] memory OwnedIDs = new uint[][](NFTAddresses.length);
for(uint x; x < NFTAddresses.length; x++)
{
try IERC721(NFTAddresses[x]).ownerOf(x) //checks if valid ERC721
{
IERC721 NFT = IERC721(NFTAddresses[x]);
uint[] memory temp = new uint[](Range);
uint counter;
for(uint y; y < Range; y++)
{
try NFT.ownerOf(y)
{
if(NFT.ownerOf(y) == Wallet)
{
temp[counter] = y;
counter++;
}
} catch { }
}
uint[] memory FormattedOwnedIDs = new uint[](counter);
uint index;
for(uint z; z < counter; z++)
{
if(temp[z] != 0 || (z == 0 && temp[z] == 0))
{
FormattedOwnedIDs[index] = temp[z];
index++;
}
}
OwnedIDs[x] = FormattedOwnedIDs;
} catch { }
}
return OwnedIDs;
}
/*-------------------*/
/* MODIFIERS */
/*-------------------*/
/**
* @dev Function Modifier That Allows Only BrightListed BRT Minters To Access
**/
modifier onlyMinter()
{
require(Role[msg.sender] == _MINTER_ROLE, "OnlyMinter: Caller Is Not Approved BRT Minter");
_;
}
}// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721.sol) pragma solidity ^0.8.0; import "../token/ERC721/IERC721.sol";
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol) pragma solidity ^0.8.0; import "../token/ERC20/IERC20.sol";
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
bool private _paused;
/**
* @dev Initializes the contract in unpaused state.
*/
constructor() {
_paused = false;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
require(!paused(), "Pausable: paused");
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
require(paused(), "Pausable: not paused");
_;
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
interface IArtBlocks
{
function purchase(uint256 _projectId) payable external returns (uint tokenID);
function tokenURI(uint256 _tokenId) external view returns (string memory);
}//SPDX-License-Identifier: MIT
pragma solidity 0.8.13;
interface IRandomEdition
{
function _Mint(address Recipient, uint Amount) external returns(uint tokenID); //Mints Random Edition
function tokenURI(uint256 tokenId) external view returns (string memory); //Returns IPFS Metadata
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}// 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);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}// 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;
}
}{
"optimizer": {
"enabled": true,
"runs": 1000
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"OldCoreAddress","type":"address"},{"indexed":false,"internalType":"address","name":"NewCoreAddress","type":"address"}],"name":"ArtBlocksCoreAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"OldCoreAddress","type":"address"},{"indexed":false,"internalType":"address","name":"NewCoreAddress","type":"address"}],"name":"ArtBlocksCoreAddressChangedArtist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"OldMintingAddress","type":"address"},{"indexed":false,"internalType":"address","name":"NewMintingAddress","type":"address"}],"name":"ArtBlocksMintingAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"OldContractAddress","type":"address"},{"indexed":false,"internalType":"address","name":"NewContractAddress","type":"address"}],"name":"ArtistContractAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"Redeemer","type":"address"},{"indexed":false,"internalType":"uint256","name":"ArtistID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TicketID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"Slot","type":"uint256"},{"indexed":false,"internalType":"bool","name":"Delegate","type":"bool"}],"name":"ArtistMintPassRedeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"OldMintType","type":"bool"},{"indexed":false,"internalType":"bool","name":"NewMintType","type":"bool"}],"name":"ArtistMintTypeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"OldIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"NewIndex","type":"uint256"}],"name":"CurrentCityIndexChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"OldERC20Address","type":"address"},{"indexed":false,"internalType":"address","name":"NewERC20Address","type":"address"}],"name":"ERC20AddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"OldGTAddress","type":"address"},{"indexed":false,"internalType":"address","name":"NewGTAddress","type":"address"}],"name":"GoldenTokenAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"Redeemer","type":"address"},{"indexed":false,"internalType":"uint256","name":"TicketID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"Slot","type":"uint256"},{"indexed":false,"internalType":"bool","name":"Delegate","type":"bool"}],"name":"GoldenTokenRedeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"Redeemer","type":"address"},{"indexed":false,"internalType":"uint256","name":"TicketID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TokenID","type":"uint256"},{"indexed":false,"internalType":"bool","name":"Delegate","type":"bool"}],"name":"LiveMintComplete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"Redeemer","type":"address"},{"indexed":false,"internalType":"uint256","name":"ArtistID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TicketID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TokenID","type":"uint256"},{"indexed":false,"internalType":"bool","name":"Delegate","type":"bool"}],"name":"LiveMintCompleteArtist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"NewMinter","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"RemovedMinter","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"OldProjectID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"NewProjectID","type":"uint256"}],"name":"ModifiedProjectID","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"OldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"NewAddress","type":"address"}],"name":"MultisigAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"ArtistIDs","type":"uint256[]"},{"indexed":false,"internalType":"address[]","name":"MintPasses","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"MintingAddresses","type":"address[]"},{"indexed":false,"internalType":"bool[]","name":"MintTypes","type":"bool[]"}],"name":"NewArtists","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"ERC20_BRT_TokenAddress","type":"address"},{"indexed":false,"internalType":"address","name":"ArtBlocksMintingContractAddress","type":"address"},{"indexed":false,"internalType":"address","name":"ArtBlocksCoreContractAddressCitizen","type":"address"},{"indexed":false,"internalType":"address","name":"ArtBlocksCoreContractAddressArtist","type":"address"},{"indexed":false,"internalType":"address","name":"GoldenTokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"ArtBlocksProjectID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"CurrentCityIndex","type":"uint256"}],"name":"NewCityStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"OldAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"NewAmount","type":"uint256"}],"name":"TimeSlotChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"Slots","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"Amounts","type":"uint256[]"}],"name":"TimeSlotsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ArtistContracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ArtistMintPasses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"BookingsAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"BrightListArtist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"BrightListCitizen","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"DelegateStatusArtist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"DelegateStatusCitizen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"MintType","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"MintedArtist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"MintedCitizen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ArtistID","type":"uint256"},{"internalType":"uint256","name":"TicketID","type":"uint256"},{"internalType":"uint256","name":"TimeSlot","type":"uint256"},{"internalType":"bool","name":"Delegate","type":"bool"}],"name":"RedeemArtistPass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"TicketID","type":"uint256"},{"internalType":"uint256","name":"TimeSlot","type":"uint256"},{"internalType":"bool","name":"Delegate","type":"bool"}],"name":"RedeemGT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"SelectedTimeSlotArtistMintPass","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"SelectedTimeSlotGoldenTicket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ArtBlocksCoreContractArtists","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ArtBlocksCoreContractCitizens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ArtBlocksMintingContractArtists","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ArtBlocksMintingContractCitizens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ArtBlocksProjectID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_BRTMULTISIG","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_CurrentCityIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ERC20_BRT_Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_GoldenToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"TicketID","type":"uint256"}],"name":"_LiveMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ArtistID","type":"uint256"},{"internalType":"uint256","name":"TicketID","type":"uint256"}],"name":"_LiveMintArtist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"BRT","type":"address"},{"internalType":"address","name":"Operator","type":"address"},{"internalType":"uint256","name":"Amount","type":"uint256"}],"name":"__ApproveERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"ERC20s","type":"address[]"},{"internalType":"address[]","name":"Operators","type":"address[]"},{"internalType":"uint256[]","name":"Amounts","type":"uint256[]"}],"name":"__BatchApproveERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"NewMintingAddress","type":"address"}],"name":"__ChangeArtBlocksCoreAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"NewMintingAddress","type":"address"}],"name":"__ChangeArtBlocksCoreAddressArtist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"NewMintingAddress","type":"address"}],"name":"__ChangeArtBlocksMintingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"NewMintingAddress","type":"address"}],"name":"__ChangeArtBlocksMintingAddressArtists","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ArtBlocksProjectID","type":"uint256"}],"name":"__ChangeArtBlocksProjectID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ArtistID","type":"uint256"},{"internalType":"address","name":"NewContractAddress","type":"address"}],"name":"__ChangeArtistContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ArtistID","type":"uint256"},{"internalType":"bool","name":"NewMintType","type":"bool"}],"name":"__ChangeArtistMintType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Index","type":"uint256"}],"name":"__ChangeCityIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"NewERC20Address","type":"address"}],"name":"__ChangeERC20Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"NewGTAddress","type":"address"}],"name":"__ChangeGoldenTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"NewAddress","type":"address"}],"name":"__ChangeMultisigAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Slot","type":"uint256"},{"internalType":"uint256","name":"Amount","type":"uint256"}],"name":"__ChangeTimeSlot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"Slots","type":"uint256[]"},{"internalType":"uint256[]","name":"Amounts","type":"uint256[]"}],"name":"__ChangeTimeSlots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ArtistIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"TicketIDs","type":"uint256[]"}],"name":"__DelegateMintArtists","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"TicketIDs","type":"uint256[]"}],"name":"__DelegateMintCitizens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"Minter","type":"address"}],"name":"__MinterAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"Minter","type":"address"}],"name":"__MinterRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ArtistIDs","type":"uint256[]"},{"internalType":"address[]","name":"MintPasses","type":"address[]"},{"internalType":"address[]","name":"MintingAddresses","type":"address[]"},{"internalType":"bool[]","name":"MintTypes","type":"bool[]"}],"name":"__NewArtists","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ERC20TokenAddress","type":"address"},{"internalType":"address","name":"ArtBlocksMintingContractAddress","type":"address"},{"internalType":"address","name":"ArtBlocksCoreContractAddress","type":"address"},{"internalType":"address","name":"ArtBlocksCoreContractAddressArtist","type":"address"},{"internalType":"address","name":"GoldenTokenAddress","type":"address"},{"internalType":"uint256","name":"ArtBlocksProjectID","type":"uint256"},{"internalType":"uint256","name":"CurrentCityIndex","type":"uint256"}],"name":"__NewCity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"__WithdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ContractAddress","type":"address"},{"internalType":"address","name":"Recipient","type":"address"},{"internalType":"uint256","name":"TokenID","type":"uint256"}],"name":"__WithdrawERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"__WithdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ArtistID","type":"uint256"},{"internalType":"uint256","name":"TicketID","type":"uint256"}],"name":"readBrightListArtist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"TicketID","type":"uint256"}],"name":"readBrightListCitizen","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ArtistID","type":"uint256"},{"internalType":"uint256","name":"TokenID","type":"uint256"}],"name":"readMetadataArtist","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"TokenID","type":"uint256"}],"name":"readMetadataCitizen","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ArtistID","type":"uint256"},{"internalType":"uint256","name":"TicketID","type":"uint256"}],"name":"readMintedArtist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"TicketID","type":"uint256"}],"name":"readMintedCitizen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"Wallet","type":"address"},{"internalType":"address","name":"NFTAddress","type":"address"},{"internalType":"uint256","name":"Range","type":"uint256"}],"name":"readNFTOwnedTokenIDs","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"Wallet","type":"address"},{"internalType":"address[]","name":"NFTAddresses","type":"address[]"},{"internalType":"uint256","name":"Range","type":"uint256"}],"name":"readNFTsOwnedTokenIDs","outputs":[{"internalType":"uint256[][]","name":"","type":"uint256[][]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"TicketID","type":"uint256"}],"name":"readOwnerOfGoldenToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ArtistID","type":"uint256"},{"internalType":"uint256","name":"TicketID","type":"uint256"}],"name":"readOwnerOfMintPass","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ArtistID","type":"uint256"},{"internalType":"uint256","name":"TicketID","type":"uint256"}],"name":"readTimeSlotArtistMintPass","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"TicketID","type":"uint256"}],"name":"readTimeSlotGoldenTicket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ArtistID","type":"uint256"}],"name":"resolveArtistContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ArtistID","type":"uint256"}],"name":"resolveArtistMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ArtistID","type":"uint256"}],"name":"resolveArtistMintPass","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ArtistIDs","type":"uint256[]"}],"name":"resolveArtistMintPasses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c06040527f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66080527f0ca2130f35d7180a61feea714de11e4b72dd995ef848ffe34d9f2c765186442f60a052600280546001600160a01b03199081167390dbc54dbfe6363acdba4e54ee97a2e0073ea7ad179091556003805482167385674c97ec09a9018e96ebf67536b62a446fd29017815560048054831673dd06d8483868cd0c5e69c24eeaa2a5f2beafd42b179055600580548316737b9a45e278b5b374bb2d96c65665d4360c97bf0117905560068054831673bdde08bd57e5c9fd563ee7ac61618cb2ecdc0ce0179055600780548316730a1bbd57033f57e7b6743621b79fcb9eb2ce36761790556008805490921673d64a6f3c0bc12a619ff7eef511b0258da913c5c3179091556009553480156200013b57600080fd5b50620001473362000820565b6000805460ff60a01b19168155600180556080517f83f4ca1fb24d1a8b4a4d5da6b6c0e82ae661f6d56a260a10e0c88a31f3a9e3538190557fce7a29e8353546b3aef7dd7c4f68bff9549c6b4fe87d878cb0efa3cf5546a6f38190557f7b4192486643348ebb85c68154e925c9063ae09ffb0124a61bc614fe7688bf8c8190557f32c19a2110568b6f52f58967812491156e738f5715de70c3bd75998bccb429218190557fb14139e2d49b4bb243e9edd632803cf0bfdfa9879c7a1b8906f49c035716e37b8190557ff47902a317be8b2c85838baba9121d937ee8d5b4771fa37142d49b77ac3300038190557fe7472860c5b10f8b8b113a74b6ddda282863fba03ec5ac6fbac87ddd2d3a7c728190557ee0012a40953de408f89b155f6791e3860d28e94280b51c03f827fddb87a33c8190557feaa39edbfcd5b09e4c28fdc22b53846b4ac10669ded4f801186a1e69f9d1fe438190557fe2d15d36e6e7510573353c6ff002d21c60e8fac2f23fc7f2b58b6636eccd51568190557f350506923e76a39211d3b628c135eafae7837666caf82aa59216b4fbc58749a68190557fca4e805fcbd031772f31f12fc9e530b318299cc0b5de289979a0e321fba758a455600a805482526013602081815260408085206301348abc8652825280852060c890819055845486528383528186206301348b8487528352818620819055845486528383528186206301348be887528352818620819055845486528383528186206301348d7887528352818620819055845486528383528186206301348e4087528352818620819055845486528383528186206301348ea487528352818620819055845486528383528186206301348f0887528352818620819055845486528383528186206301349034875283528186208190558454865283835281862063013490fc8752835281862081905593548552918152818420630134916085529052918290205560035460048054925163095ea7b360e01b81526001600160a01b03938416918101919091526001600160fc1b03602482015291169063095ea7b3906044016020604051808303816000875af11580156200046a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000490919062000945565b5060055460405163095ea7b360e01b81526001600160a01b0390911660048201526001600160fc1b03602482015273c7c984a44716b00faccb55fb1210417ac95ed6b49063095ea7b3906044016020604051808303816000875af1158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000945565b5060055460405163095ea7b360e01b81526001600160a01b0390911660048201526001600160fc1b0360248201527345cea915ad27c46e65709c63b1ae35091b9df0209063095ea7b3906044016020604051808303816000875af115801562000590573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005b6919062000945565b5060055460405163095ea7b360e01b81526001600160a01b0390911660048201526001600160fc1b0360248201527319007ad537838b7abc913bdcab4e0139fc570fbb9063095ea7b3906044016020604051808303816000875af115801562000623573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000649919062000945565b5060055460405163095ea7b360e01b81526001600160a01b0390911660048201526001600160fc1b03602482015273eeb508b7bff99d6fd03c8d28a305908d74220fd79063095ea7b3906044016020604051808303816000875af1158015620006b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006dc919062000945565b5060055460405163095ea7b360e01b81526001600160a01b0390911660048201526001600160fc1b036024820152737670bab5fb8171ae138db5c4e0f7309bf09a0b579063095ea7b3906044016020604051808303816000875af115801562000749573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200076f919062000945565b5060055460405163095ea7b360e01b81526001600160a01b0390911660048201526001600160fc1b03602482015273557586605a6db4379b5384a0d61b2d749e0799be9063095ea7b3906044016020604051808303816000875af1158015620007dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000802919062000945565b506002546200081a906001600160a01b031662000870565b62000970565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620008d05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038116620009375760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620008c7565b620009428162000820565b50565b6000602082840312156200095857600080fd5b815180151581146200096957600080fd5b9392505050565b60805160a051615030620009a46000396000611fbe015260008181610c9d015281816126000152613db501526150306000f3fe608060405234801561001057600080fd5b50600436106104575760003560e01c8063715018a611610250578063ae9f672311610150578063dcf6609c116100c8578063e7ee79ba11610097578063f2fde38b1161007c578063f2fde38b14610be2578063f820e21314610bf5578063fbf17d1d14610bfe57600080fd5b8063e7ee79ba14610bbc578063ea44e47b14610bcf57600080fd5b8063dcf6609c14610b58578063e0203e3214610b6b578063e314e86a14610b7e578063e76ef7f014610ba957600080fd5b8063c31dec981161011f578063c4607e5a11610104578063c4607e5a14610b1f578063c5bd8f5d14610b32578063d4c7f5d214610b4557600080fd5b8063c31dec9814610aec578063c421a38614610b0c57600080fd5b8063ae9f672314610a38578063b54c235814610a6e578063b669d18414610aa5578063bc61c94f14610ad957600080fd5b80638da5cb5b116101e3578063a1daab5b116101b2578063aaf31b5f11610197578063aaf31b5f146109cb578063ad06726414610a05578063ae32350514610a1857600080fd5b8063a1daab5b1461098d578063a6a09bbe146109c357600080fd5b80638da5cb5b1461094357806393116441146109545780639ea801a114610967578063a078a06f1461097a57600080fd5b806385970d7e1161021f57806385970d7e146108a157806386170b5a146108b457806388d3187e146108e257806388d3f1211461090f57600080fd5b8063715018a6146108455780637e5d1f221461084d5780637e6db80514610860578063807f8ec41461087357600080fd5b80633ec5cb3d1161035b5780635b4c2a70116102ee5780635f814b3d116102bd578063656a1c3a116102a2578063656a1c3a146107ff57806366e3a96b1461081f5780636954d6ef1461083257600080fd5b80635f814b3d146107e357806362d2ed99146107ec57600080fd5b80635b4c2a701461078b5780635ba6ef1c1461079e5780635c975abb146107be5780635dbbe83d146107d057600080fd5b80634ef2a5561161032a5780634ef2a556146107015780634f96e8be146107145780634fdf9ccb1461072757806356167f051461075757600080fd5b80633ec5cb3d1461068e57806344a6da6a146106c857806344b41394146106db5780634ed5a01f146106ee57600080fd5b80632366b5b5116103ee5780632ccf7994116103bd578063330a5a5d116103a2578063330a5a5d1461063d5780633477a5c7146106685780633adeeab61461067b57600080fd5b80632ccf799414610617578063305cc9d31461062a57600080fd5b80632366b5b5146105ae5780632679f5a6146105de5780632a097867146105f15780632c1850cb1461060457600080fd5b8063198947791161042a578063198947791461050b5780631d7288491461054a578063202e094a146105885780632318a1de1461059b57600080fd5b806309b345c61461045c5780630d6c2673146104af5780631010761d146104c457806316fbf6da146104d7575b600080fd5b61049261046a366004614694565b600a54600090815260116020908152604080832093835292905220546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b6104c26104bd3660046146c2565b610c32565b005b6104c26104d2366004614694565b610cf2565b6104926104e53660046146df565b60106020908152600092835260408084209091529082529020546001600160a01b031681565b61053c610519366004614701565b600c60209081526000938452604080852082529284528284209052825290205481565b6040519081526020016104a6565b6105786105583660046146df565b601660209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016104a6565b6104c26105963660046146c2565b610d80565b6104c26105a93660046146c2565b610e22565b6105786105bc366004614694565b600a546000908152601260209081526040808320938352929052205460ff1690565b6104c26105ec3660046146df565b610ec4565b6104926105ff3660046146df565b610f6c565b6104c26106123660046146c2565b610fa1565b6104c26106253660046146c2565b611043565b6104c2610638366004614694565b6110e5565b61053c61064b3660046146df565b601360209081526000928352604080842090915290825290205481565b6104c261067636600461472d565b61116b565b6104c26106893660046146c2565b611220565b61049261069c366004614701565b600b6020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b600554610492906001600160a01b031681565b6104c26106e93660046147ba565b6112c2565b6104926106fc366004614694565b611940565b600654610492906001600160a01b031681565b6104c2610722366004614834565b6119ae565b610578610735366004614694565b600a546000908152601560209081526040808320938352929052205460ff1690565b6104926107653660046146df565b600f6020908152600092835260408084209091529082529020546001600160a01b031681565b6104c2610799366004614864565b611a5f565b6107b16107ac36600461489d565b611e76565b6040516104a691906148df565b600054600160a01b900460ff16610578565b6104c26107de3660046146c2565b611f58565b61053c600a5481565b600354610492906001600160a01b031681565b61081261080d366004614694565b61200c565b6040516104a69190614958565b61081261082d3660046146df565b612097565b6104c261084036600461489d565b6121d3565b6104c261259a565b6104c261085b3660046146df565b6125ee565b6104c261086e36600461498b565b612acc565b6105786108813660046146df565b601560209081526000928352604080842090915290825290205460ff1681565b600254610492906001600160a01b031681565b6105786108c23660046146df565b601260209081526000928352604080842090915290825290205460ff1681565b61053c6108f0366004614694565b600a546000908152601460209081526040808320938352929052205490565b61057861091d366004614701565b600e60209081526000938452604080852082529284528284209052825290205460ff1681565b6000546001600160a01b0316610492565b6104c2610962366004614a4f565b612d8c565b6104c26109753660046146c2565b612e46565b6104c26109883660046146c2565b61301d565b61049261099b366004614694565b600a54600090815260106020908152604080832093835292905220546001600160a01b031690565b6104c26130bf565b6105786109d93660046146df565b600a546000908152600e6020908152604080832094835293815283822092825291909152205460ff1690565b600754610492906001600160a01b031681565b610a2b610a2636600461472d565b613136565b6040516104a69190614aaf565b610492610a46366004614694565b600a546000908152600f6020908152604080832093835292905220546001600160a01b031690565b61053c610a7c3660046146df565b600a546000908152600c6020908152604080832094835293815283822092825291909152205490565b610492610ab33660046146df565b60116020908152600092835260408084209091529082529020546001600160a01b031681565b6104c2610ae7366004614ac2565b6133b5565b610aff610afa366004614b03565b613811565b6040516104a69190614b5f565b610492610b1a3660046146df565b613bdd565b6104c2610b2d36600461472d565b613c6b565b6104c2610b403660046146c2565b613d01565b600454610492906001600160a01b031681565b6104c2610b66366004614694565b613da3565b6104c2610b79366004614bc1565b614130565b61053c610b8c3660046146df565b601460209081526000928352604080842090915290825290205481565b6104c2610bb7366004614c5b565b614314565b600854610492906001600160a01b031681565b6104c2610bdd3660046147ba565b614427565b6104c2610bf03660046146c2565b61457b565b61053c60095481565b610578610c0c366004614701565b600d60209081526000938452604080852082529284528284209052825290205460ff1681565b6000546001600160a01b03163314610c7f5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb83398151915260448201526064015b60405180910390fd5b6001600160a01b0381166000818152601760209081526040918290207f0000000000000000000000000000000000000000000000000000000000000000905590519182527f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f691015b60405180910390a150565b6000546001600160a01b03163314610d3a5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600a80549082905560408051828152602081018490527fd81e4554b6404363f9a2ab085fc04910f4d20930399c9978bd365f9c1f074fef91015b60405180910390a15050565b6000546001600160a01b03163314610dc85760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa7afa785bc9db9a508487983d37f8223f3581fd5ae43238b3e2cc1c752e454209101610d74565b6000546001600160a01b03163314610e6a5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600380546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa16259dba741c92b10d2339202358f678b6e920cea826df223eaa52c7b0a2c969101610d74565b6000546001600160a01b03163314610f0c5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600a5460009081526013602090815260408083208584528252918290208054908490558251818152918201849052917fdf9b2218770e8deab4ef5e5f3ee24b327ec522bdc844804c1d5ef90122e9766391015b60405180910390a1505050565b600a546000908152600b6020908152604080832085845282528083208484529091529020546001600160a01b03165b92915050565b6000546001600160a01b03163314610fe95760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa7afa785bc9db9a508487983d37f8223f3581fd5ae43238b3e2cc1c752e454209101610d74565b6000546001600160a01b0316331461108b5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600680546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527feed30cc21a856f488d40f0d214e9500d9eb8d6bdb2864966b023337e08036dde9101610d74565b6000546001600160a01b0316331461112d5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600980549082905560408051828152602081018490527f820f5f360bca3379a6943534639f36721a4ca8cf5ee114f045279880d83bdfcc9101610d74565b6000546001600160a01b031633146111b35760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b6040516323b872dd60e01b81523060048201526001600160a01b038381166024830152604482018390528416906323b872dd90606401600060405180830381600087803b15801561120357600080fd5b505af1158015611217573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146112685760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600780546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527ff2dc2552e164dfbe9c12877a26af83b10daae00fb40eb709638db99a44cc08669101610d74565b6000546001600160a01b0316331461130a5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b82811461137f5760405162461bcd60e51b815260206004820152602860248201527f4c6976654d696e743a20417272617973204d757374204265204f66204571756160448201527f6c204c656e6774680000000000000000000000000000000000000000000000006064820152608401610c76565b60005b818110156119395760006113c68686848181106113a1576113a1614cde565b905060200201358585858181106113ba576113ba614cde565b90506020020135610f6c565b90506001600160a01b0381166114445760405162461bcd60e51b815260206004820152602f60248201527f4c6976654d696e743a204d696e74205061737320456e7465726564204973204e60448201527f6f74204272696768746c697374656400000000000000000000000000000000006064820152608401610c76565b600a546000908152600e602052604081209087878581811061146857611468614cde565b905060200201358152602001908152602001600020600085858581811061149157611491614cde565b602090810292909201358352508101919091526040016000205460ff161561150d5760405162461bcd60e51b815260206004820152602960248201527f4c6976654d696e743a20417274697374204d696e74205061737320416c726561604482015268191e48135a5b9d195960ba1b6064820152608401610c76565b600a546000908152600b602052604081208188888681811061153157611531614cde565b905060200201358152602001908152602001600020600086868681811061155a5761155a614cde565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001600e6000600a54815260200190815260200160002060008888868181106115be576115be614cde565b90506020020135815260200190815260200160002060008686868181106115e7576115e7614cde565b90506020020135815260200190815260200160002060006101000a81548160ff021916908315150217905550600061165987878581811061162a5761162a614cde565b90506020020135600a54600090815260116020908152604080832093835292905220546001600160a01b031690565b9050600061169b88888681811061167257611672614cde565b90506020020135600a546000908152601260209081526040808320938352929052205460ff1690565b90508015611825576000826001600160a01b031663efef39a18a8a888181106116c6576116c6614cde565b905060200201356040518263ffffffff1660e01b81526004016116eb91815260200190565b6020604051808303816000875af115801561170a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172e9190614cf4565b6007546040516323b872dd60e01b81523060048201526001600160a01b038781166024830152604482018490529293509116906323b872dd90606401600060405180830381600087803b15801561178457600080fd5b505af1158015611798573d6000803e3d6000fd5b50505050836001600160a01b03167f3086372a0edc0afc8f7cc64433e69264e5daf9fe1236c0badd715d46f3e0c31f8a8a888181106117d9576117d9614cde565b905060200201358989898181106117f2576117f2614cde565b6040805194855260209182029390930135908401525081018490526001606082015260800160405180910390a250611923565b604051637d21ce4d60e01b81526001600160a01b0384811660048301526001602483015260009190841690637d21ce4d906044016020604051808303816000875af1158015611878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189c9190614cf4565b9050836001600160a01b03167f3086372a0edc0afc8f7cc64433e69264e5daf9fe1236c0badd715d46f3e0c31f8a8a888181106118db576118db614cde565b905060200201358989898181106118f4576118f4614cde565b6040805194855260209182029390930135908401525081018490526001606082015260800160405180910390a2505b505050808061193190614d23565b915050611382565b5050505050565b6008546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401602060405180830381865afa15801561198a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9b9190614d3c565b6000546001600160a01b031633146119f65760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600a546000908152601260209081526040808320858452825291829020805484151560ff1982168117909255835160ff90911680151582529281019190915290917fbf47cc4a716200ae502190ced53e414e19a4fa881c6dd0cc31b545c16f7a2c059101610f5f565b600260015403611ab15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c76565b6002600155600054600160a01b900460ff1615611b035760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c76565b600a546000908152601360209081526040808320858452909152902054611b6c5760405162461bcd60e51b815260206004820152601f60248201527f4c6976654d696e743a2054696d65536c6f742046756c6c7920426f6f6b6564006044820152606401610c76565b6008546040516331a9108f60e11b81526004810185905233916001600160a01b031690636352211e90602401602060405180830381865afa158015611bb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd99190614d3c565b6001600160a01b031614611c555760405162461bcd60e51b815260206004820152603960248201527f4552433732313a2053656e64657220446f6573204e6f74204f776e20546f6b6560448201527f6e20576974682054686520496e70757420546f6b656e204944000000000000006064820152608401610c76565b6008546002546040516323b872dd60e01b81523360048201526001600160a01b039182166024820152604481018690529116906323b872dd90606401600060405180830381600087803b158015611cab57600080fd5b505af1158015611cbf573d6000803e3d6000fd5b50506002546008546040516331a9108f60e11b8152600481018890526001600160a01b03928316945091169150636352211e90602401602060405180830381865afa158015611d12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d369190614d3c565b6001600160a01b031614611d9b5760405162461bcd60e51b815260206004820152602660248201527f4552433732313a20476f6c64656e20546f6b656e20526564656d7074696f6e2060448201526511985a5b195960d21b6064820152608401610c76565b600a5460009081526013602090815260408083208584529091528120805491611dc383614d59565b9091555050600a80546000908152601460209081526040808320878452825280832086905583548352600f8252808320878452825280832080546001600160a01b031916339081179091559354835260168252808320878452825291829020805485151560ff19909116811790915582518781529182018690528183015290517f6b58bb32ddb6dae0807a03b64a7cfc579641f9f374fb731a83e9e09db5d6c0af9181900360600190a250506001805550565b606060008267ffffffffffffffff811115611e9357611e93614d70565b604051908082528060200260200182016040528015611ebc578160200160208202803683370190505b50905060005b83811015611f50576000611f10868684818110611ee157611ee1614cde565b90506020020135600a54600090815260106020908152604080832093835292905220546001600160a01b031690565b905080838381518110611f2557611f25614cde565b6001600160a01b03909216602092830291909101909101525080611f4881614d23565b915050611ec2565b509392505050565b6000546001600160a01b03163314611fa05760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b6001600160a01b0381166000818152601760209081526040918290207f0000000000000000000000000000000000000000000000000000000000000000905590519182527fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929101610ce7565b6006546040517fc87b56dd000000000000000000000000000000000000000000000000000000008152600481018390526060916001600160a01b03169063c87b56dd90602401600060405180830381865afa15801561206f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f9b9190810190614d86565b60606120bf83600a546000908152601260209081526040808320938352929052205460ff1690565b61216357600a5460009081526011602090815260408083208684529091529020546001600160a01b03165b6001600160a01b031663c87b56dd836040518263ffffffff1660e01b815260040161211791815260200190565b600060405180830381865afa158015612134573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261215c9190810190614d86565b9050610f9b565b600a54600090815260126020908152604080832086845290915290205460ff16156121b357600a5460009081526011602090815260408083208684529091529020546001600160a01b03166120ea565b604051806060016040528060318152602001614faa603191399050610f9b565b6000546001600160a01b0316331461221b5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b60005b8181101561259557600061226c84848481811061223d5761223d614cde565b90506020020135600a546000908152600f6020908152604080832093835292905220546001600160a01b031690565b90506001600160a01b0381166122ea5760405162461bcd60e51b815260206004820152603260248201527f4c6976654d696e743a20476f6c64656e20546f6b656e20456e7465726564204960448201527f73204e6f74204272696768746c697374656400000000000000000000000000006064820152608401610c76565b600a5460009081526015602052604081209085858581811061230e5761230e614cde565b602090810292909201358352508101919091526040016000205460ff16156123865760405162461bcd60e51b815260206004820152602560248201527f4c6976654d696e743a20476f6c64656e20546f6b656e20416c7265616479204d6044820152641a5b9d195960da1b6064820152608401610c76565b600a546000908152600f60205260408120818686868181106123aa576123aa614cde565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600160156000600a548152602001908152602001600020600086868681811061240e5761240e614cde565b6020908102929092013583525081019190915260409081016000908120805460ff19169315159390931790925560048054600954925163efef39a160e01b8152918201929092526001600160a01b039091169063efef39a1906024016020604051808303816000875af1158015612489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ad9190614cf4565b6006546040516323b872dd60e01b81523060048201526001600160a01b038581166024830152604482018490529293509116906323b872dd90606401600060405180830381600087803b15801561250357600080fd5b505af1158015612517573d6000803e3d6000fd5b50505050816001600160a01b03167fd4ed97c0f7798e6cec51a7c479c4fee6f13d7400b109f3cd2e11d7192dee6c7686868681811061255857612558614cde565b604080516020928302949094013584529083018690526001908301525060600160405180910390a25050808061258d90614d23565b91505061221e565b505050565b6000546001600160a01b031633146125e25760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b6125ec6000614644565b565b336000908152601760205260409020547f0000000000000000000000000000000000000000000000000000000000000000146126825760405162461bcd60e51b815260206004820152602d60248201527f4f6e6c794d696e7465723a2043616c6c6572204973204e6f7420417070726f7660448201526c32b21021292a1026b4b73a32b960991b6064820152608401610c76565b600054600160a01b900460ff16156126cf5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c76565b60006126db8383610f6c565b90506001600160a01b0381166127595760405162461bcd60e51b815260206004820152602f60248201527f4c6976654d696e743a204d696e74205061737320456e7465726564204973204e60448201527f6f74204272696768746c697374656400000000000000000000000000000000006064820152608401610c76565b600a546000908152600e60209081526040808320868452825280832085845290915290205460ff16156127e05760405162461bcd60e51b815260206004820152602960248201527f4c6976654d696e743a20417274697374204d696e74205061737320416c726561604482015268191e48135a5b9d195960ba1b6064820152608401610c76565b600a80546000908152600b602090815260408083208784528252808320868452825280832080546001600160a01b031916905583548352600e825280832087845282528083208684528252808320805460ff1916600117905592548083526011825283832087845282528383205490835260128252838320878452909152919020546001600160a01b039091169060ff1680156129d25760405163efef39a160e01b8152600481018690526000906001600160a01b0384169063efef39a1906024016020604051808303816000875af11580156128c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e59190614cf4565b6007546040516323b872dd60e01b81523060048201526001600160a01b038781166024830152604482018490529293509116906323b872dd90606401600060405180830381600087803b15801561293b57600080fd5b505af115801561294f573d6000803e3d6000fd5b5050600a546000908152600d602090815260408083208b845282528083208a84528252918290205482518b81529182018a905281830186905260ff161515606082015290516001600160a01b03881693507f3086372a0edc0afc8f7cc64433e69264e5daf9fe1236c0badd715d46f3e0c31f92509081900360800190a250611939565b604051637d21ce4d60e01b81526001600160a01b0384811660048301526001602483015260009190841690637d21ce4d906044016020604051808303816000875af1158015612a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a499190614cf4565b600a546000908152600d602090815260408083208a845282528083208984528252918290205482518a815291820189905281830184905260ff161515606082015290519192506001600160a01b038616917f3086372a0edc0afc8f7cc64433e69264e5daf9fe1236c0badd715d46f3e0c31f9181900360800190a2505050505050565b6000546001600160a01b03163314612b145760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b8685148015612b2257508483145b8015612b2d57508281145b612b9f5760405162461bcd60e51b815260206004820152602e60248201527f4c6976654d696e743a204172726179204c656e67746873204d7573742042652060448201527f4f6620457175616c2056616c75650000000000000000000000000000000000006064820152608401610c76565b60005b87811015612d3c57868682818110612bbc57612bbc614cde565b9050602002016020810190612bd191906146c2565b600a546000908152601060205260408120908b8b85818110612bf557612bf5614cde565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550848482818110612c4057612c40614cde565b9050602002016020810190612c5591906146c2565b600a546000908152601160205260408120908b8b85818110612c7957612c79614cde565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550828282818110612cc457612cc4614cde565b9050602002016020810190612cd99190614e33565b600a546000908152601260205260408120908b8b85818110612cfd57612cfd614cde565b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612d3490614d23565b915050612ba2565b507f713836007fc38eff49bfbfe567c85449ce57a9cea01100abd11ad4fe4323c22d8888888888888888604051612d7a989796959493929190614edd565b60405180910390a15050505050505050565b6000546001600160a01b03163314612dd45760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600a54600090815260116020908152604080832085845282529182902080546001600160a01b031981166001600160a01b038681169182179093558451929091168083529282015290917f860ead3570a96ef2984879abc0a5f74c77ffae534930253982a3284e3a01aabd9101610f5f565b6000546001600160a01b03163314612e8e5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f149190614cf4565b905060008111612f8c5760405162461bcd60e51b815260206004820152602160248201527f302045524332302042616c616e63652041742060746f6b656e4164647265737360448201527f60000000000000000000000000000000000000000000000000000000000000006064820152608401610c76565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290526001600160a01b0383169063a9059cbb906044015b6020604051808303816000875af1158015612ff3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130179190614f65565b50505050565b6000546001600160a01b031633146130655760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600880546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f51530a3c00bfe4e6f08c190a530609fef61c6152c6f823c57fd378b832e1998d9101610d74565b6000546001600160a01b031633146131075760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b60405133904780156108fc02916000818181858888f19350505050158015613133573d6000803e3d6000fd5b50565b60608260008367ffffffffffffffff81111561315457613154614d70565b60405190808252806020026020018201604052801561317d578160200160208202803683370190505b5090506000805b8581116132ac576040516331a9108f60e11b8152600481018290526001600160a01b03851690636352211e90602401602060405180830381865afa9250505080156131ec575060408051601f3d908101601f191682019092526131e991810190614d3c565b60015b1561329a57506040516331a9108f60e11b8152600481018290526001600160a01b03808a169190861690636352211e90602401602060405180830381865afa15801561323c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132609190614d3c565b6001600160a01b03160361329a578083838151811061328157613281614cde565b60209081029190910101528161329681614d23565b9250505b806132a481614d23565b915050613184565b5060008167ffffffffffffffff8111156132c8576132c8614d70565b6040519080825280602002602001820160405280156132f1578160200160208202803683370190505b5090506000805b878110156133a75784818151811061331257613312614cde565b6020026020010151600014158061334b57508015801561334b575084818151811061333f5761333f614cde565b60200260200101516000145b156133955784818151811061336257613362614cde565b602002602001015183838151811061337c5761337c614cde565b60209081029190910101528161339181614d23565b9250505b8061339f81614d23565b9150506132f8565b509098975050505050505050565b6002600154036134075760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c76565b6002600155600054600160a01b900460ff16156134595760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c76565b600a5460009081526013602090815260408083208584529091529020546134c25760405162461bcd60e51b815260206004820152601f60248201527f4c6976654d696e743a2054696d65536c6f742046756c6c7920426f6f6b6564006044820152606401610c76565b600a5460009081526010602090815260408083208784529091528120546001600160a01b03166040516331a9108f60e11b81526004810186905290915033906001600160a01b03831690636352211e90602401602060405180830381865afa158015613532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135569190614d3c565b6001600160a01b0316146135d25760405162461bcd60e51b815260206004820152603960248201527f4552433732313a2053656e64657220446f6573204e6f74204f776e20546f6b6560448201527f6e20576974682054686520496e70757420546f6b656e204944000000000000006064820152608401610c76565b6002546040516323b872dd60e01b81523360048201526001600160a01b03918216602482015260448101869052908216906323b872dd90606401600060405180830381600087803b15801561362657600080fd5b505af115801561363a573d6000803e3d6000fd5b50506002546040516331a9108f60e11b8152600481018890526001600160a01b0391821693509084169150636352211e90602401602060405180830381865afa15801561368b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136af9190614d3c565b6001600160a01b0316146137145760405162461bcd60e51b815260206004820152602660248201527f4552433732313a20476f6c64656e20546f6b656e20526564656d7074696f6e2060448201526511985a5b195960d21b6064820152608401610c76565b600a80546000908152600b602090815260408083208984528252808320888452825280832080546001600160a01b031916331790559254825260138152828220868352905290812080549161376883614d59565b9091555050600a80546000908152600c602090815260408083208984528252808320888452825280832087905592548252600d81528282208883528152828220878352815290829020805485151560ff19909116811790915582518881529182018790528183018690526060820152905133917fa5ae6a47a6e9c27543588b1434014869e4531df2528bc69f949259f6e12911e1919081900360800190a2505060018055505050565b606060008367ffffffffffffffff81111561382e5761382e614d70565b60405190808252806020026020018201604052801561386157816020015b606081526020019060019003908161384c5790505b50905060005b84811015613bd35785858281811061388157613881614cde565b905060200201602081019061389691906146c2565b6001600160a01b0316636352211e826040518263ffffffff1660e01b81526004016138c391815260200190565b602060405180830381865afa9250505080156138fc575060408051601f3d908101601f191682019092526138f991810190614d3c565b60015b15613bc15750600086868381811061391657613916614cde565b905060200201602081019061392b91906146c2565b905060008567ffffffffffffffff81111561394857613948614d70565b604051908082528060200260200182016040528015613971578160200160208202803683370190505b5090506000805b87811015613aa1576040516331a9108f60e11b8152600481018290526001600160a01b03851690636352211e90602401602060405180830381865afa9250505080156139e1575060408051601f3d908101601f191682019092526139de91810190614d3c565b60015b15613a8f57506040516331a9108f60e11b8152600481018290526001600160a01b03808d169190861690636352211e90602401602060405180830381865afa158015613a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a559190614d3c565b6001600160a01b031603613a8f5780838381518110613a7657613a76614cde565b602090810291909101015281613a8b81614d23565b9250505b80613a9981614d23565b915050613978565b5060008167ffffffffffffffff811115613abd57613abd614d70565b604051908082528060200260200182016040528015613ae6578160200160208202803683370190505b5090506000805b83811015613b9c57848181518110613b0757613b07614cde565b60200260200101516000141580613b40575080158015613b405750848181518110613b3457613b34614cde565b60200260200101516000145b15613b8a57848181518110613b5757613b57614cde565b6020026020010151838381518110613b7157613b71614cde565b602090810291909101015281613b8681614d23565b9250505b80613b9481614d23565b915050613aed565b5081878781518110613bb057613bb0614cde565b602002602001018190525050505050505b80613bcb81614d23565b915050613867565b5095945050505050565b600a5460009081526010602090815260408083208584529091528082205490516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e90602401602060405180830381865afa158015613c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c649190614d3c565b9392505050565b6000546001600160a01b03163314613cb35760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526024820183905284169063095ea7b390604401612fd4565b6000546001600160a01b03163314613d495760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600280546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f6a97a3d9ef07da63cf802e474cfda433ce9c5b2d8e32720714c416dfb7896b4d9101610d74565b336000908152601760205260409020547f000000000000000000000000000000000000000000000000000000000000000014613e375760405162461bcd60e51b815260206004820152602d60248201527f4f6e6c794d696e7465723a2043616c6c6572204973204e6f7420417070726f7660448201526c32b21021292a1026b4b73a32b960991b6064820152608401610c76565b600054600160a01b900460ff1615613e845760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c76565b600a546000908152600f602090815260408083208484529091529020546001600160a01b031680613f1d5760405162461bcd60e51b815260206004820152603260248201527f4c6976654d696e743a20476f6c64656e20546f6b656e20456e7465726564204960448201527f73204e6f74204272696768746c697374656400000000000000000000000000006064820152608401610c76565b600a54600090815260156020908152604080832085845290915290205460ff1615613f985760405162461bcd60e51b815260206004820152602560248201527f4c6976654d696e743a20476f6c64656e20546f6b656e20416c7265616479204d6044820152641a5b9d195960da1b6064820152608401610c76565b600a80546000908152600f60209081526040808320868452825280832080546001600160a01b031916905592548252601581528282208583529052818120805460ff1916600117905560048054600954935163efef39a160e01b81529182019390935290916001600160a01b03169063efef39a1906024016020604051808303816000875af115801561402f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140539190614cf4565b6006546040516323b872dd60e01b81523060048201526001600160a01b038581166024830152604482018490529293509116906323b872dd90606401600060405180830381600087803b1580156140a957600080fd5b505af11580156140bd573d6000803e3d6000fd5b5050600a54600090815260166020908152604080832088845282529182902054825188815291820186905260ff1615158183015290516001600160a01b03861693507fd4ed97c0f7798e6cec51a7c479c4fee6f13d7400b109f3cd2e11d7192dee6c7692509081900360600190a2505050565b6000546001600160a01b031633146141785760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b848314801561418657508281145b6141f85760405162461bcd60e51b815260206004820152602560248201527f4c6976654d696e743a20417272617973204d75737420426520457175616c204c60448201527f656e6774680000000000000000000000000000000000000000000000000000006064820152608401610c76565b60005b858110156112175786868281811061421557614215614cde565b905060200201602081019061422a91906146c2565b6001600160a01b031663095ea7b386868481811061424a5761424a614cde565b905060200201602081019061425f91906146c2565b85858581811061427157614271614cde565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af11580156142dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143019190614f65565b508061430c81614d23565b9150506141fb565b6000546001600160a01b0316331461435c5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600380546001600160a01b038981166001600160a01b03199283168117909355600480548a83169084168117909155600680548a84169085168117909155600780548a8516908616811790915560088054948a169490951684179094556009879055600a869055604080519586526020860192909252908401526060830191909152608082015260a0810183905260c081018290527f2c73c34fa0b4cd2c33440ae4591d4c01e318f22aa91fb1fec0e00c8b3a6dca839060e00160405180910390a150505050505050565b6000546001600160a01b0316331461446f5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b8281146144be5760405162461bcd60e51b815260206004820152601860248201527f417272617973204d757374204d61746368204c656e67746800000000000000006044820152606401610c76565b60005b83811015614537578282828181106144db576144db614cde565b9050602002013560136000600a548152602001908152602001600020600087878581811061450b5761450b614cde565b90506020020135815260200190815260200160002081905550808061452f90614d23565b9150506144c1565b507f5f9e37b8f3f7392196eedca2e6b71d0d7630fe97a0507b149fef5c14cf27c0258484848460405161456d9493929190614f82565b60405180910390a150505050565b6000546001600160a01b031633146145c35760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b6001600160a01b03811661463f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610c76565b613133815b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156146a657600080fd5b5035919050565b6001600160a01b038116811461313357600080fd5b6000602082840312156146d457600080fd5b8135613c64816146ad565b600080604083850312156146f257600080fd5b50508035926020909101359150565b60008060006060848603121561471657600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561474257600080fd5b833561474d816146ad565b9250602084013561475d816146ad565b929592945050506040919091013590565b60008083601f84011261478057600080fd5b50813567ffffffffffffffff81111561479857600080fd5b6020830191508360208260051b85010111156147b357600080fd5b9250929050565b600080600080604085870312156147d057600080fd5b843567ffffffffffffffff808211156147e857600080fd5b6147f48883890161476e565b9096509450602087013591508082111561480d57600080fd5b5061481a8782880161476e565b95989497509550505050565b801515811461313357600080fd5b6000806040838503121561484757600080fd5b82359150602083013561485981614826565b809150509250929050565b60008060006060848603121561487957600080fd5b8335925060208401359150604084013561489281614826565b809150509250925092565b600080602083850312156148b057600080fd5b823567ffffffffffffffff8111156148c757600080fd5b6148d38582860161476e565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b818110156149205783516001600160a01b0316835292840192918401916001016148fb565b50909695505050505050565b60005b8381101561494757818101518382015260200161492f565b838111156130175750506000910152565b602081526000825180602084015261497781604085016020870161492c565b601f01601f19169190910160400192915050565b6000806000806000806000806080898b0312156149a757600080fd5b883567ffffffffffffffff808211156149bf57600080fd5b6149cb8c838d0161476e565b909a50985060208b01359150808211156149e457600080fd5b6149f08c838d0161476e565b909850965060408b0135915080821115614a0957600080fd5b614a158c838d0161476e565b909650945060608b0135915080821115614a2e57600080fd5b50614a3b8b828c0161476e565b999c989b5096995094979396929594505050565b60008060408385031215614a6257600080fd5b823591506020830135614859816146ad565b600081518084526020808501945080840160005b83811015614aa457815187529582019590820190600101614a88565b509495945050505050565b602081526000613c646020830184614a74565b60008060008060808587031215614ad857600080fd5b8435935060208501359250604085013591506060850135614af881614826565b939692955090935050565b60008060008060608587031215614b1957600080fd5b8435614b24816146ad565b9350602085013567ffffffffffffffff811115614b4057600080fd5b614b4c8782880161476e565b9598909750949560400135949350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614bb457603f19888603018452614ba2858351614a74565b94509285019290850190600101614b86565b5092979650505050505050565b60008060008060008060608789031215614bda57600080fd5b863567ffffffffffffffff80821115614bf257600080fd5b614bfe8a838b0161476e565b90985096506020890135915080821115614c1757600080fd5b614c238a838b0161476e565b90965094506040890135915080821115614c3c57600080fd5b50614c4989828a0161476e565b979a9699509497509295939492505050565b600080600080600080600060e0888a031215614c7657600080fd5b8735614c81816146ad565b96506020880135614c91816146ad565b95506040880135614ca1816146ad565b94506060880135614cb1816146ad565b93506080880135614cc1816146ad565b9699959850939692959460a0840135945060c09093013592915050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215614d0657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600060018201614d3557614d35614d0d565b5060010190565b600060208284031215614d4e57600080fd5b8151613c64816146ad565b600081614d6857614d68614d0d565b506000190190565b634e487b7160e01b600052604160045260246000fd5b600060208284031215614d9857600080fd5b815167ffffffffffffffff80821115614db057600080fd5b818401915084601f830112614dc457600080fd5b815181811115614dd657614dd6614d70565b604051601f8201601f19908116603f01168101908382118183101715614dfe57614dfe614d70565b81604052828152876020848701011115614e1757600080fd5b614e2883602083016020880161492c565b979650505050505050565b600060208284031215614e4557600080fd5b8135613c6481614826565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115614e8257600080fd5b8260051b8083602087013760009401602001938452509192915050565b8183526000602080850194508260005b85811015614aa4578135614ec2816146ad565b6001600160a01b031687529582019590820190600101614eaf565b608081526000614ef1608083018a8c614e50565b602083820381850152614f05828a8c614e9f565b91508382036040850152614f1a82888a614e9f565b8481036060860152858152869250810160005b86811015614f54578335614f4081614826565b151582529282019290820190600101614f2d565b509c9b505050505050505050505050565b600060208284031215614f7757600080fd5b8151613c6481614826565b604081526000614f96604083018688614e50565b8281036020840152614e28818587614e5056fe417274697374204e465420436f72726573706f6e64696e6720546f20605469636b6574494460204e6f74204d696e7465644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220fefc14789830117d52d2f964cbebb7a2d2f1823f94efffc06cca743d035f239664736f6c634300080d0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106104575760003560e01c8063715018a611610250578063ae9f672311610150578063dcf6609c116100c8578063e7ee79ba11610097578063f2fde38b1161007c578063f2fde38b14610be2578063f820e21314610bf5578063fbf17d1d14610bfe57600080fd5b8063e7ee79ba14610bbc578063ea44e47b14610bcf57600080fd5b8063dcf6609c14610b58578063e0203e3214610b6b578063e314e86a14610b7e578063e76ef7f014610ba957600080fd5b8063c31dec981161011f578063c4607e5a11610104578063c4607e5a14610b1f578063c5bd8f5d14610b32578063d4c7f5d214610b4557600080fd5b8063c31dec9814610aec578063c421a38614610b0c57600080fd5b8063ae9f672314610a38578063b54c235814610a6e578063b669d18414610aa5578063bc61c94f14610ad957600080fd5b80638da5cb5b116101e3578063a1daab5b116101b2578063aaf31b5f11610197578063aaf31b5f146109cb578063ad06726414610a05578063ae32350514610a1857600080fd5b8063a1daab5b1461098d578063a6a09bbe146109c357600080fd5b80638da5cb5b1461094357806393116441146109545780639ea801a114610967578063a078a06f1461097a57600080fd5b806385970d7e1161021f57806385970d7e146108a157806386170b5a146108b457806388d3187e146108e257806388d3f1211461090f57600080fd5b8063715018a6146108455780637e5d1f221461084d5780637e6db80514610860578063807f8ec41461087357600080fd5b80633ec5cb3d1161035b5780635b4c2a70116102ee5780635f814b3d116102bd578063656a1c3a116102a2578063656a1c3a146107ff57806366e3a96b1461081f5780636954d6ef1461083257600080fd5b80635f814b3d146107e357806362d2ed99146107ec57600080fd5b80635b4c2a701461078b5780635ba6ef1c1461079e5780635c975abb146107be5780635dbbe83d146107d057600080fd5b80634ef2a5561161032a5780634ef2a556146107015780634f96e8be146107145780634fdf9ccb1461072757806356167f051461075757600080fd5b80633ec5cb3d1461068e57806344a6da6a146106c857806344b41394146106db5780634ed5a01f146106ee57600080fd5b80632366b5b5116103ee5780632ccf7994116103bd578063330a5a5d116103a2578063330a5a5d1461063d5780633477a5c7146106685780633adeeab61461067b57600080fd5b80632ccf799414610617578063305cc9d31461062a57600080fd5b80632366b5b5146105ae5780632679f5a6146105de5780632a097867146105f15780632c1850cb1461060457600080fd5b8063198947791161042a578063198947791461050b5780631d7288491461054a578063202e094a146105885780632318a1de1461059b57600080fd5b806309b345c61461045c5780630d6c2673146104af5780631010761d146104c457806316fbf6da146104d7575b600080fd5b61049261046a366004614694565b600a54600090815260116020908152604080832093835292905220546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b6104c26104bd3660046146c2565b610c32565b005b6104c26104d2366004614694565b610cf2565b6104926104e53660046146df565b60106020908152600092835260408084209091529082529020546001600160a01b031681565b61053c610519366004614701565b600c60209081526000938452604080852082529284528284209052825290205481565b6040519081526020016104a6565b6105786105583660046146df565b601660209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016104a6565b6104c26105963660046146c2565b610d80565b6104c26105a93660046146c2565b610e22565b6105786105bc366004614694565b600a546000908152601260209081526040808320938352929052205460ff1690565b6104c26105ec3660046146df565b610ec4565b6104926105ff3660046146df565b610f6c565b6104c26106123660046146c2565b610fa1565b6104c26106253660046146c2565b611043565b6104c2610638366004614694565b6110e5565b61053c61064b3660046146df565b601360209081526000928352604080842090915290825290205481565b6104c261067636600461472d565b61116b565b6104c26106893660046146c2565b611220565b61049261069c366004614701565b600b6020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b600554610492906001600160a01b031681565b6104c26106e93660046147ba565b6112c2565b6104926106fc366004614694565b611940565b600654610492906001600160a01b031681565b6104c2610722366004614834565b6119ae565b610578610735366004614694565b600a546000908152601560209081526040808320938352929052205460ff1690565b6104926107653660046146df565b600f6020908152600092835260408084209091529082529020546001600160a01b031681565b6104c2610799366004614864565b611a5f565b6107b16107ac36600461489d565b611e76565b6040516104a691906148df565b600054600160a01b900460ff16610578565b6104c26107de3660046146c2565b611f58565b61053c600a5481565b600354610492906001600160a01b031681565b61081261080d366004614694565b61200c565b6040516104a69190614958565b61081261082d3660046146df565b612097565b6104c261084036600461489d565b6121d3565b6104c261259a565b6104c261085b3660046146df565b6125ee565b6104c261086e36600461498b565b612acc565b6105786108813660046146df565b601560209081526000928352604080842090915290825290205460ff1681565b600254610492906001600160a01b031681565b6105786108c23660046146df565b601260209081526000928352604080842090915290825290205460ff1681565b61053c6108f0366004614694565b600a546000908152601460209081526040808320938352929052205490565b61057861091d366004614701565b600e60209081526000938452604080852082529284528284209052825290205460ff1681565b6000546001600160a01b0316610492565b6104c2610962366004614a4f565b612d8c565b6104c26109753660046146c2565b612e46565b6104c26109883660046146c2565b61301d565b61049261099b366004614694565b600a54600090815260106020908152604080832093835292905220546001600160a01b031690565b6104c26130bf565b6105786109d93660046146df565b600a546000908152600e6020908152604080832094835293815283822092825291909152205460ff1690565b600754610492906001600160a01b031681565b610a2b610a2636600461472d565b613136565b6040516104a69190614aaf565b610492610a46366004614694565b600a546000908152600f6020908152604080832093835292905220546001600160a01b031690565b61053c610a7c3660046146df565b600a546000908152600c6020908152604080832094835293815283822092825291909152205490565b610492610ab33660046146df565b60116020908152600092835260408084209091529082529020546001600160a01b031681565b6104c2610ae7366004614ac2565b6133b5565b610aff610afa366004614b03565b613811565b6040516104a69190614b5f565b610492610b1a3660046146df565b613bdd565b6104c2610b2d36600461472d565b613c6b565b6104c2610b403660046146c2565b613d01565b600454610492906001600160a01b031681565b6104c2610b66366004614694565b613da3565b6104c2610b79366004614bc1565b614130565b61053c610b8c3660046146df565b601460209081526000928352604080842090915290825290205481565b6104c2610bb7366004614c5b565b614314565b600854610492906001600160a01b031681565b6104c2610bdd3660046147ba565b614427565b6104c2610bf03660046146c2565b61457b565b61053c60095481565b610578610c0c366004614701565b600d60209081526000938452604080852082529284528284209052825290205460ff1681565b6000546001600160a01b03163314610c7f5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb83398151915260448201526064015b60405180910390fd5b6001600160a01b0381166000818152601760209081526040918290207f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6905590519182527f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f691015b60405180910390a150565b6000546001600160a01b03163314610d3a5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600a80549082905560408051828152602081018490527fd81e4554b6404363f9a2ab085fc04910f4d20930399c9978bd365f9c1f074fef91015b60405180910390a15050565b6000546001600160a01b03163314610dc85760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa7afa785bc9db9a508487983d37f8223f3581fd5ae43238b3e2cc1c752e454209101610d74565b6000546001600160a01b03163314610e6a5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600380546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa16259dba741c92b10d2339202358f678b6e920cea826df223eaa52c7b0a2c969101610d74565b6000546001600160a01b03163314610f0c5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600a5460009081526013602090815260408083208584528252918290208054908490558251818152918201849052917fdf9b2218770e8deab4ef5e5f3ee24b327ec522bdc844804c1d5ef90122e9766391015b60405180910390a1505050565b600a546000908152600b6020908152604080832085845282528083208484529091529020546001600160a01b03165b92915050565b6000546001600160a01b03163314610fe95760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa7afa785bc9db9a508487983d37f8223f3581fd5ae43238b3e2cc1c752e454209101610d74565b6000546001600160a01b0316331461108b5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600680546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527feed30cc21a856f488d40f0d214e9500d9eb8d6bdb2864966b023337e08036dde9101610d74565b6000546001600160a01b0316331461112d5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600980549082905560408051828152602081018490527f820f5f360bca3379a6943534639f36721a4ca8cf5ee114f045279880d83bdfcc9101610d74565b6000546001600160a01b031633146111b35760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b6040516323b872dd60e01b81523060048201526001600160a01b038381166024830152604482018390528416906323b872dd90606401600060405180830381600087803b15801561120357600080fd5b505af1158015611217573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146112685760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600780546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527ff2dc2552e164dfbe9c12877a26af83b10daae00fb40eb709638db99a44cc08669101610d74565b6000546001600160a01b0316331461130a5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b82811461137f5760405162461bcd60e51b815260206004820152602860248201527f4c6976654d696e743a20417272617973204d757374204265204f66204571756160448201527f6c204c656e6774680000000000000000000000000000000000000000000000006064820152608401610c76565b60005b818110156119395760006113c68686848181106113a1576113a1614cde565b905060200201358585858181106113ba576113ba614cde565b90506020020135610f6c565b90506001600160a01b0381166114445760405162461bcd60e51b815260206004820152602f60248201527f4c6976654d696e743a204d696e74205061737320456e7465726564204973204e60448201527f6f74204272696768746c697374656400000000000000000000000000000000006064820152608401610c76565b600a546000908152600e602052604081209087878581811061146857611468614cde565b905060200201358152602001908152602001600020600085858581811061149157611491614cde565b602090810292909201358352508101919091526040016000205460ff161561150d5760405162461bcd60e51b815260206004820152602960248201527f4c6976654d696e743a20417274697374204d696e74205061737320416c726561604482015268191e48135a5b9d195960ba1b6064820152608401610c76565b600a546000908152600b602052604081208188888681811061153157611531614cde565b905060200201358152602001908152602001600020600086868681811061155a5761155a614cde565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001600e6000600a54815260200190815260200160002060008888868181106115be576115be614cde565b90506020020135815260200190815260200160002060008686868181106115e7576115e7614cde565b90506020020135815260200190815260200160002060006101000a81548160ff021916908315150217905550600061165987878581811061162a5761162a614cde565b90506020020135600a54600090815260116020908152604080832093835292905220546001600160a01b031690565b9050600061169b88888681811061167257611672614cde565b90506020020135600a546000908152601260209081526040808320938352929052205460ff1690565b90508015611825576000826001600160a01b031663efef39a18a8a888181106116c6576116c6614cde565b905060200201356040518263ffffffff1660e01b81526004016116eb91815260200190565b6020604051808303816000875af115801561170a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172e9190614cf4565b6007546040516323b872dd60e01b81523060048201526001600160a01b038781166024830152604482018490529293509116906323b872dd90606401600060405180830381600087803b15801561178457600080fd5b505af1158015611798573d6000803e3d6000fd5b50505050836001600160a01b03167f3086372a0edc0afc8f7cc64433e69264e5daf9fe1236c0badd715d46f3e0c31f8a8a888181106117d9576117d9614cde565b905060200201358989898181106117f2576117f2614cde565b6040805194855260209182029390930135908401525081018490526001606082015260800160405180910390a250611923565b604051637d21ce4d60e01b81526001600160a01b0384811660048301526001602483015260009190841690637d21ce4d906044016020604051808303816000875af1158015611878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189c9190614cf4565b9050836001600160a01b03167f3086372a0edc0afc8f7cc64433e69264e5daf9fe1236c0badd715d46f3e0c31f8a8a888181106118db576118db614cde565b905060200201358989898181106118f4576118f4614cde565b6040805194855260209182029390930135908401525081018490526001606082015260800160405180910390a2505b505050808061193190614d23565b915050611382565b5050505050565b6008546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401602060405180830381865afa15801561198a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9b9190614d3c565b6000546001600160a01b031633146119f65760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600a546000908152601260209081526040808320858452825291829020805484151560ff1982168117909255835160ff90911680151582529281019190915290917fbf47cc4a716200ae502190ced53e414e19a4fa881c6dd0cc31b545c16f7a2c059101610f5f565b600260015403611ab15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c76565b6002600155600054600160a01b900460ff1615611b035760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c76565b600a546000908152601360209081526040808320858452909152902054611b6c5760405162461bcd60e51b815260206004820152601f60248201527f4c6976654d696e743a2054696d65536c6f742046756c6c7920426f6f6b6564006044820152606401610c76565b6008546040516331a9108f60e11b81526004810185905233916001600160a01b031690636352211e90602401602060405180830381865afa158015611bb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd99190614d3c565b6001600160a01b031614611c555760405162461bcd60e51b815260206004820152603960248201527f4552433732313a2053656e64657220446f6573204e6f74204f776e20546f6b6560448201527f6e20576974682054686520496e70757420546f6b656e204944000000000000006064820152608401610c76565b6008546002546040516323b872dd60e01b81523360048201526001600160a01b039182166024820152604481018690529116906323b872dd90606401600060405180830381600087803b158015611cab57600080fd5b505af1158015611cbf573d6000803e3d6000fd5b50506002546008546040516331a9108f60e11b8152600481018890526001600160a01b03928316945091169150636352211e90602401602060405180830381865afa158015611d12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d369190614d3c565b6001600160a01b031614611d9b5760405162461bcd60e51b815260206004820152602660248201527f4552433732313a20476f6c64656e20546f6b656e20526564656d7074696f6e2060448201526511985a5b195960d21b6064820152608401610c76565b600a5460009081526013602090815260408083208584529091528120805491611dc383614d59565b9091555050600a80546000908152601460209081526040808320878452825280832086905583548352600f8252808320878452825280832080546001600160a01b031916339081179091559354835260168252808320878452825291829020805485151560ff19909116811790915582518781529182018690528183015290517f6b58bb32ddb6dae0807a03b64a7cfc579641f9f374fb731a83e9e09db5d6c0af9181900360600190a250506001805550565b606060008267ffffffffffffffff811115611e9357611e93614d70565b604051908082528060200260200182016040528015611ebc578160200160208202803683370190505b50905060005b83811015611f50576000611f10868684818110611ee157611ee1614cde565b90506020020135600a54600090815260106020908152604080832093835292905220546001600160a01b031690565b905080838381518110611f2557611f25614cde565b6001600160a01b03909216602092830291909101909101525080611f4881614d23565b915050611ec2565b509392505050565b6000546001600160a01b03163314611fa05760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b6001600160a01b0381166000818152601760209081526040918290207f0ca2130f35d7180a61feea714de11e4b72dd995ef848ffe34d9f2c765186442f905590519182527fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929101610ce7565b6006546040517fc87b56dd000000000000000000000000000000000000000000000000000000008152600481018390526060916001600160a01b03169063c87b56dd90602401600060405180830381865afa15801561206f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f9b9190810190614d86565b60606120bf83600a546000908152601260209081526040808320938352929052205460ff1690565b61216357600a5460009081526011602090815260408083208684529091529020546001600160a01b03165b6001600160a01b031663c87b56dd836040518263ffffffff1660e01b815260040161211791815260200190565b600060405180830381865afa158015612134573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261215c9190810190614d86565b9050610f9b565b600a54600090815260126020908152604080832086845290915290205460ff16156121b357600a5460009081526011602090815260408083208684529091529020546001600160a01b03166120ea565b604051806060016040528060318152602001614faa603191399050610f9b565b6000546001600160a01b0316331461221b5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b60005b8181101561259557600061226c84848481811061223d5761223d614cde565b90506020020135600a546000908152600f6020908152604080832093835292905220546001600160a01b031690565b90506001600160a01b0381166122ea5760405162461bcd60e51b815260206004820152603260248201527f4c6976654d696e743a20476f6c64656e20546f6b656e20456e7465726564204960448201527f73204e6f74204272696768746c697374656400000000000000000000000000006064820152608401610c76565b600a5460009081526015602052604081209085858581811061230e5761230e614cde565b602090810292909201358352508101919091526040016000205460ff16156123865760405162461bcd60e51b815260206004820152602560248201527f4c6976654d696e743a20476f6c64656e20546f6b656e20416c7265616479204d6044820152641a5b9d195960da1b6064820152608401610c76565b600a546000908152600f60205260408120818686868181106123aa576123aa614cde565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600160156000600a548152602001908152602001600020600086868681811061240e5761240e614cde565b6020908102929092013583525081019190915260409081016000908120805460ff19169315159390931790925560048054600954925163efef39a160e01b8152918201929092526001600160a01b039091169063efef39a1906024016020604051808303816000875af1158015612489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ad9190614cf4565b6006546040516323b872dd60e01b81523060048201526001600160a01b038581166024830152604482018490529293509116906323b872dd90606401600060405180830381600087803b15801561250357600080fd5b505af1158015612517573d6000803e3d6000fd5b50505050816001600160a01b03167fd4ed97c0f7798e6cec51a7c479c4fee6f13d7400b109f3cd2e11d7192dee6c7686868681811061255857612558614cde565b604080516020928302949094013584529083018690526001908301525060600160405180910390a25050808061258d90614d23565b91505061221e565b505050565b6000546001600160a01b031633146125e25760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b6125ec6000614644565b565b336000908152601760205260409020547f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6146126825760405162461bcd60e51b815260206004820152602d60248201527f4f6e6c794d696e7465723a2043616c6c6572204973204e6f7420417070726f7660448201526c32b21021292a1026b4b73a32b960991b6064820152608401610c76565b600054600160a01b900460ff16156126cf5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c76565b60006126db8383610f6c565b90506001600160a01b0381166127595760405162461bcd60e51b815260206004820152602f60248201527f4c6976654d696e743a204d696e74205061737320456e7465726564204973204e60448201527f6f74204272696768746c697374656400000000000000000000000000000000006064820152608401610c76565b600a546000908152600e60209081526040808320868452825280832085845290915290205460ff16156127e05760405162461bcd60e51b815260206004820152602960248201527f4c6976654d696e743a20417274697374204d696e74205061737320416c726561604482015268191e48135a5b9d195960ba1b6064820152608401610c76565b600a80546000908152600b602090815260408083208784528252808320868452825280832080546001600160a01b031916905583548352600e825280832087845282528083208684528252808320805460ff1916600117905592548083526011825283832087845282528383205490835260128252838320878452909152919020546001600160a01b039091169060ff1680156129d25760405163efef39a160e01b8152600481018690526000906001600160a01b0384169063efef39a1906024016020604051808303816000875af11580156128c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e59190614cf4565b6007546040516323b872dd60e01b81523060048201526001600160a01b038781166024830152604482018490529293509116906323b872dd90606401600060405180830381600087803b15801561293b57600080fd5b505af115801561294f573d6000803e3d6000fd5b5050600a546000908152600d602090815260408083208b845282528083208a84528252918290205482518b81529182018a905281830186905260ff161515606082015290516001600160a01b03881693507f3086372a0edc0afc8f7cc64433e69264e5daf9fe1236c0badd715d46f3e0c31f92509081900360800190a250611939565b604051637d21ce4d60e01b81526001600160a01b0384811660048301526001602483015260009190841690637d21ce4d906044016020604051808303816000875af1158015612a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a499190614cf4565b600a546000908152600d602090815260408083208a845282528083208984528252918290205482518a815291820189905281830184905260ff161515606082015290519192506001600160a01b038616917f3086372a0edc0afc8f7cc64433e69264e5daf9fe1236c0badd715d46f3e0c31f9181900360800190a2505050505050565b6000546001600160a01b03163314612b145760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b8685148015612b2257508483145b8015612b2d57508281145b612b9f5760405162461bcd60e51b815260206004820152602e60248201527f4c6976654d696e743a204172726179204c656e67746873204d7573742042652060448201527f4f6620457175616c2056616c75650000000000000000000000000000000000006064820152608401610c76565b60005b87811015612d3c57868682818110612bbc57612bbc614cde565b9050602002016020810190612bd191906146c2565b600a546000908152601060205260408120908b8b85818110612bf557612bf5614cde565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550848482818110612c4057612c40614cde565b9050602002016020810190612c5591906146c2565b600a546000908152601160205260408120908b8b85818110612c7957612c79614cde565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550828282818110612cc457612cc4614cde565b9050602002016020810190612cd99190614e33565b600a546000908152601260205260408120908b8b85818110612cfd57612cfd614cde565b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612d3490614d23565b915050612ba2565b507f713836007fc38eff49bfbfe567c85449ce57a9cea01100abd11ad4fe4323c22d8888888888888888604051612d7a989796959493929190614edd565b60405180910390a15050505050505050565b6000546001600160a01b03163314612dd45760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600a54600090815260116020908152604080832085845282529182902080546001600160a01b031981166001600160a01b038681169182179093558451929091168083529282015290917f860ead3570a96ef2984879abc0a5f74c77ffae534930253982a3284e3a01aabd9101610f5f565b6000546001600160a01b03163314612e8e5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f149190614cf4565b905060008111612f8c5760405162461bcd60e51b815260206004820152602160248201527f302045524332302042616c616e63652041742060746f6b656e4164647265737360448201527f60000000000000000000000000000000000000000000000000000000000000006064820152608401610c76565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290526001600160a01b0383169063a9059cbb906044015b6020604051808303816000875af1158015612ff3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130179190614f65565b50505050565b6000546001600160a01b031633146130655760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600880546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f51530a3c00bfe4e6f08c190a530609fef61c6152c6f823c57fd378b832e1998d9101610d74565b6000546001600160a01b031633146131075760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b60405133904780156108fc02916000818181858888f19350505050158015613133573d6000803e3d6000fd5b50565b60608260008367ffffffffffffffff81111561315457613154614d70565b60405190808252806020026020018201604052801561317d578160200160208202803683370190505b5090506000805b8581116132ac576040516331a9108f60e11b8152600481018290526001600160a01b03851690636352211e90602401602060405180830381865afa9250505080156131ec575060408051601f3d908101601f191682019092526131e991810190614d3c565b60015b1561329a57506040516331a9108f60e11b8152600481018290526001600160a01b03808a169190861690636352211e90602401602060405180830381865afa15801561323c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132609190614d3c565b6001600160a01b03160361329a578083838151811061328157613281614cde565b60209081029190910101528161329681614d23565b9250505b806132a481614d23565b915050613184565b5060008167ffffffffffffffff8111156132c8576132c8614d70565b6040519080825280602002602001820160405280156132f1578160200160208202803683370190505b5090506000805b878110156133a75784818151811061331257613312614cde565b6020026020010151600014158061334b57508015801561334b575084818151811061333f5761333f614cde565b60200260200101516000145b156133955784818151811061336257613362614cde565b602002602001015183838151811061337c5761337c614cde565b60209081029190910101528161339181614d23565b9250505b8061339f81614d23565b9150506132f8565b509098975050505050505050565b6002600154036134075760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c76565b6002600155600054600160a01b900460ff16156134595760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c76565b600a5460009081526013602090815260408083208584529091529020546134c25760405162461bcd60e51b815260206004820152601f60248201527f4c6976654d696e743a2054696d65536c6f742046756c6c7920426f6f6b6564006044820152606401610c76565b600a5460009081526010602090815260408083208784529091528120546001600160a01b03166040516331a9108f60e11b81526004810186905290915033906001600160a01b03831690636352211e90602401602060405180830381865afa158015613532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135569190614d3c565b6001600160a01b0316146135d25760405162461bcd60e51b815260206004820152603960248201527f4552433732313a2053656e64657220446f6573204e6f74204f776e20546f6b6560448201527f6e20576974682054686520496e70757420546f6b656e204944000000000000006064820152608401610c76565b6002546040516323b872dd60e01b81523360048201526001600160a01b03918216602482015260448101869052908216906323b872dd90606401600060405180830381600087803b15801561362657600080fd5b505af115801561363a573d6000803e3d6000fd5b50506002546040516331a9108f60e11b8152600481018890526001600160a01b0391821693509084169150636352211e90602401602060405180830381865afa15801561368b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136af9190614d3c565b6001600160a01b0316146137145760405162461bcd60e51b815260206004820152602660248201527f4552433732313a20476f6c64656e20546f6b656e20526564656d7074696f6e2060448201526511985a5b195960d21b6064820152608401610c76565b600a80546000908152600b602090815260408083208984528252808320888452825280832080546001600160a01b031916331790559254825260138152828220868352905290812080549161376883614d59565b9091555050600a80546000908152600c602090815260408083208984528252808320888452825280832087905592548252600d81528282208883528152828220878352815290829020805485151560ff19909116811790915582518881529182018790528183018690526060820152905133917fa5ae6a47a6e9c27543588b1434014869e4531df2528bc69f949259f6e12911e1919081900360800190a2505060018055505050565b606060008367ffffffffffffffff81111561382e5761382e614d70565b60405190808252806020026020018201604052801561386157816020015b606081526020019060019003908161384c5790505b50905060005b84811015613bd35785858281811061388157613881614cde565b905060200201602081019061389691906146c2565b6001600160a01b0316636352211e826040518263ffffffff1660e01b81526004016138c391815260200190565b602060405180830381865afa9250505080156138fc575060408051601f3d908101601f191682019092526138f991810190614d3c565b60015b15613bc15750600086868381811061391657613916614cde565b905060200201602081019061392b91906146c2565b905060008567ffffffffffffffff81111561394857613948614d70565b604051908082528060200260200182016040528015613971578160200160208202803683370190505b5090506000805b87811015613aa1576040516331a9108f60e11b8152600481018290526001600160a01b03851690636352211e90602401602060405180830381865afa9250505080156139e1575060408051601f3d908101601f191682019092526139de91810190614d3c565b60015b15613a8f57506040516331a9108f60e11b8152600481018290526001600160a01b03808d169190861690636352211e90602401602060405180830381865afa158015613a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a559190614d3c565b6001600160a01b031603613a8f5780838381518110613a7657613a76614cde565b602090810291909101015281613a8b81614d23565b9250505b80613a9981614d23565b915050613978565b5060008167ffffffffffffffff811115613abd57613abd614d70565b604051908082528060200260200182016040528015613ae6578160200160208202803683370190505b5090506000805b83811015613b9c57848181518110613b0757613b07614cde565b60200260200101516000141580613b40575080158015613b405750848181518110613b3457613b34614cde565b60200260200101516000145b15613b8a57848181518110613b5757613b57614cde565b6020026020010151838381518110613b7157613b71614cde565b602090810291909101015281613b8681614d23565b9250505b80613b9481614d23565b915050613aed565b5081878781518110613bb057613bb0614cde565b602002602001018190525050505050505b80613bcb81614d23565b915050613867565b5095945050505050565b600a5460009081526010602090815260408083208584529091528082205490516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e90602401602060405180830381865afa158015613c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c649190614d3c565b9392505050565b6000546001600160a01b03163314613cb35760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526024820183905284169063095ea7b390604401612fd4565b6000546001600160a01b03163314613d495760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600280546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f6a97a3d9ef07da63cf802e474cfda433ce9c5b2d8e32720714c416dfb7896b4d9101610d74565b336000908152601760205260409020547f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a614613e375760405162461bcd60e51b815260206004820152602d60248201527f4f6e6c794d696e7465723a2043616c6c6572204973204e6f7420417070726f7660448201526c32b21021292a1026b4b73a32b960991b6064820152608401610c76565b600054600160a01b900460ff1615613e845760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c76565b600a546000908152600f602090815260408083208484529091529020546001600160a01b031680613f1d5760405162461bcd60e51b815260206004820152603260248201527f4c6976654d696e743a20476f6c64656e20546f6b656e20456e7465726564204960448201527f73204e6f74204272696768746c697374656400000000000000000000000000006064820152608401610c76565b600a54600090815260156020908152604080832085845290915290205460ff1615613f985760405162461bcd60e51b815260206004820152602560248201527f4c6976654d696e743a20476f6c64656e20546f6b656e20416c7265616479204d6044820152641a5b9d195960da1b6064820152608401610c76565b600a80546000908152600f60209081526040808320868452825280832080546001600160a01b031916905592548252601581528282208583529052818120805460ff1916600117905560048054600954935163efef39a160e01b81529182019390935290916001600160a01b03169063efef39a1906024016020604051808303816000875af115801561402f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140539190614cf4565b6006546040516323b872dd60e01b81523060048201526001600160a01b038581166024830152604482018490529293509116906323b872dd90606401600060405180830381600087803b1580156140a957600080fd5b505af11580156140bd573d6000803e3d6000fd5b5050600a54600090815260166020908152604080832088845282529182902054825188815291820186905260ff1615158183015290516001600160a01b03861693507fd4ed97c0f7798e6cec51a7c479c4fee6f13d7400b109f3cd2e11d7192dee6c7692509081900360600190a2505050565b6000546001600160a01b031633146141785760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b848314801561418657508281145b6141f85760405162461bcd60e51b815260206004820152602560248201527f4c6976654d696e743a20417272617973204d75737420426520457175616c204c60448201527f656e6774680000000000000000000000000000000000000000000000000000006064820152608401610c76565b60005b858110156112175786868281811061421557614215614cde565b905060200201602081019061422a91906146c2565b6001600160a01b031663095ea7b386868481811061424a5761424a614cde565b905060200201602081019061425f91906146c2565b85858581811061427157614271614cde565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af11580156142dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143019190614f65565b508061430c81614d23565b9150506141fb565b6000546001600160a01b0316331461435c5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b600380546001600160a01b038981166001600160a01b03199283168117909355600480548a83169084168117909155600680548a84169085168117909155600780548a8516908616811790915560088054948a169490951684179094556009879055600a869055604080519586526020860192909252908401526060830191909152608082015260a0810183905260c081018290527f2c73c34fa0b4cd2c33440ae4591d4c01e318f22aa91fb1fec0e00c8b3a6dca839060e00160405180910390a150505050505050565b6000546001600160a01b0316331461446f5760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b8281146144be5760405162461bcd60e51b815260206004820152601860248201527f417272617973204d757374204d61746368204c656e67746800000000000000006044820152606401610c76565b60005b83811015614537578282828181106144db576144db614cde565b9050602002013560136000600a548152602001908152602001600020600087878581811061450b5761450b614cde565b90506020020135815260200190815260200160002081905550808061452f90614d23565b9150506144c1565b507f5f9e37b8f3f7392196eedca2e6b71d0d7630fe97a0507b149fef5c14cf27c0258484848460405161456d9493929190614f82565b60405180910390a150505050565b6000546001600160a01b031633146145c35760405162461bcd60e51b81526020600482018190526024820152600080516020614fdb8339815191526044820152606401610c76565b6001600160a01b03811661463f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610c76565b613133815b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156146a657600080fd5b5035919050565b6001600160a01b038116811461313357600080fd5b6000602082840312156146d457600080fd5b8135613c64816146ad565b600080604083850312156146f257600080fd5b50508035926020909101359150565b60008060006060848603121561471657600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561474257600080fd5b833561474d816146ad565b9250602084013561475d816146ad565b929592945050506040919091013590565b60008083601f84011261478057600080fd5b50813567ffffffffffffffff81111561479857600080fd5b6020830191508360208260051b85010111156147b357600080fd5b9250929050565b600080600080604085870312156147d057600080fd5b843567ffffffffffffffff808211156147e857600080fd5b6147f48883890161476e565b9096509450602087013591508082111561480d57600080fd5b5061481a8782880161476e565b95989497509550505050565b801515811461313357600080fd5b6000806040838503121561484757600080fd5b82359150602083013561485981614826565b809150509250929050565b60008060006060848603121561487957600080fd5b8335925060208401359150604084013561489281614826565b809150509250925092565b600080602083850312156148b057600080fd5b823567ffffffffffffffff8111156148c757600080fd5b6148d38582860161476e565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b818110156149205783516001600160a01b0316835292840192918401916001016148fb565b50909695505050505050565b60005b8381101561494757818101518382015260200161492f565b838111156130175750506000910152565b602081526000825180602084015261497781604085016020870161492c565b601f01601f19169190910160400192915050565b6000806000806000806000806080898b0312156149a757600080fd5b883567ffffffffffffffff808211156149bf57600080fd5b6149cb8c838d0161476e565b909a50985060208b01359150808211156149e457600080fd5b6149f08c838d0161476e565b909850965060408b0135915080821115614a0957600080fd5b614a158c838d0161476e565b909650945060608b0135915080821115614a2e57600080fd5b50614a3b8b828c0161476e565b999c989b5096995094979396929594505050565b60008060408385031215614a6257600080fd5b823591506020830135614859816146ad565b600081518084526020808501945080840160005b83811015614aa457815187529582019590820190600101614a88565b509495945050505050565b602081526000613c646020830184614a74565b60008060008060808587031215614ad857600080fd5b8435935060208501359250604085013591506060850135614af881614826565b939692955090935050565b60008060008060608587031215614b1957600080fd5b8435614b24816146ad565b9350602085013567ffffffffffffffff811115614b4057600080fd5b614b4c8782880161476e565b9598909750949560400135949350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614bb457603f19888603018452614ba2858351614a74565b94509285019290850190600101614b86565b5092979650505050505050565b60008060008060008060608789031215614bda57600080fd5b863567ffffffffffffffff80821115614bf257600080fd5b614bfe8a838b0161476e565b90985096506020890135915080821115614c1757600080fd5b614c238a838b0161476e565b90965094506040890135915080821115614c3c57600080fd5b50614c4989828a0161476e565b979a9699509497509295939492505050565b600080600080600080600060e0888a031215614c7657600080fd5b8735614c81816146ad565b96506020880135614c91816146ad565b95506040880135614ca1816146ad565b94506060880135614cb1816146ad565b93506080880135614cc1816146ad565b9699959850939692959460a0840135945060c09093013592915050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215614d0657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600060018201614d3557614d35614d0d565b5060010190565b600060208284031215614d4e57600080fd5b8151613c64816146ad565b600081614d6857614d68614d0d565b506000190190565b634e487b7160e01b600052604160045260246000fd5b600060208284031215614d9857600080fd5b815167ffffffffffffffff80821115614db057600080fd5b818401915084601f830112614dc457600080fd5b815181811115614dd657614dd6614d70565b604051601f8201601f19908116603f01168101908382118183101715614dfe57614dfe614d70565b81604052828152876020848701011115614e1757600080fd5b614e2883602083016020880161492c565b979650505050505050565b600060208284031215614e4557600080fd5b8135613c6481614826565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115614e8257600080fd5b8260051b8083602087013760009401602001938452509192915050565b8183526000602080850194508260005b85811015614aa4578135614ec2816146ad565b6001600160a01b031687529582019590820190600101614eaf565b608081526000614ef1608083018a8c614e50565b602083820381850152614f05828a8c614e9f565b91508382036040850152614f1a82888a614e9f565b8481036060860152858152869250810160005b86811015614f54578335614f4081614826565b151582529282019290820190600101614f2d565b509c9b505050505050505050505050565b600060208284031215614f7757600080fd5b8151613c6481614826565b604081526000614f96604083018688614e50565b8281036020840152614e28818587614e5056fe417274697374204e465420436f72726573706f6e64696e6720546f20605469636b6574494460204e6f74204d696e7465644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220fefc14789830117d52d2f964cbebb7a2d2f1823f94efffc06cca743d035f239664736f6c634300080d0033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.