Skip to content

Instantly share code, notes, and snippets.

@sreyemnayr
Created September 7, 2022 23:07
Show Gist options
  • Save sreyemnayr/3bf6d720ad842f08d85976af6a1831a3 to your computer and use it in GitHub Desktop.
Save sreyemnayr/3bf6d720ad842f08d85976af6a1831a3 to your computer and use it in GitHub Desktop.
The Stoics - Version 2 for Public Audit
// SPDX-License-Identifier: MIT
//
//
// ┌▄═==╗▄═==▄▄═▄▄ ,─¬"¬─╥▓ ,
// ╞▌ ╫█ └█ ██ ▐ █ └█▀
// ╫█ ██ ,, ,, ╫▄, ,▐█,, ,, ,, ,, ,
// ╫█ ██^ ██ ▄█ ╘█µ ╙█████▄, ╞█ ▄▌ █▄ █▌ ▄▌ j█ ╓ █b
// ╫█ ██ ╫█ ▐█▌^^^^╙` ╙█▄ ╞█ ╟█ ▐█µ █▌ ╟█ ▀ └██▓▄,
// ╫█ ██ ╫█ └█µ , █ ▌ ╞█ ╙█ ▐█ █▌ ╙█ ╓╖ ╙▀▌
// ,██, ,██ ,██, ▀w ,⌐ ██. ,^ █▄,- ▀, ,╓▀ ,█▌, ^▀, ,.' ╙█, ,x
//
// ,▄▄███████████████████▄ ███ ▐█████╬╬▒▄████████████▀▀██▒░▒░░░
// ╓▄████████▀▀╚░░░░░░░░░╚╚▀█████▄ ███ ███████████████▀▀╙ ╙███░░░░
// ██████▀╚░▒╬╬╠░▒▄▄▄▄▄▒▒▒▒╠╬╬▒╚▀███▄ ███ ╟█████████▀▀└ ╟██░░░
// ███▀░▄▄████████████▀███▀██████▄███████ █████╙ ╙██░░
// ████▀▀▀ ▐█ ]██████µ █▌ ,████████ ╟█╜╙▀███▄▄ ╙██░
// ███▄, █▌ ╙████▀ ██ ,▄▄███████████ ╙█▌ ▀▀███▄, ╙██
// █████████████▄▄▄▄▄███████▀╠▄██████▀███ ██ ╙▀▀███▄ ╟█
// ▀█████▄▒░╚╚▀▀▀▀▀▀╚╚░░░▒▄████████▀ ███ ╟█ ╙▀████▄ █
// ╙█████████▄▄▄▄▄▄███████████▀ ███ ▐█▌ ,▄▄▄▄ ,,▄▄▄█████▄▄╟
// ╙▀█████████████████▀▀` ███ ██ ▄#▀╙`,▄▄█████████████████
// ╙█████████▀▀╙ ███ ██ ▄█████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// █████ ███ ╟█▄▄██████████████▀████╬╬╬╬╟
// ██▐███ ███ ╟██████▀` █ ╟███▌ █ ╙▀███╟
// ██ █▌██⌐ ▄▄▄▄▄ ███ ▐███▀ ╙█ ,█▀ ╙██
// ██ j█▒╟█▌ █████████▄ ███ ]███████▄, ╙▀██▀ █
// ██ ▐█▒╚██ ╟████████████▄ ███ ██▒╚▀████████▄╖, █
// ,█▌ ╟█╠╬██▌ ████⌐ ╙╙█████████ ██▒╬╬╬▒░╚▀█████████▄▄, █
// ╓█▌ ╫█╠╠╚██ ███▌ ╙██████ ██▌╬╬╬╬╬╬╬╬░╚▀████╬╬╬╠█████
// ╙██▄ ██╠╠╬╟██ ╟██▒ ╟███▌ ██▌╬╬╬╬╬╬╬╬╠╠╠╬░╚▀█████╬╟██
// ╙█▌ ╫█╠╠╬╬╟██ ▐██▌ █████████` ,,,,, ╟██╠╬╬╬╬╬╬╬╬╬╬╬╬╠╬╬░╚▀█████
// ██ ▐█ ╟█▒╠╬╬╬╟██ ███ █▌ ,,, ██████ ╟██╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╠╬╬╟███
// ╟██▄██ ╟█▒╬╬╬╬╬╚██ ╫███ ██ ]█████ ▐██╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╠╠░███▌
// ╟█└ ╙ j█▌╠╬╬╠╬╬╚██╣███▌ ████████████████████████████╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╠╬▒██╣█▌
// ╟▌ ██▒╬╬╠╠╬╠░╟██████ ██╬╬╬╬███░▒▒▒╠╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█▌╟█▌
// █▌ ╟█▌╬╬╬╬╬╬╠╬╟██████▄ ██╬╬╬╬███▒╬╬╬╠╬╬╬╠▒▒╬╬╬╬╬╬╬╬╬╠╬╟█▌ ██
// █ ██░╬╠╬╬╬╬╠╟█▒██████▄ ██▒╠╬╬███▒╬░▄████▀▀▀██░╬╬╬╬╬╠╬╟██ ██
// ▒ ╙█▌╠╬╬╬╬╬╬╫█╬▓█▀█████▄▄ ╫█▒╬╬╬██████▀ ╟█▒╬╬╬╬╬╠▓██ ]██
// ▌ ╟█▒╠╬╬╠╠▒██╬╟█▌ ╙▀██████▄ ╟██╬╬╬██▀╙ ,╓▄▄█████▒╬╬╬╠╬▒██▌ ╟██
// ██▒╬╬╠╬╟█▒╬╬██ ╙▀██████▄,▐██╬███▄███████░░░▒╬╠╬╬╬╬╬½██▀ ╫█▌
// ██▒╠╬▒██╠╬╬╫█▌ ╙▀▀▀▀▀█████▀` ╟█▒╬╬╬╬╬╬╠╬▄██" ██▌
// ██▒╬╟█▌╠╬╬╬██ ╟█░╙▀██, ╟█▒╬╬╬╬╬╠╔██▀ j██▌
// ╚████╠╬╬╬╬╫█▌ ▐█▒░░░╙▀██████░╬╬╬╬╠░███└ ]██
// ╠██▒╬╬╬╬╬╬██ ▐█▒░░░░░░░██▀██▒╬╠░███▀ ▄███
// ╓█████▒╬╬╬╬▓█▌ █▌░░░░░░░░╓██▒╬▒███╙ ▄████▀
// ╓██▀░░▀██▒╬╬╬██ █▌░░░░░░▄██░░▄██▀` ▄████▀
// █▄, .██▀░░░░░░╙███▒╟█▌ ██░░░▄██▀▒███▀╙ ,██████
//
// The Stoics by Gabe Weis
// thestoics.art
//
// Assisted by Merlyn Labs
//
// Smart Contract v2 by Ryan Meyers
// An implementation of ERC-721A
//
// Generosity attracts generosity
// The world will be saved by beauty
//
pragma solidity ^0.8.16;
import "chiru-labs/[email protected]/contracts/extensions/ERC721AQueryable.sol";
import "OpenZeppelin/[email protected]/contracts/token/common/ERC2981.sol";
import "OpenZeppelin/[email protected]/contracts/utils/cryptography/draft-EIP712.sol";
import "OpenZeppelin/[email protected]/contracts/utils/cryptography/ECDSA.sol";
contract TheStoics is ERC2981, EIP712, ERC721AQueryable {
error InvalidMintKey();
error InsufficientAmountSent();
error PublicSaleNotStarted();
error NoMoreThanTwentyPerTransaction();
error ExceedsAllowance();
error ExceedsMaxSupply();
struct MintKey {
address wallet;
uint8 free;
uint8 allowed;
uint8 paid;
uint128 price;
}
bytes32 private constant MINTKEY_TYPE_HASH = keccak256("MintKey(address wallet,uint8 free,uint8 allowed,uint8 paid,uint128 price)");
address private _signer;
address private _owner;
uint8 public day = 1;
string public baseURI;
address private constant _ARTIST = 0x95975DEEeA11a798d3737E0Badb821ECd38CCED9;
address private constant _TEAM = 0xE2A68B1B0061e14Ef13Fc936215aF4587e50b315;
uint private constant _maxSupply = 5000;
constructor(
string memory name,
string memory symbol,
address signer,
address receiver
)
ERC721A(name, symbol)
EIP712(name, "1")
{
_signer = signer;
_owner = msg.sender;
_setDefaultRoyalty(receiver, 1000);
baseURI = "https://nyfti.xyz/api/v1/stoics/metadata/";
}
modifier onlyOwner() {
if(msg.sender != _owner) revert ApprovalCallerNotOwnerNorApproved();
_;
}
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╙████░╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬░▄▄░╬╬╬▒███▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬░╬████╬░███▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╙███╬╫████░╬╬▒▄░╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╟████░╬▐███▄░█████████╩▀▀██▄░╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬░████╬░██████╬███████░░░░░└╩▀▀█▄░╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╠████▒╬▀█████████████░░░░░░░░░░ ╙▀▀██▄▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╠█████▄╬░╬█▀█████████░░░░░░░░░░░│▄▄█~└╠▀▀█▄░╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╟███████████████████░░░░░░░▄█▀▀╙└░░│,░░░░'╙▀▀██▄▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╙▀████████╠╡╙██▀╬╬█░░░░▄█▀.░ ▄█████▓█████▄░░░│┘▀▀█▌╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╠╠╬╠╬╬╬╬╠█╬╬╬╬█░░░░╙░░╓████████████████▄░░░░░█▌╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬░██╬╬╬╬▌░░░░░░█▌ █╩███▌█ ▀▀█▌░░░j█░╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╠▄████▒╬╬╬▌░░░░░░.███▄▄▄██╬██▀ ,▄▄██▌░░░██╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╠██▓███▌╬╬╟▌░░░░░░░░└████▓▓▓██▓▓██▀▀ ░░░▐█▌╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███████▌╬╬╟▌░░░░░░░░░,▄█╣████████▄'░░░░░█╫░╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓████████╬╬╟▌░░░░░░░███▀██████████▓╬█▄░░█¬█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬░█████████╬╬╢▌░░░░░░██▄, ▀╬█▀▓█ ╙██░j▌▐▌╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█████████▒╬█▒░░░░░░░╙███╬╬╬╬╬╬█╬╬██▀▌└░█ █╣▌╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██████████▌╬╫▒░░░░░░░░█▄▄╫╬╜╙▀█▀▀╙^░░░░▐▌ █╬█▒╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╠██████▌█▓█▌╬╫▒░░░░░░░]█████████░░░░░░░░█ ▐██▀▒╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▒███▓███▓███╬█░░░░░░░░█╜▀█████▀█▌░░░░░░▓─ ██▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╟███████████╬█░░░░░░░j█ └╙▀█▀█▀░░░░░j▌ ██▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╠███████████▒█░░░░░░░▀█ ╟▒█▀▌▄▀██ ╟██▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╠▓███████████▄█░ ████▄░█ ╙ ██ ███▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╠╠▀██████████████▓██╣█▀▀ ,╫▌▄ ███▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▐███████████████████▌ █┌╠▄▄▌ ╫███▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╟██████████████▀█▓█▄ ▐█▀└ █' ████▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╠██████████████▄██▄█ █▀╙ j████▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████████████ █` ▌' ╫████▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████████████└└╙╙╙ ▀▄ █████▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███████████▌ `█ j█████▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╫█████████████████▄▄▄▄, ╜▄ ██████▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╫████▓▓███████████████▓▓█████████████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬░░░░│││┤┼╚┼╙╨╩╠╬╬▀▀▀▀▀▀╫█▀▀▀█████████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╠█░░░█████████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█▌░]█████████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╟▌.██████████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╟▌███████████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╠█████████████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▒██████████████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▄███████████████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬░█████████████████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
//
// Begin at once to live, and count each separate day as a separate life.
// -Seneca.
//
function startASeparateLife() onlyOwner external {
day++;
}
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╬╠╠╠╠░█▒╠╠╬╬╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╬▓██╠╠▒█╟▌╠φ██▒╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠█░█▒╠█▀╬█╬▓▀█░╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠▒▄█╝▀▀▀▀██▒╬╟▒█▒╬╬██▒╟▒╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╬▄╝▀ ▄█╙│█╬╬░██╬╬╬╫▌╠█▒╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠█▀ ▄▀ ░░░█▄▄▄▄▄▄▄▄▄▒▒█╬╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠░█` ▄█░░░░░░▌ █▒╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠▓▀ █░░░░░░░░▌ ╟▐▒╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╬█ █░░░░░░░░░█ ▌╟▒╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╬█ ▐░░░░░░░░░░█ ▐ ╫╬╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╬█ ▌░░░▄#░░░▄▀█ █ █╬╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠█ █░░▄▀ ░.█▀ █ ▐⌐ █╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╟▌ ▌░▀│░▄█` █ █ █╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠█ ▐▌░░▄▀ █ j▌ █▒╬╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╬▌ ╟░█▀ █ █ ██████▒╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╟▌ ,██╗╗▄╗▄▄▄▄▄▄▄█ ▌ ▌╟▄▀▀█▀╬╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╫ ▄▀ ╟▒░░╙▄█▄█░░░░█ ╟ ▌╠░░░▒╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╫ :█▄ ╟▒░░░░░░░░░░░█ ▌ ▌╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╟ ▄▄▄ █ ▐▌░░░░░░░░░░░█ ▐æ▄ ▐▌╬╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠█╗█╟█╬█æ█ █░░░░░░░░░░░█ , █ ▐.█╬╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╬╟█╣▌ ╟░░░░░░░░░░░█#▀▐█▄▌▐▄█ ╞ █╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╟███▀ ▌░░░░░░░░░░░░░]██ ╟█╠░╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠█▌ ╟▒░░░░░░░░░░░░░█▌ ╟▒╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠▓╝██▀▀ █░░░░░░░░░░▄▀▀▀▀ █ ╫╬╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╣▌ █░░░░░░░░ª█` `█ █╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╣▌ █░░░░░▄▀▄╙█ææ══▀ █╬╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╬▌ █░░░░█ ▀ █╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠█ ▀▄░░▀▀█▀*≈═══K≥mæ█╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╟ ╙█░░░█ █░╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╬▌ ╙█░█ █░╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╬█ ,▄æª▀▀█ █░╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠▌ ,▄▄ª▀▀╙ █ █░╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠█╗██` ▌ █▒╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╬╠█▄ ▌ █▒╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠░█▄ ▌ █╬╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠█ ▌ █╬╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠░█ ▌ █╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠▌ ▌ ╟▒╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠█ ▌ █╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╟▌ ▌ ╟▒╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╬▌ ▌ █╬╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠█ j▌ ╙▌╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠█ ▐ █╬╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
// Waste no more time arguing about what a good man should be. Be one.
// – Marcus Aurelius
// Meditations, X, 16
//
function becomeAStoic(bytes calldata signature, MintKey calldata key) external payable {
/*
*
* During Day 1 and Day 2, a MintKey generated by _signer is required for mint
* This helps reduce the cost of storing a bunch of addresses on the chain
*
*/
if (day < 3){
if (msg.sender != key.wallet) revert InvalidMintKey();
if (!searchAfterTruth(signature, key)) revert InvalidMintKey();
if (msg.value < key.price) revert InsufficientAmountSent();
if (_numberMinted(msg.sender) + key.paid > key.allowed) revert ExceedsAllowance();
if (totalSupply() + key.paid > _maxSupply) revert ExceedsMaxSupply();
_mint(msg.sender, key.paid);
} else {
// This really should only happen in a rare case where gas was set super low and the day passed
publiclyBecomeAStoic(key.paid);
}
}
function publiclyBecomeAStoic(uint64 how_many_stoics) public payable {
/*
*
* Once public mint is live (day >= 3), MintKeys are no longer required.
* Will there be bots? Maybe, but remember bots are just stoics without skin.
*
*/
if (day < 3) revert PublicSaleNotStarted();
if (msg.value < (0.111 ether * how_many_stoics)) revert InsufficientAmountSent();
if (how_many_stoics > 20) revert NoMoreThanTwentyPerTransaction();
if (totalSupply() + how_many_stoics > _maxSupply) revert ExceedsMaxSupply();
_mint(msg.sender, how_many_stoics);
}
function changeYourTune(bytes calldata signature, MintKey calldata key) external payable {
if (msg.sender != key.wallet) revert InvalidMintKey();
if (!searchAfterTruth(signature, key)) revert InvalidMintKey();
if (_getAux(msg.sender) > 0) revert ExceedsAllowance();
if (0 < key.free) {
if (totalSupply() + key.paid + key.free > _maxSupply) revert ExceedsMaxSupply();
_mint(msg.sender, key.paid + key.free);
_setAux(msg.sender, _getAux(msg.sender) + key.free);
return;
}
}
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░█░░]█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░╟█░░▌█░░╟█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░█╙▄╚▒╙╦╟▒█▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█░╙▓░░╙▀░╠█▄░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▀██▀▀▀╙╙╟██╙▀█▄▄░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█░░░░╓█╬▄▀█▀▓▄░░█▀█▄▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█░░░]█░╬╚╚▀█╙░│░▐▒░░░▀▀▀Φ▄▒░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░█░░░▄▀▒╬╬╬╬╬█░░░░╠▄▄╫╣█████████░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░█░░░▓░╬╬╬╬╬╬░█#▀╙░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░▐▌░░▐▒╬╬╬╬▒▄▀╙█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░▄░░░░░▌░░░█╬╬╬▒█▀░░░█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░▄▓█▄█▓▓███│░░╟▒╬╬╔█░░░░░█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░╓▄██▀▀╚░░░╟▌░░░█╬╬╟▌▒▄▄░░░█▄▄╥░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░█░╬▒▄▓╗▄░╠█░░░░█╬░█░│░│░│░█╬░█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░▌██╝▓█▌▀██▒░░░░█╠╫▒▄▓███▄░╫╬╚█▀░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░▌╚╫████╩░█░░░░░╟▒█░░╙╫╪▀░░╫╬▐▒░░░░░░░░░░░▄░░░▄░░░█▒░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░║▌╬╬╬╠▌░░╟▒░░░░░░██░░░░░░░░╫╬░░░█░░░░░░░░╟╩▌░▐█▌░╟▒█░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░▌╬╬╬╠▌░░█░░░░░░░╙█▄▄░░░░░░╫╬╠▄▀░░░░░░░░]▌░█░█░█░█░╟▌░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░█╬╬╬╟▒░▐▌░░░░▄▄▄░░░╟░░░░░░╫░█░░░░░░░░░░█░░╟█▒░░█░░░█░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░█▒╬╬╟▒░█░░░█▒░╟╬█▄│█░░░░░░╫█░░░░░░░░░░╟░░░░█░░░░░░░╚▌░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░╟▒╬╬╟▒░░╙╙╙░░░╟█╣▌││░░░░░░╫▓░░░░░░░░░▐▌░░░░░░░░░░░░░█░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░█╬╬╟▒░░░░░░░░░█╣▒░░░░░░░░╫╬█░░░░░░░░╟▒░░░░░░]█░▐█░░╚▌░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░╟▌╬╟▒░░░░░░░╓▄██▀█░░░░░░░╟╬╣▒░░░░░░░░█░░░░░░█╣▄██░░░╟░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░█▒╟▒░░░░░░░█▀▀╗▄▄█░░░░░░╟╬╬█░░░░░░░░╠▌░░░░█╠╬╬╬▌░░░▄▌░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░█╬╚█░░░░░░╙▀▀▄█░╙░░░░░░╟╬╬╬▌░░░░░░╓█░░░▄█╬╬╬╬██▀▀░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░╙▌╬░█▒░░░░░░░╚▌░░░░░░░░╟╬╬╬╣▒░░░░▄▀░░▄█╬╬╬█▀▀░░░░▒░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░╟▒╬╬╚▄░░░░░▄▄█░░░░░░░░╟╬╬╬╬█░░░█░░█╬╬██▀░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░╟▒╬╬░█░░░█░░░░░░░░░░░╟╬╬╬╬╬▌░█▄██▀╠╩░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░╟▒╬╬▒▀▒░╟▄▄▄████▓██╠╬╬╬╬╬╬███░░░█░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░╟▒╬╬╬╚█░░░░░░░░╙▀╬╬╬╬█▀▀╟▀█▌╬╟▀░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░╟▒╬╬╬░█▒░░░░░░░▄▄█▀│░░▓▀░╚█║▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░╙█╬╬╬╬╠▄░░▄█▀╙░░╚▒░░█▒░░░╟█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░╙█▒╬░▄╣▀╙░░░░░░░▌░█░░░░░░█░░▒▄▄▄▄▄░░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░▀▀░░░░░░░░░░░╟▒█░░░░░░░│░░░░░█▄╟▌░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█▀░░░░░░░░░░░░░░│▀█▌░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█▒░░░░░░░░░░░░░░░░░░█░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█▒░░░░░░░░░░░░░░░░░░░╫░░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█░░░░░░░░░░░░░░░░░░░░░╟▒░░░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████▓▒░░░░░░░░░░░░░░░░░▄███▄░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╟╬█╟▓█▓░░░░░░░░░░░░░░░░░█▌█▀█░░░░░░░░░░░░░░░░░░
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╙▒╙▀░▀░░░░░░░░░░░░░░░░░╙░│░░░░░░░░░░░░░░░░░░░░
// Receive without pride, let go without attachment.
// – Marcus Aurelius
// Meditations, VII, 33
function let_go_without_attachment(uint256 tokenId) public {
_burn(tokenId, true);
}
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████▀│▄▓███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███▀│▄████▀██░╙▀╣╬╬╬╬╬╬╬╬╬╬▓▀╙▐█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███╙░▄███▄▄▄▒██▒░░░░╙▀▓╬╬▓╝▀└ █╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██│░]███▀░░░░╚███▒░░░░▄▓██▄' ▐█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██│░▄██░╠╠╠╠╠╠╠██▌╙█▄▓╬╬╬╬╬╬╬▓▄ █╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██│░▐██▒▄▓▀▀▀#╠╠███▀│██╬╬╬╬╬╬╬╬╬▓▓█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██░░░██░░░▄▄▄▄▄░╠██▌░░░╟█╬╬╬╬╬╬╬╬╬█╙█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╟█▌░░▓█▓██████▀▀█████░░░░██╬╬╬╬╬╬╬╫▌░░│▀█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██░░░████▄▄███▓▓▓████░░░░░█▒╬╬╬╬╬╬█░░░░░│▀█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣██░░░██▒░╚╚▀▀▀▀╚░╠╟██░░░░░╟█╬╬╬╬╬█▒╚╚╚╟▌░░│▀█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╫▌▌░░░██▒╠╠╠╠╠╠╠╠╠╠╟██▒░░░░░█╬╬╬╬╬█▄▄▄▄▄█░░░░│▀█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█▓▌░░░██╠▒▒╠╠░▄▄▄░╠╟██▒░░░░░╫█╬╬╬██╬╬██░█░░░░░░│█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█▒▌░░░██╚▀▀▀╠▒╚╚░░▒╠██▌░░░░░╟█╬╬╣█╟▌░░▄▓▀░░░░░░░░╙█╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█▌▌░░░█████████████████░░░░░║█╬╬█▒╠█░░╟▒░█╚▌░█╬█▄▄██╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█▌█░░░████▀▀▀▀▀▀▀╙╙╠█▀█░░░░░▐█╬╣█╠╠╟▌░░╙╙░░█╣▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█▌╫░░░╟█ .▓▀│░█░░░░░]█╬█░╠╠╠█░░░░░░█╫╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█▌╚▌░░░▀▀██' ▄█│░░░█▒░░░░▐█╫▌╠╠╠╠╟▌░░░▓▀██▀█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣▒▄▄█░▄███░█' .▓▀▄╪▀╪░╫▌░░░░╟██▒╠╠╠╠╠█░░╫█#▀▀▓█▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╠╬╬╬╬╬╬█╬█╙╙' .█│░▄██▓▄╟▌░░░░╫█▌╠╠╠╠╠╠╫▌░░╫▄▄▄█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█╫⌐ .█░░╙█╫███░█░░░░██╠╠╠╠╠╠╠╠█░░░░███▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███▌ █▒░░░│╙╙│░░█░░░]█▒╠╠╠╠╠╠╠╠█▌░░░░░╫█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓. ▐▌░░░░░░░░;▄█▒░░╫█╠╠╠╠╠╠╠╠╠╠█░░░░½█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█╙. │█░░░░░░░░░╙╬█▒░░█▓▓▌╠╠╠╠╠╠╠╠█▌░░░█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▌ j▌░░░░░░░░░░░▐╬███▓▓▒╠╠╠╠╠╠╠▄█▒░░██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▌ ▐▌░░░░░░░░░░░▐╬█▒╠╠╠╠╠╠╠╠╠╠█▀░░░██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█ j▌░░░░░░░░]▓▀▓█▀▌╠╠╠╠╠╠╠╬█▀░░░╓██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█, '█░░░░░░░░█#▀▀▀▄█╠╠╠╠╠▒█▀░░░░▓██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓▓▄╟▌░░░░░░░╟▄▄▄▄▓░╠╠╠▄█▀░░░░▄█▒██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣██▓▓▄▄▄▄░░░╙╫▒╠▒▓█▒░░░░▓█╬╬╫█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█╙█▄░░│╙╠█▀▀▓▓█▀░░░░▄█╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█░░╙▀▓▄░░▀▀▀╙░░▄▄██╬╬╬╬╬╬╬╬█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█▒░░░░│█╬▀▀▀▀╬█╬╬╬╬╬╬╬╬╬╬╬╟█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█▒░░░░░█╠╠╠╠╠╠▀█▒╬╬╬╬╬╬╬╬╬╫█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█░░░░░░█╠╠╠╠╠╠▓█╬╬╬╬╬╬╬╬╬╬╫█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣█░░░░│▄█╠╠╠╠╠╠█╬╬╬╬╬╬╬╬╬╬╬╫▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█▒░░░▓█░╠╠╠╠╠╠╠╫▒╬╬╬╬╬╬╬╬╬╬╫█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣█░░░░░██▒╠╠╠╠╠╠╟█╬╬╬╬╬╬╬╬╬╬╫█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█░░░░░░░██▒╠╠╠╠╠╟█╬╬╬╬╬╬╬╬╬╬╣█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█▌░░░░░░░░███▒╠╠╠╠█╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// I search after truth, by which man never yet was harmed.
// - Marcus Aurelius
// Meditations, VI, 21
//
function searchAfterTruth(bytes calldata signature, MintKey calldata key) public view returns (bool) {
bytes32 digest = _hashTypedDataV4(
keccak256(
abi.encode(
MINTKEY_TYPE_HASH,
msg.sender, // this line was the biggest problem in the botted version of this contract.
key.free,
key.allowed,
key.paid,
key.price
)
)
);
return ECDSA.recover(digest, signature) == _signer;
}
// '' , ▄
// '' ▓▌ ╙█
// █╬▌ ██
// █╝╬█ ╓ █╬▌
// ▀ ╙µ ,█╙█▄▄█▓█▀ █╜╣µ
// ║ ╟ ▓▀░░╟▌, ╫ █
// ╫ ▀ ▄▀│░░░░█╬▓████▌ ,⌐ ╞
// ╟ ▀ ╓█│░░]░░▄░█ ▀▄▀ ,▀ ▐
// █ ╙▄ ,█│░░w╬╠█▒▄░╟█▀ ▄ ║
// ╙ ▀▄ ▓▀░░░░╪╪╪█╪▀▀░█▌ ╓▀ ▌
// ▀µ ▓█▓▓▓▓▓▓▓▓▓█░░░░░█#^ █
// ╙▄ ╓█╬╬╬█▀▀▀▀█▓╬█▒░░░░╚█ ,▀
// ▀▄ ,█╬╬╬█▓▄▄▄▄▄░╟█╣▌░░░░░█µ ,▀
// ,██╬╬╬╬╬╬▌╙▀,█╬╬╬╬█░░░░░░█ ╓M^
// ▄█╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓▌▄▄░░╔██▓╚█
// ▄█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣█▄▄▄▄▄▄▄▄▄█▌
// ╓█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣█╬╬╣▌
// ▓█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣█▓▓█
// ┐ █▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣█▓▓▌
// │' ╙█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣█▓█
// ░░ ╙█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██▌
// ░░┐ █╬╬╬╬╬╬╬╬╬╬╬██▀████,,,,╓▄▄▄▄▄▄╗╗╗ÆÆ#▓▓▓▓▓▓▓▓█
// ░░░┐ █╬╬╬╬╬╬╬╬╬╬╬╬██╬█╬╬░░▒╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠█
// ░░░░. █▓╬╬╬╬╬╬╬╬╬╬╬╣█▒╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╬▌
// ░░░░░┌ █╫█╬╬╬╬╬╬╬╬╬╬▓█╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠█
// ░░░░░░ █░╙█╬╬╬╬╬╬╬╬█▒╠▒▒▒▒▒▒▄▄▄▄▄▄▓▓▓▓▓▓▓▓▓▓▓▓▓▓███⌐
// ▒░░░░░░░ █░░╙█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█▀▀
// ▒▒░░░░░░░┌ █░░░╙█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█▀╙
// ▒▒▒▒░░░░░░.. █░░░░░█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█▀`
// ╠╠▒▒▒░░░░░░░. █░░░░░░██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██▀
// ╠╠╠▒▒▒░░░░░░░. █░░░░░░╫██╬╬╬╬╬╬╬╬╬╬▓██▀
// ╬╠╠╠▒▒▒░░░░░░░┌ █░░░░░░█▒╬█╬╬╬╬╬▓██▀░╠█
// ╬╬╠╠▒▒▒░░░░░░░░. █░░░░░░█▒╠╬███▀╬░╠╠╠╠╠█
// ╬╬╬╠╠▒▒▒░░░░░░░░░. █░░░░░░█╠╠╠╠░╠╠╠╠╠╠╠╠╠█
// ╬╬╬╬╠╠▒▒▒▒░░░░░░░░┐ █░░░░░░█╠╠╠╠╠╠╠╠╠╠╠╠╠╠█
// ╬╬╬╬╠╠╠▒▒▒▒░░░░░░░░░. █░░░░░░█▒▄╠╠▒╠▄▄╠╠╠╠╠╠█
// ╬╬╬╬╬╬╠╠▒▒▒▒░░░░░░░░░┌:█░░░░░░██╟██╟█▒█╬╠╠╠╠╠╫
// ╬╬╬╬╬╬╠╠╠▒▒▒▒░░░░░░░░░j█░░░░░░││░│░░░░█╠╠╠╠╠╠╫▌
// ╬╬╬╬╬╬╠╠╠╠▒▒▒▒░░░░░░░░░█░░░░░░░░░░░░░░█╬╠╠╠╠╠╫▌
// ╬╬╬╬╬╬╬╠╠╠▒▒▒▒▒░░░░░░░]█░░░░░░░░░░░░░░█▒╠╠╠╠╠╟▌
//
// Wealth consists not in having great possessions,
// but in having few wants.
// -Epicletus
//
function wantLess() public payable {
require(payable(_TEAM).send((address(this).balance / 10) * 4));
require(payable(_ARTIST).send(address(this).balance));
}
// ░ ╙░░░░░░░░░░░░░░░^░░░░⌐ ▄ ░░░"█▄ ░▓░░░▌▀ « φ░░]µ░░Γ.░░░░░░░";░░░░░░░╙,≤╙
// ░│░,"░░░░░░░░░░░░▄░⌐░░░░⌐\╬▌▀µ░░╙█▀▄ ]░╟█░⌐╟ ╟φ φ░░░'█µ ¡░░░░░Γ`;░░░░░░╙,φ"
// ⁿ░░░░,`░░░░░░░░░░╙█▓▄░░░░⌐╙█ ▀µ░ ▌│▓;░░█▒ j⌐ █▓▄░░░░██φ░░░░Γ,░░░░░░╙,∩` ,φ░░
// ░≥,"░░░» ╚░░░░░░░░╙▓╙▀▄░░░∩╚█ ╙▄Γ└▌░█░░╟▌ ]⌐ █╣╬█µ░⌐█╟▒░█▌,░░░░░Γ." ,≤░░░░░░░
// ░░░░░,"░░░ ╙░░░░░░░░╙▄╙▌░░░∩█▌ ╙▌ ▓░╟▒░▐▌ ╫ ▐▓╣╣╬█;░█░▌½▌╙▌░░╚▌ ,«φ░░░░░░░░░░░
// ░░░░░░░╓▄"░░,"φ░░░░░░╙▌│▓µ░░╟█ ╟ ╟░▐▒Γ▓ ╔ █╬╣╣╣█░▐▒░█▓ ╟╙ ▐█░░░░░░░░░░░Γ" '
// ░░░░░░░│╙█▓╗▄░.`φ░░░░░╫░░█░░░█ ▌█░▐▒▐█╓▀,█╬╣╣╣╬▌]▌░░█ ▐▒░█╬▌j▌░░░Γ" '
// ░░░░░░░░░│╙█╬╬▓▓▄ ╚░░░╫░░╟▒░▐█▌ ╟▌░▓]▌█ ▄▓╣╣╣╣╬█▄▀░░█ ▐░j█╣█▓╟ ' ,;≤
// ░░░░░░░░░░░ ╙▓╬╣╬▓▓ ╙░█░░▐▒ █╣╣▄ █▒▌█]▌▐╬╣╣╣╣╬█▀│░░█ ▌░█╬╬█▌▐⌐ ,;≤░░░░░░
// `╙╚φ░░░░░░░░░│▀▓╣╣╬▓▄ █░░╟▒╫╬╬█╬▌ ▀█▒░▌╫╣╣╣╣╬█│░▄Å▌▄ ▌ ▓╬╬█▌░╫░░░▄▌░░░░░░░░
// ╙▀▀█▄░░░░╙█╬╣╣╬█╬▌░╫▒█╣╣╬██╬╬████▓██▓▓▓╬█Å▀ ▄▀▌ Æ▀▄▓╬██│░╓▌░░▄█▌░░░░░░░░
// ≥»-, ╙█▌╙╙δ╙▀█╬╣╣╬██╙█╬╣╬▓╝▀ ╙██▌░░░ ╙▀W█░╫ ▓█▓█▓█▀│░░▄▀░]▓╬█░░░░░░░░░
// ░░░░░░░░░░░≥╠▌»,, ╙██╬╣╬█╬▓█▓▀ ╙█▌░░░░░░░│╙█▄█▀▀ █│░░╓▓▒▄▓╬╬█Γ╙╙"`
// ⁿⁿⁿⁿⁿΓΓ=ΓΓΓΓ░╟█░░░░▌ ▀▓▀╝▀███▄ ╙█░▀╙╙╙▀▀▄░░ ▀▄ █│Q▄▓█╬╬╬╬▓█⌐
// ░░░░░░░░░φφφφ≥█▌=ⁿ"▌ ╙▒¡▓╬╬╬╬▌ █▄▓▓╬╬▓▓▄░░░░╙▌╟███▓███▓█╩╙▌
// ╙╙"`▄ █╬▄.-▌ █▓╬╬╬╬╬╬▌ █┘╙╠▀██▓█▌░░░░ █▀ ,▄▄, █░╠╠╠╠╠╠╠╠╠╠╠
// ...;██,░░░»≥≥░█╬╬▓▄█ ╟█╬╬╣▀█ ╟▄ ╟▒░'▀╫æ▀░░░░░░░ █╟╝▀▀╙▀ ,▓▒╠╠╠╠╠╠╠╬▌╠╠╠
// ░░░░░╙█▄ ░░░░░^█╬╬╬█▌ ▐▓╣╬█▄▒█░█ ▐▌░░░░░░░░░░░░░░▓▄▄▓█▓▀▀▀▀▀▀╪▄▄╫▀▀█╙╩╠╠
// ░░░░░░╙█╬▓▓▄░` ▀▓▓╬╬╬▓▓█▓█▀ ░ ░╫▌ ╓█▀▌ █░░░░░░░░░░░░░░╟╬╬╬╬█╙▀▀╪▄▄▄▄æ#▀└░░░░░
// ░░░░░░╚╙█╬╣╬╬╬▓▓▓▓▓╣╣▓███│░░░░░░ ▀▀▀╙░░╙╙╙└░░░░░░░░░░░░░░╫╬╣╣╣╬█▄ƒ░░░░░░░░░░░░░░
// ░░╚" ▀▓╬╣╣╣╣╬████╬╬▓█▌░░░░░░░░░░░░░░░░░, ░░░░░░░░░░░░█╣╣╣╣╣╣╬╬▓▓▓▓▓░░░░░░░░░
// ,φ░│╙▀▓╬╣█╬╬╣╣╣╣╬██▌░░░░░░░░░░▄▀▀▄▄▀ ╙▄░░░░░░░░░│▓▀█╙▀▀█▓▓▓╝▀▀░≥», `"░░░░
// .»░░░░╚`,»╠│▓████████▀ █▀▄▄▄▄▄▄▄;█ª▀▀▀█▀▀▀▀░░░░░░░░╓▀ ╙▌ ¼ `╙╠░░░░░░░≥»,
// ,φ░░░░╚` »▒▄▓▓╬╬╬╬▓╝▀▄▀ ▓███▓╬╬╬╬╬╬▓▄▄▄█░░░░░░░░░░╓▓ ██ ▀ "╩░░░░░░░
// ░░░╚` ,φ░▄▓╬╬▓╝▀╙│QÅ▀ ▓Ü██╣╬╬█▓╬╬╬╬╬╬╬█▓█▄░░░░▄Å▀ ███▌ ██▌ ▓░» "╚░░░
// ╙` ,ε╠░░▐▓╬▓▌▄▄#▀╙ ╓█▀ ╟█╣╣╣╣╬╬█▀█╝▓███▓█▓▓▓█▀ ▐█╣█╬█▌ █╬█▌ █░░░≥, `
// »╠░░░░░██╙▀W▄ ,▄▀ ╓██╣╣╣╬╬▓█ ╙▓ ██╬█ ██╣╬█╙█▓▄█╬╣▓▄ █ ░░░░φ»
// ░░░░Γ░░░╫░░;░░│╙`^▐▀ #│█╬▓▓█▀│▓▀ ` ▓██▌╟▌ ██╣╣╣╣▒█╬╬▓╬█▌└▀▄ ▀▄░░░░░░░≥,
// ░░░░░░░░╙;φΓ;≥ ╓ ▄▀;██▀▓▀░░▓▀ ▄█╬██ ╟ █│╟█╬╣╣▒╙█╬╬╬▓█░░ ╙▀▄█⌐░░░░░░░
// ░░░░░░Γ;φ░░░╙ ]▌ #╙ ▄██.█│░╓█ #█╬╣╣█▌ ╙ ▄▓▒░▐▒█╬╫░φ│█╬╬╬╬█░░░░░░░░░░░░░░
// ░░░░Γ,φΓ░░≥ φ╫ ▄▀╙▄▓╬█ ▓│░▓▓ ▄▀]█╣╬██ ▓ ╟▒░╟▒░╟╣▒,"░╙▓╬╬╬█░░░░░░░░░░░░░
// ░░░,φ░░░░╙ .░░╟ ▐▒▓█╬╬█ ░▌░█ ▌ ▐▒░▐█╬██▀▌ ▐▒ ╘▌░█"░░╙█µ░ ╚░│▀╫██░░░░░░░░░░░░
// ░,φ░░░░≥ ;░░░╚▄▌░ ▀▀▀ ░░█j▌;█ ▌░░░█╣╝█▒█ ▐ ░ ╟▌█ "░░╙▓▄░,"░░░░╙▀Ü░░░≥░░░░░░
// φ╩░░░░╙ φ░░░░░█▒ ]░░░░╟╣▌░ ▌ ▐▒░░░╙█ █▌ ▌▐▒!≥ ╙█ '^░░░╙█▄░ ╙░░░░░░░░░░≥░░░░
// ░░░░░ ;░░░░░░░░Γ ]░░░░░░█▌░░╙▌ ▌░░░ε ▌╙█µ╙▄▌ \, ╙▌ ' ░░░░│░░░^φ░░░░░░░░░░≥░░
// ░░░╚ φ░░░░░░░░╩ ░░░░░░░░█▄░[¡▀▀░░░░ ╙█╟█µ░∩ ░ █ . ░░░░░░░░ "░░░░░░░░░░░φ
// ░░╙ ,░░░░░░░░░░ ░░░░░░░░Γ¡▀▄⌐]░░░░░░ ▀╟█░░ φ ▐█ ░░░░░░░░░ ╚░░░░░░░░░░
// ░ ;░░░░░░░░░░ ]░░░░░░░░⌐░│ ⌐]░░░░░░ ░█▌░░ !ε █▓█' ░░░░░░░░░,"░░░░░░░░░
// φ░░░░░░░░░░╙ ░╗▄▄▄▄░░░ ░░░ ░░░░░░░ ░█▌░░ ░ █▓▓╬▌' ░░░░░░░░░░ ╚░░░░░░░
// ;░░░░░░░░░░░░ φ░░ ╙▀▀█╬█▓▓▓▄▄░░░░░░░[ ]█▌░░░ ╓█▓█▓▓▌ \░░░░░░░░░,^φ░░░░░
// φ░░░░░░░░░░░░ ;░░░░░░░░│▀█╬▓▓╬╬█▓µ░░░░ █▀│░░░⌐▄█▓╣█▓╬▌ \░░░░░░░░░░ "░░░░
// ░░░░░░░░░░░░░╙ ░░░░░░░░░░ │╙█╬▓╬█▓╬▌░░░ ▄█│░░░░▄█╬▓▓█▓╬▀ "░░░░░░░░░░░ ░░░
// ░░░░░░░░░░░░░ φ░░░░░░░░░░.░░░╙█▓╬█▓╣▒░▄█▀ ░,▓█╬▓╬█╬╬█ "░░░░░░░░░░░ "░
// ░░░░░░░░░░░░ ,░░░░░░░░░░Γ;░░░░ █▓╣▓╣▌▓█▌ ▄▓╬╬███╬█▀ !≥ '"░░░░░░░░░░░░
// ░░░░░░░░░░░╩ ░░░░░░░░░░░⌐░░░░░.╙▓█╬╣▌█▌[▄███╬╬╬▓▀└░ \ε . ░░░░░░░░░░░░
// ░░░░░░░░░░░ φ░░░░░░░░░░░ ░░░░░¡░╟╬█▓█████╬▓▓▓▀ ░░░░ ░ ' ░░░░░░░░░░░
// ░░░░░░░░░░╩ ,░░░░░░░░░░░Γ¡░░░░░;░░╙▀█████▓▀ ░░░░░░░░ ░ ' ░░░░░░░░░░
// Whatever anyone does or says, I must be what I am and show my true colors.
// — Marcus Aurelius
// Meditations, VII, 15
//
function showStoicsTrueColors(string memory newBaseURI) public onlyOwner {
baseURI = newBaseURI;
}
function _baseURI() internal view override returns (string memory) {
return baseURI;
}
// Override to support royalties via ERC2981
function supportsInterface(
bytes4 interfaceId
) public view virtual override(IERC721A, ERC721A, ERC2981) returns (bool) {
// Supports the following `interfaceId`s:
// - IERC165: 0x01ffc9a7
// - IERC721: 0x80ac58cd
// - IERC721Metadata: 0x5b5e139f
// - IERC2981: 0x2a55205a
return
ERC721A.supportsInterface(interfaceId) ||
ERC2981.supportsInterface(interfaceId);
}
}
//
// Congratulations, you made it to the end of the Smart Contract!
// Go mint a fork and feed someone in New Orleans: https://forkhunger.art
//
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment