Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save germanllop/8fb6a471fdacf2e49f179e48ee8ed4c9 to your computer and use it in GitHub Desktop.
Save germanllop/8fb6a471fdacf2e49f179e48ee8ed4c9 to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.8.4+commit.c7e474f2.js&optimize=false&runs=200&gist=
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IAccessControl.sol";
import "../utils/Context.sol";
import "../utils/Strings.sol";
import "../utils/introspection/ERC165.sol";
/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms. This is a lightweight version that doesn't allow enumerating role
* members except through off-chain means by accessing the contract event logs. Some
* applications may benefit from on-chain enumerability, for those cases see
* {AccessControlEnumerable}.
*
* Roles are referred to by their `bytes32` identifier. These should be exposed
* in the external API and be unique. The best way to achieve this is by
* using `public constant` hash digests:
*
* ```
* bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
* ```
*
* Roles can be used to represent a set of permissions. To restrict access to a
* function call, use {hasRole}:
*
* ```
* function foo() public {
* require(hasRole(MY_ROLE, msg.sender));
* ...
* }
* ```
*
* Roles can be granted and revoked dynamically via the {grantRole} and
* {revokeRole} functions. Each role has an associated admin role, and only
* accounts that have a role's admin role can call {grantRole} and {revokeRole}.
*
* By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
* that only accounts with this role will be able to grant or revoke other
* roles. More complex role relationships can be created by using
* {_setRoleAdmin}.
*
* WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
* grant and revoke this role. Extra precautions should be taken to secure
* accounts that have been granted it.
*/
abstract contract AccessControl is Context, IAccessControl, ERC165 {
struct RoleData {
mapping(address => bool) members;
bytes32 adminRole;
}
mapping(bytes32 => RoleData) private _roles;
bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
/**
* @dev Modifier that checks that an account has a specific role. Reverts
* with a standardized message including the required role.
*
* The format of the revert reason is given by the following regular expression:
*
* /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
*
* _Available since v4.1._
*/
modifier onlyRole(bytes32 role) {
_checkRole(role, _msgSender());
_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) public view override returns (bool) {
return _roles[role].members[account];
}
/**
* @dev Revert with a standard message if `account` is missing `role`.
*
* The format of the revert reason is given by the following regular expression:
*
* /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
*/
function _checkRole(bytes32 role, address account) internal view {
if (!hasRole(role, account)) {
revert(
string(
abi.encodePacked(
"AccessControl: account ",
Strings.toHexString(uint160(account), 20),
" is missing role ",
Strings.toHexString(uint256(role), 32)
)
)
);
}
}
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
return _roles[role].adminRole;
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
_grantRole(role, account);
}
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
_revokeRole(role, account);
}
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been granted `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `account`.
*/
function renounceRole(bytes32 role, address account) public virtual override {
require(account == _msgSender(), "AccessControl: can only renounce roles for self");
_revokeRole(role, account);
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event. Note that unlike {grantRole}, this function doesn't perform any
* checks on the calling account.
*
* [WARNING]
* ====
* This function should only be called from the constructor when setting
* up the initial roles for the system.
*
* Using this function in any other way is effectively circumventing the admin
* system imposed by {AccessControl}.
* ====
*/
function _setupRole(bytes32 role, address account) internal virtual {
_grantRole(role, account);
}
/**
* @dev Sets `adminRole` as ``role``'s admin role.
*
* Emits a {RoleAdminChanged} event.
*/
function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
bytes32 previousAdminRole = getRoleAdmin(role);
_roles[role].adminRole = adminRole;
emit RoleAdminChanged(role, previousAdminRole, adminRole);
}
function _grantRole(bytes32 role, address account) private {
if (!hasRole(role, account)) {
_roles[role].members[account] = true;
emit RoleGranted(role, account, _msgSender());
}
}
function _revokeRole(bytes32 role, address account) private {
if (hasRole(role, account)) {
_roles[role].members[account] = false;
emit RoleRevoked(role, account, _msgSender());
}
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IAccessControlEnumerable.sol";
import "./AccessControl.sol";
import "../utils/structs/EnumerableSet.sol";
/**
* @dev Extension of {AccessControl} that allows enumerating the members of each role.
*/
abstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {
using EnumerableSet for EnumerableSet.AddressSet;
mapping(bytes32 => EnumerableSet.AddressSet) private _roleMembers;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev Returns one of the accounts that have `role`. `index` must be a
* value between 0 and {getRoleMemberCount}, non-inclusive.
*
* Role bearers are not sorted in any particular way, and their ordering may
* change at any point.
*
* WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure
* you perform all queries on the same block. See the following
* https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]
* for more information.
*/
function getRoleMember(bytes32 role, uint256 index) public view override returns (address) {
return _roleMembers[role].at(index);
}
/**
* @dev Returns the number of accounts that have `role`. Can be used
* together with {getRoleMember} to enumerate all bearers of a role.
*/
function getRoleMemberCount(bytes32 role) public view override returns (uint256) {
return _roleMembers[role].length();
}
/**
* @dev Overload {grantRole} to track enumerable memberships
*/
function grantRole(bytes32 role, address account) public virtual override(AccessControl, IAccessControl) {
super.grantRole(role, account);
_roleMembers[role].add(account);
}
/**
* @dev Overload {revokeRole} to track enumerable memberships
*/
function revokeRole(bytes32 role, address account) public virtual override(AccessControl, IAccessControl) {
super.revokeRole(role, account);
_roleMembers[role].remove(account);
}
/**
* @dev Overload {renounceRole} to track enumerable memberships
*/
function renounceRole(bytes32 role, address account) public virtual override(AccessControl, IAccessControl) {
super.renounceRole(role, account);
_roleMembers[role].remove(account);
}
/**
* @dev Overload {_setupRole} to track enumerable memberships
*/
function _setupRole(bytes32 role, address account) internal virtual override {
super._setupRole(role, account);
_roleMembers[role].add(account);
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev External interface of AccessControl declared to support ERC165 detection.
*/
interface IAccessControl {
/**
* @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
*
* `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
* {RoleAdminChanged} not being emitted signaling this.
*
* _Available since v3.1._
*/
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
/**
* @dev Emitted when `account` is granted `role`.
*
* `sender` is the account that originated the contract call, an admin role
* bearer except when using {AccessControl-_setupRole}.
*/
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Emitted when `account` is revoked `role`.
*
* `sender` is the account that originated the contract call:
* - if using `revokeRole`, it is the admin role bearer
* - if using `renounceRole`, it is the role bearer (i.e. `account`)
*/
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) external view returns (bool);
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {AccessControl-_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) external view returns (bytes32);
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function grantRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function revokeRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been granted `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `account`.
*/
function renounceRole(bytes32 role, address account) external;
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IAccessControl.sol";
/**
* @dev External interface of AccessControlEnumerable declared to support ERC165 detection.
*/
interface IAccessControlEnumerable is IAccessControl {
/**
* @dev Returns one of the accounts that have `role`. `index` must be a
* value between 0 and {getRoleMemberCount}, non-inclusive.
*
* Role bearers are not sorted in any particular way, and their ordering may
* change at any point.
*
* WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure
* you perform all queries on the same block. See the following
* https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]
* for more information.
*/
function getRoleMember(bytes32 role, uint256 index) external view returns (address);
/**
* @dev Returns the number of accounts that have `role`. Can be used
* together with {getRoleMember} to enumerate all bearers of a role.
*/
function getRoleMemberCount(bytes32 role) external view returns (uint256);
}
// SPDX-License-Identifier: MIT
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() {
_setOwner(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_setOwner(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// SPDX-License-Identifier: MIT
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
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* Requirements:
*
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
unchecked {
_approve(sender, _msgSender(), currentAllowance - amount);
}
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `sender` to `recipient`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
uint256 senderBalance = _balances[sender];
require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[sender] = senderBalance - amount;
}
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
_afterTokenTransfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
}
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
// SPDX-License-Identifier: MIT
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 `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
address recipient,
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
pragma solidity ^0.8.0;
import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./extensions/IERC721Metadata.sol";
import "../../utils/Address.sol";
import "../../utils/Context.sol";
import "../../utils/Strings.sol";
import "../../utils/introspection/ERC165.sol";
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overriden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
require(operator != _msgSender(), "ERC721: approve to caller");
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_safeTransfer(from, to, tokenId, _data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `_data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
require(_exists(tokenId), "ERC721: operator query for nonexistent token");
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../ERC721.sol";
import "../../../utils/Context.sol";
/**
* @title ERC721 Burnable Token
* @dev ERC721 Token that can be irreversibly burned (destroyed).
*/
abstract contract ERC721Burnable is Context, ERC721 {
/**
* @dev Burns `tokenId`. See {ERC721-_burn}.
*
* Requirements:
*
* - The caller must own `tokenId` or be an approved operator.
*/
function burn(uint256 tokenId) public virtual {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved");
_burn(tokenId);
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../ERC721.sol";
import "./IERC721Enumerable.sol";
/**
* @dev This implements an optional extension of {ERC721} defined in the EIP that adds
* enumerability of all the token ids in the contract as well as all token ids owned by each
* account.
*/
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
// Mapping from owner to list of owned token IDs
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
// Mapping from token ID to index of the owner tokens list
mapping(uint256 => uint256) private _ownedTokensIndex;
// Array with all token ids, used for enumeration
uint256[] private _allTokens;
// Mapping from token id to position in the allTokens array
mapping(uint256 => uint256) private _allTokensIndex;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
return _ownedTokens[owner][index];
}
/**
* @dev See {IERC721Enumerable-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _allTokens.length;
}
/**
* @dev See {IERC721Enumerable-tokenByIndex}.
*/
function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
return _allTokens[index];
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual override {
super._beforeTokenTransfer(from, to, tokenId);
if (from == address(0)) {
_addTokenToAllTokensEnumeration(tokenId);
} else if (from != to) {
_removeTokenFromOwnerEnumeration(from, tokenId);
}
if (to == address(0)) {
_removeTokenFromAllTokensEnumeration(tokenId);
} else if (to != from) {
_addTokenToOwnerEnumeration(to, tokenId);
}
}
/**
* @dev Private function to add a token to this extension's ownership-tracking data structures.
* @param to address representing the new owner of the given token ID
* @param tokenId uint256 ID of the token to be added to the tokens list of the given address
*/
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
uint256 length = ERC721.balanceOf(to);
_ownedTokens[to][length] = tokenId;
_ownedTokensIndex[tokenId] = length;
}
/**
* @dev Private function to add a token to this extension's token tracking data structures.
* @param tokenId uint256 ID of the token to be added to the tokens list
*/
function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
/**
* @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
* while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
* gas optimizations e.g. when performing a transfer operation (avoiding double writes).
* This has O(1) time complexity, but alters the order of the _ownedTokens array.
* @param from address representing the previous owner of the given token ID
* @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
*/
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
// To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
uint256 tokenIndex = _ownedTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
}
// This also deletes the contents at the last position of the array
delete _ownedTokensIndex[tokenId];
delete _ownedTokens[from][lastTokenIndex];
}
/**
* @dev Private function to remove a token from this extension's token tracking data structures.
* This has O(1) time complexity, but alters the order of the _allTokens array.
* @param tokenId uint256 ID of the token to be removed from the tokens list
*/
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
// To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = _allTokens.length - 1;
uint256 tokenIndex = _allTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
// rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
// an 'if' statement (like in _removeTokenFromOwnerEnumeration)
uint256 lastTokenId = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
// This also deletes the contents at the last position of the array
delete _allTokensIndex[tokenId];
_allTokens.pop();
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../ERC721.sol";
import "../../../security/Pausable.sol";
/**
* @dev ERC721 token with pausable token transfers, minting and burning.
*
* Useful for scenarios such as preventing trades until the end of an evaluation
* period, or having an emergency switch for freezing all token transfers in the
* event of a large bug.
*/
abstract contract ERC721Pausable is ERC721, Pausable {
/**
* @dev See {ERC721-_beforeTokenTransfer}.
*
* Requirements:
*
* - the contract must not be paused.
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual override {
super._beforeTokenTransfer(from, to, tokenId);
require(!paused(), "ERC721Pausable: token transfer while paused");
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../ERC721.sol";
/**
* @dev ERC721 token with storage based token URI management.
*/
abstract contract ERC721URIStorage is ERC721 {
using Strings for uint256;
// Optional mapping for token URIs
mapping(uint256 => string) private _tokenURIs;
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");
string memory _tokenURI = _tokenURIs[tokenId];
string memory base = _baseURI();
// If there is no base URI, return the token URI.
if (bytes(base).length == 0) {
return _tokenURI;
}
// If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
if (bytes(_tokenURI).length > 0) {
return string(abi.encodePacked(base, _tokenURI));
}
return super.tokenURI(tokenId);
}
/**
* @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
_tokenURIs[tokenId] = _tokenURI;
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual override {
super._burn(tokenId);
if (bytes(_tokenURIs[tokenId]).length != 0) {
delete _tokenURIs[tokenId];
}
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../IERC721.sol";
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../IERC721.sol";
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// SPDX-License-Identifier: MIT
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
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../ERC721.sol";
import "../extensions/ERC721Enumerable.sol";
import "../extensions/ERC721Burnable.sol";
import "../extensions/ERC721Pausable.sol";
import "../../../access/AccessControlEnumerable.sol";
import "../../../utils/Context.sol";
import "../../../utils/Counters.sol";
/**
* @dev {ERC721} token, including:
*
* - ability for holders to burn (destroy) their tokens
* - a minter role that allows for token minting (creation)
* - a pauser role that allows to stop all token transfers
* - token ID and URI autogeneration
*
* This contract uses {AccessControl} to lock permissioned functions using the
* different roles - head to its documentation for details.
*
* The account that deploys the contract will be granted the minter and pauser
* roles, as well as the default admin role, which will let it grant both minter
* and pauser roles to other accounts.
*/
contract ERC721PresetMinterPauserAutoId is
Context,
AccessControlEnumerable,
ERC721Enumerable,
ERC721Burnable,
ERC721Pausable
{
using Counters for Counters.Counter;
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");
Counters.Counter private _tokenIdTracker;
string private _baseTokenURI;
/**
* @dev Grants `DEFAULT_ADMIN_ROLE`, `MINTER_ROLE` and `PAUSER_ROLE` to the
* account that deploys the contract.
*
* Token URIs will be autogenerated based on `baseURI` and their token IDs.
* See {ERC721-tokenURI}.
*/
constructor(
string memory name,
string memory symbol,
string memory baseTokenURI
) ERC721(name, symbol) {
_baseTokenURI = baseTokenURI;
_setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
_setupRole(MINTER_ROLE, _msgSender());
_setupRole(PAUSER_ROLE, _msgSender());
}
function _baseURI() internal view virtual override returns (string memory) {
return _baseTokenURI;
}
/**
* @dev Creates a new token for `to`. Its token ID will be automatically
* assigned (and available on the emitted {IERC721-Transfer} event), and the token
* URI autogenerated based on the base URI passed at construction.
*
* See {ERC721-_mint}.
*
* Requirements:
*
* - the caller must have the `MINTER_ROLE`.
*/
function mint(address to) public virtual {
require(hasRole(MINTER_ROLE, _msgSender()), "ERC721PresetMinterPauserAutoId: must have minter role to mint");
// We cannot just use balanceOf to create the new tokenId because tokens
// can be burned (destroyed), so we need a separate counter.
_mint(to, _tokenIdTracker.current());
_tokenIdTracker.increment();
}
/**
* @dev Pauses all token transfers.
*
* See {ERC721Pausable} and {Pausable-_pause}.
*
* Requirements:
*
* - the caller must have the `PAUSER_ROLE`.
*/
function pause() public virtual {
require(hasRole(PAUSER_ROLE, _msgSender()), "ERC721PresetMinterPauserAutoId: must have pauser role to pause");
_pause();
}
/**
* @dev Unpauses all token transfers.
*
* See {ERC721Pausable} and {Pausable-_unpause}.
*
* Requirements:
*
* - the caller must have the `PAUSER_ROLE`.
*/
function unpause() public virtual {
require(hasRole(PAUSER_ROLE, _msgSender()), "ERC721PresetMinterPauserAutoId: must have pauser role to unpause");
_unpause();
}
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual override(ERC721, ERC721Enumerable, ERC721Pausable) {
super._beforeTokenTransfer(from, to, tokenId);
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId)
public
view
virtual
override(AccessControlEnumerable, ERC721, ERC721Enumerable)
returns (bool)
{
return super.supportsInterface(interfaceId);
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @title Counters
* @author Matt Condon (@shrugs)
* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
*
* Include with `using Counters for Counters.Counter;`
*/
library Counters {
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
unchecked {
counter._value += 1;
}
}
function decrement(Counter storage counter) internal {
uint256 value = counter._value;
require(value > 0, "Counter: decrement overflow");
unchecked {
counter._value = value - 1;
}
}
function reset(Counter storage counter) internal {
counter._value = 0;
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
*
* These functions can be used to verify that a message was signed by the holder
* of the private keys of a given address.
*/
library ECDSA {
enum RecoverError {
NoError,
InvalidSignature,
InvalidSignatureLength,
InvalidSignatureS,
InvalidSignatureV
}
function _throwError(RecoverError error) private pure {
if (error == RecoverError.NoError) {
return; // no error: do nothing
} else if (error == RecoverError.InvalidSignature) {
revert("ECDSA: invalid signature");
} else if (error == RecoverError.InvalidSignatureLength) {
revert("ECDSA: invalid signature length");
} else if (error == RecoverError.InvalidSignatureS) {
revert("ECDSA: invalid signature 's' value");
} else if (error == RecoverError.InvalidSignatureV) {
revert("ECDSA: invalid signature 'v' value");
}
}
/**
* @dev Returns the address that signed a hashed message (`hash`) with
* `signature` or error string. This address can then be used for verification purposes.
*
* The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
* this function rejects them by requiring the `s` value to be in the lower
* half order, and the `v` value to be either 27 or 28.
*
* IMPORTANT: `hash` _must_ be the result of a hash operation for the
* verification to be secure: it is possible to craft signatures that
* recover to arbitrary addresses for non-hashed data. A safe way to ensure
* this is by receiving a hash of the original message (which may otherwise
* be too long), and then calling {toEthSignedMessageHash} on it.
*
* Documentation for signature generation:
* - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
* - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
*
* _Available since v4.3._
*/
function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
// Check the signature length
// - case 65: r,s,v signature (standard)
// - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
if (signature.length == 65) {
bytes32 r;
bytes32 s;
uint8 v;
// ecrecover takes the signature parameters, and the only way to get them
// currently is to use assembly.
assembly {
r := mload(add(signature, 0x20))
s := mload(add(signature, 0x40))
v := byte(0, mload(add(signature, 0x60)))
}
return tryRecover(hash, v, r, s);
} else if (signature.length == 64) {
bytes32 r;
bytes32 vs;
// ecrecover takes the signature parameters, and the only way to get them
// currently is to use assembly.
assembly {
r := mload(add(signature, 0x20))
vs := mload(add(signature, 0x40))
}
return tryRecover(hash, r, vs);
} else {
return (address(0), RecoverError.InvalidSignatureLength);
}
}
/**
* @dev Returns the address that signed a hashed message (`hash`) with
* `signature`. This address can then be used for verification purposes.
*
* The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
* this function rejects them by requiring the `s` value to be in the lower
* half order, and the `v` value to be either 27 or 28.
*
* IMPORTANT: `hash` _must_ be the result of a hash operation for the
* verification to be secure: it is possible to craft signatures that
* recover to arbitrary addresses for non-hashed data. A safe way to ensure
* this is by receiving a hash of the original message (which may otherwise
* be too long), and then calling {toEthSignedMessageHash} on it.
*/
function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
(address recovered, RecoverError error) = tryRecover(hash, signature);
_throwError(error);
return recovered;
}
/**
* @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
*
* See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
*
* _Available since v4.3._
*/
function tryRecover(
bytes32 hash,
bytes32 r,
bytes32 vs
) internal pure returns (address, RecoverError) {
bytes32 s;
uint8 v;
assembly {
s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
v := add(shr(255, vs), 27)
}
return tryRecover(hash, v, r, s);
}
/**
* @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
*
* _Available since v4.2._
*/
function recover(
bytes32 hash,
bytes32 r,
bytes32 vs
) internal pure returns (address) {
(address recovered, RecoverError error) = tryRecover(hash, r, vs);
_throwError(error);
return recovered;
}
/**
* @dev Overload of {ECDSA-tryRecover} that receives the `v`,
* `r` and `s` signature fields separately.
*
* _Available since v4.3._
*/
function tryRecover(
bytes32 hash,
uint8 v,
bytes32 r,
bytes32 s
) internal pure returns (address, RecoverError) {
// EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
// unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
// the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
// signatures from current libraries generate a unique signature with an s-value in the lower half order.
//
// If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
// with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
// vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
// these malleable signatures as well.
if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
return (address(0), RecoverError.InvalidSignatureS);
}
if (v != 27 && v != 28) {
return (address(0), RecoverError.InvalidSignatureV);
}
// If the signature is valid (and not malleable), return the signer address
address signer = ecrecover(hash, v, r, s);
if (signer == address(0)) {
return (address(0), RecoverError.InvalidSignature);
}
return (signer, RecoverError.NoError);
}
/**
* @dev Overload of {ECDSA-recover} that receives the `v`,
* `r` and `s` signature fields separately.
*/
function recover(
bytes32 hash,
uint8 v,
bytes32 r,
bytes32 s
) internal pure returns (address) {
(address recovered, RecoverError error) = tryRecover(hash, v, r, s);
_throwError(error);
return recovered;
}
/**
* @dev Returns an Ethereum Signed Message, created from a `hash`. This
* produces hash corresponding to the one signed with the
* https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
* JSON-RPC method as part of EIP-191.
*
* See {recover}.
*/
function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
// 32 is the length in bytes of hash,
// enforced by the type signature above
return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
}
/**
* @dev Returns an Ethereum Signed Typed Data, created from a
* `domainSeparator` and a `structHash`. This produces hash corresponding
* to the one signed with the
* https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
* JSON-RPC method as part of EIP-712.
*
* See {recover}.
*/
function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IERC165.sol";
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Library for managing
* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
* types.
*
* Sets have the following properties:
*
* - Elements are added, removed, and checked for existence in constant time
* (O(1)).
* - Elements are enumerated in O(n). No guarantees are made on the ordering.
*
* ```
* contract Example {
* // Add the library methods
* using EnumerableSet for EnumerableSet.AddressSet;
*
* // Declare a set state variable
* EnumerableSet.AddressSet private mySet;
* }
* ```
*
* As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
* and `uint256` (`UintSet`) are supported.
*/
library EnumerableSet {
// To implement this library for multiple types with as little code
// repetition as possible, we write it in terms of a generic Set type with
// bytes32 values.
// The Set implementation uses private functions, and user-facing
// implementations (such as AddressSet) are just wrappers around the
// underlying Set.
// This means that we can only create new EnumerableSets for types that fit
// in bytes32.
struct Set {
// Storage of set values
bytes32[] _values;
// Position of the value in the `values` array, plus 1 because index 0
// means a value is not in the set.
mapping(bytes32 => uint256) _indexes;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function _add(Set storage set, bytes32 value) private returns (bool) {
if (!_contains(set, value)) {
set._values.push(value);
// The value is stored at length-1, but we add 1 to all indexes
// and use 0 as a sentinel value
set._indexes[value] = set._values.length;
return true;
} else {
return false;
}
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function _remove(Set storage set, bytes32 value) private returns (bool) {
// We read and store the value's index to prevent multiple reads from the same storage slot
uint256 valueIndex = set._indexes[value];
if (valueIndex != 0) {
// Equivalent to contains(set, value)
// To delete an element from the _values array in O(1), we swap the element to delete with the last one in
// the array, and then remove the last element (sometimes called as 'swap and pop').
// This modifies the order of the array, as noted in {at}.
uint256 toDeleteIndex = valueIndex - 1;
uint256 lastIndex = set._values.length - 1;
if (lastIndex != toDeleteIndex) {
bytes32 lastvalue = set._values[lastIndex];
// Move the last value to the index where the value to delete is
set._values[toDeleteIndex] = lastvalue;
// Update the index for the moved value
set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex
}
// Delete the slot where the moved value was stored
set._values.pop();
// Delete the index for the deleted slot
delete set._indexes[value];
return true;
} else {
return false;
}
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function _contains(Set storage set, bytes32 value) private view returns (bool) {
return set._indexes[value] != 0;
}
/**
* @dev Returns the number of values on the set. O(1).
*/
function _length(Set storage set) private view returns (uint256) {
return set._values.length;
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function _at(Set storage set, uint256 index) private view returns (bytes32) {
return set._values[index];
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function _values(Set storage set) private view returns (bytes32[] memory) {
return set._values;
}
// Bytes32Set
struct Bytes32Set {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _add(set._inner, value);
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _remove(set._inner, value);
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
return _contains(set._inner, value);
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(Bytes32Set storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
return _at(set._inner, index);
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
return _values(set._inner);
}
// AddressSet
struct AddressSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(AddressSet storage set, address value) internal returns (bool) {
return _add(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(AddressSet storage set, address value) internal returns (bool) {
return _remove(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(AddressSet storage set, address value) internal view returns (bool) {
return _contains(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(AddressSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(AddressSet storage set, uint256 index) internal view returns (address) {
return address(uint160(uint256(_at(set._inner, index))));
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(AddressSet storage set) internal view returns (address[] memory) {
bytes32[] memory store = _values(set._inner);
address[] memory result;
assembly {
result := store
}
return result;
}
// UintSet
struct UintSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(UintSet storage set, uint256 value) internal returns (bool) {
return _add(set._inner, bytes32(value));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(UintSet storage set, uint256 value) internal returns (bool) {
return _remove(set._inner, bytes32(value));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(UintSet storage set, uint256 value) internal view returns (bool) {
return _contains(set._inner, bytes32(value));
}
/**
* @dev Returns the number of values on the set. O(1).
*/
function length(UintSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(UintSet storage set, uint256 index) internal view returns (uint256) {
return uint256(_at(set._inner, index));
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(UintSet storage set) internal view returns (uint256[] memory) {
bytes32[] memory store = _values(set._inner);
uint256[] memory result;
assembly {
result := store
}
return result;
}
}
// SPDX-License-Identifier: MIT
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() {
_setOwner(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_setOwner(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
REMIX EXAMPLE PROJECT
Remix example project is present when Remix loads very first time or there are no files existing in the File Explorer.
It contains 3 directories:
1. 'contracts': Holds three contracts with different complexity level, denoted with number prefix in file name.
2. 'scripts': Holds two scripts to deploy a contract. It is explained below.
3. 'tests': Contains one test file for 'Ballot' contract with unit tests in Solidity.
SCRIPTS
The 'scripts' folder contains example async/await scripts for deploying the 'Storage' contract.
For the deployment of any other contract, 'contractName' and 'constructorArgs' should be updated (along with other code if required).
Scripts have full access to the web3.js and ethers.js libraries.
To run a script, right click on file name in the file explorer and click 'Run'. Remember, Solidity file must already be compiled.
Output from script will appear in remix terminal.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./11_Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_setOwner(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_setOwner(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
pragma solidity ^0.4.0;
function () public payable {
revert () ;
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
/**
* @title Storage
* @dev Store & retrieve value in a variable
*/
contract Storage {
uint256 number;
/**
* @dev Store value in variable
* @param num value to store
*/
function store(uint256 num) public {
number = num;
}
/**
* @dev Return value
* @return value of 'number'
*/
function retrieve() public view returns (uint256){
return number;
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
/**
* @title Owner
* @dev Set & change owner
*/
contract Owner {
address private owner;
// event for EVM logging
event OwnerSet(address indexed oldOwner, address indexed newOwner);
// modifier to check if caller is owner
modifier isOwner() {
// If the first argument of 'require' evaluates to 'false', execution terminates and all
// changes to the state and to Ether balances are reverted.
// This used to consume all gas in old EVM versions, but not anymore.
// It is often a good idea to use 'require' to check if functions are called correctly.
// As a second argument, you can also provide an explanation about what went wrong.
require(msg.sender == owner, "Caller is not owner");
_;
}
/**
* @dev Set contract deployer as owner
*/
constructor() {
owner = msg.sender; // 'msg.sender' is sender of current call, contract deployer for a constructor
emit OwnerSet(address(0), owner);
}
/**
* @dev Change owner
* @param newOwner address of new owner
*/
function changeOwner(address newOwner) public isOwner {
emit OwnerSet(owner, newOwner);
owner = newOwner;
}
/**
* @dev Return owner address
* @return address of owner
*/
function getOwner() external view returns (address) {
return owner;
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
/**
* @title Ballot
* @dev Implements voting process along with vote delegation
*/
contract Ballot {
struct Voter {
uint weight; // weight is accumulated by delegation
bool voted; // if true, that person already voted
address delegate; // person delegated to
uint vote; // index of the voted proposal
}
struct Proposal {
// If you can limit the length to a certain number of bytes,
// always use one of bytes1 to bytes32 because they are much cheaper
bytes32 name; // short name (up to 32 bytes)
uint voteCount; // number of accumulated votes
}
address public chairperson;
mapping(address => Voter) public voters;
Proposal[] public proposals;
/**
* @dev Create a new ballot to choose one of 'proposalNames'.
* @param proposalNames names of proposals
*/
constructor(bytes32[] memory proposalNames) {
chairperson = msg.sender;
voters[chairperson].weight = 1;
for (uint i = 0; i < proposalNames.length; i++) {
// 'Proposal({...})' creates a temporary
// Proposal object and 'proposals.push(...)'
// appends it to the end of 'proposals'.
proposals.push(Proposal({
name: proposalNames[i],
voteCount: 0
}));
}
}
/**
* @dev Give 'voter' the right to vote on this ballot. May only be called by 'chairperson'.
* @param voter address of voter
*/
function giveRightToVote(address voter) public {
require(
msg.sender == chairperson,
"Only chairperson can give right to vote."
);
require(
!voters[voter].voted,
"The voter already voted."
);
require(voters[voter].weight == 0);
voters[voter].weight = 1;
}
/**
* @dev Delegate your vote to the voter 'to'.
* @param to address to which vote is delegated
*/
function delegate(address to) public {
Voter storage sender = voters[msg.sender];
require(!sender.voted, "You already voted.");
require(to != msg.sender, "Self-delegation is disallowed.");
while (voters[to].delegate != address(0)) {
to = voters[to].delegate;
// We found a loop in the delegation, not allowed.
require(to != msg.sender, "Found loop in delegation.");
}
sender.voted = true;
sender.delegate = to;
Voter storage delegate_ = voters[to];
if (delegate_.voted) {
// If the delegate already voted,
// directly add to the number of votes
proposals[delegate_.vote].voteCount += sender.weight;
} else {
// If the delegate did not vote yet,
// add to her weight.
delegate_.weight += sender.weight;
}
}
/**
* @dev Give your vote (including votes delegated to you) to proposal 'proposals[proposal].name'.
* @param proposal index of proposal in the proposals array
*/
function vote(uint proposal) public {
Voter storage sender = voters[msg.sender];
require(sender.weight != 0, "Has no right to vote");
require(!sender.voted, "Already voted.");
sender.voted = true;
sender.vote = proposal;
// If 'proposal' is out of the range of the array,
// this will throw automatically and revert all
// changes.
proposals[proposal].voteCount += sender.weight;
}
/**
* @dev Computes the winning proposal taking all previous votes into account.
* @return winningProposal_ index of winning proposal in the proposals array
*/
function winningProposal() public view
returns (uint winningProposal_)
{
uint winningVoteCount = 0;
for (uint p = 0; p < proposals.length; p++) {
if (proposals[p].voteCount > winningVoteCount) {
winningVoteCount = proposals[p].voteCount;
winningProposal_ = p;
}
}
}
/**
* @dev Calls winningProposal() function to get the index of the winner contained in the proposals array and then
* @return winnerName_ the name of the winner
*/
function winnerName() public view
returns (bytes32 winnerName_)
{
winnerName_ = proposals[winningProposal()].name;
}
}
/**
*Submitted for verification at Etherscan.io on 2021-01-12
*/
// File: contracts\open-zeppelin-contracts\token\ERC20\IERC20.sol
pragma solidity ^0.5.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP. Does not include
* the optional functions; to access them see `ERC20Detailed`.
*/
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 `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a `Transfer` event.
*/
function transfer(address recipient, 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.
*
* > 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 `sender` to `recipient` 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 sender, address recipient, 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);
}
// File: contracts\open-zeppelin-contracts\math\SafeMath.sol
pragma solidity ^0.5.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a, "SafeMath: subtraction overflow");
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, "SafeMath: division by zero");
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0, "SafeMath: modulo by zero");
return a % b;
}
}
// File: contracts\open-zeppelin-contracts\token\ERC20\ERC20.sol
pragma solidity ^0.5.0;
/**
* @dev Implementation of the `IERC20` interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using `_mint`.
* For a generic mechanism see `ERC20Mintable`.
*
* *For a detailed writeup see our guide [How to implement supply
* mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).*
*
* We have followed general OpenZeppelin guidelines: functions revert instead
* of returning `false` on failure. This behavior is nonetheless conventional
* and does not conflict with the expectations of ERC20 applications.
*
* Additionally, an `Approval` event is emitted on calls to `transferFrom`.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard `decreaseAllowance` and `increaseAllowance`
* functions have been added to mitigate the well-known issues around setting
* allowances. See `IERC20.approve`.
*/
contract ERC20 is IERC20 {
using SafeMath for uint256;
mapping (address => uint256) private _balances;
mapping (address => mapping (address => uint256)) private _allowances;
uint256 private _totalSupply;
/**
* @dev See `IERC20.totalSupply`.
*/
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
/**
* @dev See `IERC20.balanceOf`.
*/
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
/**
* @dev See `IERC20.transfer`.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}
/**
* @dev See `IERC20.allowance`.
*/
function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See `IERC20.approve`.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 value) public returns (bool) {
_approve(msg.sender, spender, value);
return true;
}
/**
* @dev See `IERC20.transferFrom`.
*
* Emits an `Approval` event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of `ERC20`;
*
* Requirements:
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `value`.
* - the caller must have allowance for `sender`'s tokens of at least
* `amount`.
*/
function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount));
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to `approve` that can be used as a mitigation for
* problems described in `IERC20.approve`.
*
* Emits an `Approval` event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
_approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to `approve` that can be used as a mitigation for
* problems described in `IERC20.approve`.
*
* Emits an `Approval` event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
_approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue));
return true;
}
/**
* @dev Moves tokens `amount` from `sender` to `recipient`.
*
* This is internal function is equivalent to `transfer`, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a `Transfer` event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(address sender, address recipient, uint256 amount) internal {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_balances[sender] = _balances[sender].sub(amount);
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a `Transfer` event with `from` set to the zero address.
*
* Requirements
*
* - `to` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal {
require(account != address(0), "ERC20: mint to the zero address");
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a `Transfer` event with `to` set to the zero address.
*
* Requirements
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 value) internal {
require(account != address(0), "ERC20: burn from the zero address");
_totalSupply = _totalSupply.sub(value);
_balances[account] = _balances[account].sub(value);
emit Transfer(account, address(0), value);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
*
* This is internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an `Approval` event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address owner, address spender, uint256 value) internal {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = value;
emit Approval(owner, spender, value);
}
/**
* @dev Destoys `amount` tokens from `account`.`amount` is then deducted
* from the caller's allowance.
*
* See `_burn` and `_approve`.
*/
function _burnFrom(address account, uint256 amount) internal {
_burn(account, amount);
_approve(account, msg.sender, _allowances[account][msg.sender].sub(amount));
}
}
// File: contracts\open-zeppelin-contracts\access\Roles.sol
pragma solidity ^0.5.0;
/**
* @title Roles
* @dev Library for managing addresses assigned to a Role.
*/
library Roles {
struct Role {
mapping (address => bool) bearer;
}
/**
* @dev Give an account access to this role.
*/
function add(Role storage role, address account) internal {
require(!has(role, account), "Roles: account already has role");
role.bearer[account] = true;
}
/**
* @dev Remove an account's access to this role.
*/
function remove(Role storage role, address account) internal {
require(has(role, account), "Roles: account does not have role");
role.bearer[account] = false;
}
/**
* @dev Check if an account has this role.
* @return bool
*/
function has(Role storage role, address account) internal view returns (bool) {
require(account != address(0), "Roles: account is the zero address");
return role.bearer[account];
}
}
// File: contracts\open-zeppelin-contracts\access\roles\MinterRole.sol
pragma solidity ^0.5.0;
contract MinterRole {
using Roles for Roles.Role;
event MinterAdded(address indexed account);
event MinterRemoved(address indexed account);
Roles.Role private _minters;
constructor () internal {
_addMinter(msg.sender);
}
modifier onlyMinter() {
require(isMinter(msg.sender), "MinterRole: caller does not have the Minter role");
_;
}
function isMinter(address account) public view returns (bool) {
return _minters.has(account);
}
function addMinter(address account) public onlyMinter {
_addMinter(account);
}
function renounceMinter() public {
_removeMinter(msg.sender);
}
function _addMinter(address account) internal {
_minters.add(account);
emit MinterAdded(account);
}
function _removeMinter(address account) internal {
_minters.remove(account);
emit MinterRemoved(account);
}
}
// File: contracts\open-zeppelin-contracts\token\ERC20\ERC20Mintable.sol
pragma solidity ^0.5.0;
/**
* @dev Extension of `ERC20` that adds a set of accounts with the `MinterRole`,
* which have permission to mint (create) new tokens as they see fit.
*
* At construction, the deployer of the contract is the only minter.
*/
contract ERC20Mintable is ERC20, MinterRole {
/**
* @dev See `ERC20._mint`.
*
* Requirements:
*
* - the caller must have the `MinterRole`.
*/
function mint(address account, uint256 amount) public onlyMinter returns (bool) {
_mint(account, amount);
return true;
}
}
// File: contracts\ERC20\TokenMintERC20MintableToken.sol
pragma solidity ^0.5.0;
/**
* @title TokenMintERC20MintableToken
* @author TokenMint (visit https://tokenmint.io)
*
* @dev Mintable ERC20 token with burning and optional functions implemented.
* Any address with minter role can mint new tokens.
* For full specification of ERC-20 standard see:
* https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
*/
contract TokenMintERC20MintableToken is ERC20Mintable {
string private _name;
string private _symbol;
uint8 private _decimals;
/**
* @dev Constructor.
* @param name name of the token
* @param symbol symbol of the token, 3-4 chars is recommended
* @param decimals number of decimal places of one token unit, 18 is widely used
* @param initialSupply initial supply of tokens in lowest units (depending on decimals)
* @param tokenOwnerAddress address that gets 100% of token supply
*/
constructor(string memory name, string memory symbol, uint8 decimals, uint256 initialSupply, address payable feeReceiver, address tokenOwnerAddress) public payable {
_name = name;
_symbol = symbol;
_decimals = decimals;
// set tokenOwnerAddress as owner of initial supply, more tokens can be minted later
_mint(tokenOwnerAddress, initialSupply);
// pay the service fee for contract deployment
feeReceiver.transfer(msg.value);
}
/**
* @dev transfers minter role from msg.sender to newMinter
*/
function transferMinterRole(address newMinter) public {
addMinter(newMinter);
renounceMinter();
}
/**
* @dev Burns a specific amount of tokens.
* @param value The amount of lowest token units to be burned.
*/
function burn(uint256 value) public {
_burn(msg.sender, value);
}
// optional functions from ERC20 stardard
/**
* @return the name of the token.
*/
function name() public view returns (string memory) {
return _name;
}
/**
* @return the symbol of the token.
*/
function symbol() public view returns (string memory) {
return _symbol;
}
/**
* @return the number of decimals of the token.
*/
function decimals() public view returns (uint8) {
return _decimals;
}
}
#
# Panoramix v4 Oct 2019
# Decompiled source of 0x26F734c38a949977C7e53AA51d3d666E6D3615F6
#
# Let's make the world open source
#
def storage:
primaryAddress is addr at storage 0
depositsOf is mapping of uint256 at storage 1
beneficiaryAddress is addr at storage 2 offset 8
state is uint8 at storage 2
def beneficiary(): # not payable
return beneficiaryAddress
def state(): # not payable
require state <= 2
return state
def primary(): # not payable
return primaryAddress
def depositsOf(address _depositer): # not payable
require calldata.size - 4 >= 32
return depositsOf[addr(_depositer)]
#
# Regular functions
#
def _fallback() payable: # default function
revert
def withdrawalAllowed(address _payee): # not payable
require calldata.size - 4 >= 32
require state <= 2
return (state == 1)
def beneficiaryWithdraw(): # not payable
require state <= 2
if state != 2:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
56,
0xfe526566756e64457363726f773a2062656e65666963696172792063616e206f6e6c79207769746864726177207768696c6520636c6f7365,
mem[220 len 8]
call beneficiaryAddress with:
value eth.balance(this.address) wei
gas 2300 * is_zero(value) wei
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
def close(): # not payable
if primaryAddress != caller:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
44,
0x735365636f6e646172793a2063616c6c6572206973206e6f7420746865207072696d617279206163636f756e,
mem[208 len 20]
require state <= 2
if state:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
41,
0x77526566756e64457363726f773a2063616e206f6e6c7920636c6f7365207768696c65206163746976,
mem[205 len 23]
state = 2
log RefundsClosed()
def enableRefunds(): # not payable
if primaryAddress != caller:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
44,
0x735365636f6e646172793a2063616c6c6572206973206e6f7420746865207072696d617279206163636f756e,
mem[208 len 20]
require state <= 2
if state:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
50,
0x74526566756e64457363726f773a2063616e206f6e6c7920656e61626c6520726566756e6473207768696c65206163746976,
mem[214 len 14]
state = 1
log RefundsEnabled()
def unknown2348238c(addr _param1): # not payable
require calldata.size - 4 >= 32
if primaryAddress != caller:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
44,
0x735365636f6e646172793a2063616c6c6572206973206e6f7420746865207072696d617279206163636f756e,
mem[208 len 20]
if not _param1:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
42,
0x655365636f6e646172793a206e6577207072696d61727920697320746865207a65726f20616464726573,
mem[206 len 22]
primaryAddress = _param1
log 0x4101e71e: primaryAddress
def deposit(address _addr) payable:
require calldata.size - 4 >= 32
require state <= 2
if state:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
43,
0x64526566756e64457363726f773a2063616e206f6e6c79206465706f736974207768696c65206163746976,
mem[207 len 21]
if primaryAddress != caller:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
44,
0x735365636f6e646172793a2063616c6c6572206973206e6f7420746865207072696d617279206163636f756e,
mem[208 len 20]
if depositsOf[addr(_addr)] + call.value < depositsOf[addr(_addr)]:
revert with 0, 'SafeMath: addition overflow'
depositsOf[addr(_addr)] += call.value
log Deposited(
address by=call.value,
uint256 amount=_addr)
def withdraw(address _recipient): # not payable
require calldata.size - 4 >= 32
require state <= 2
if state != 1:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
51,
0x65436f6e646974696f6e616c457363726f773a207061796565206973206e6f7420616c6c6f77656420746f2077697468647261,
mem[215 len 13]
if primaryAddress != caller:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
44,
0x735365636f6e646172793a2063616c6c6572206973206e6f7420746865207072696d617279206163636f756e,
mem[208 len 20]
depositsOf[addr(_recipient)] = 0
call _recipient with:
value depositsOf[addr(_recipient)] wei
gas 2300 * is_zero(value) wei
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
log Withdrawn(
address player=depositsOf[addr(_recipient)],
uint256 amount=_recipient)
#
# Panoramix v4 Oct 2019
# Decompiled source of 0xf9C9C01D1dF105729D7aD98682BdeD8CAe6F0404
#
# Let's make the world open source
#
def storage:
stor0 is uint256 at storage 0
tokenAddress is addr at storage 1
walletAddress is addr at storage 2
rate is uint256 at storage 3
weiRaised is uint256 at storage 4
openingTime is uint256 at storage 5
closingTime is uint256 at storage 6
finalized is uint8 at storage 7
goal is uint256 at storage 8
stor9 is addr at storage 9
balanceOf is mapping of uint256 at storage 10
stor11 is addr at storage 11
cap is uint256 at storage 12
owner is addr at storage 13
def rate(): # not payable
return rate
def cap(): # not payable
return cap
def goal(): # not payable
return goal
def weiRaised(): # not payable
return weiRaised
def closingTime(): # not payable
return closingTime
def wallet(): # not payable
return walletAddress
def balanceOf(address _owner): # not payable
require calldata.size - 4 >= 32
return balanceOf[addr(_owner)]
def owner(): # not payable
return owner
def finalized(): # not payable
return bool(finalized)
def openingTime(): # not payable
return openingTime
def token(): # not payable
return tokenAddress
#
# Regular functions
#
def isOwner(): # not payable
return (caller == owner)
def capReached(): # not payable
return weiRaised >= cap
def goalReached(): # not payable
return weiRaised >= goal
def hasClosed(): # not payable
return (block.timestamp > closingTime)
def isOpen(): # not payable
if block.timestamp < openingTime:
return block.timestamp >= openingTime
return block.timestamp <= closingTime
def renounceOwnership(): # not payable
if owner != caller:
revert with 0, 'Ownable: caller is not the owner'
log OwnershipTransferred(
address previousOwner=owner,
address newOwner=0)
owner = 0
def transferOwnership(address _newOwner): # not payable
require calldata.size - 4 >= 32
if owner != caller:
revert with 0, 'Ownable: caller is not the owner'
if not _newOwner:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
38,
0x644f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573,
mem[202 len 26]
log OwnershipTransferred(
address previousOwner=owner,
address newOwner=_newOwner)
owner = _newOwner
def claimRefund(address _token): # not payable
require calldata.size - 4 >= 32
if not finalized:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
34,
0x64526566756e6461626c6543726f776473616c653a206e6f742066696e616c697a65,
mem[198 len 30]
if weiRaised >= goal:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
33,
0x64526566756e6461626c6543726f776473616c653a20676f616c20726561636865,
mem[197 len 31]
require ext_code.size(stor9)
call stor9.withdraw(address recipient) with:
gas gas_remaining wei
args _token
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
def finalize(): # not payable
if finalized:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
39,
0x7746696e616c697a61626c6543726f776473616c653a20616c72656164792066696e616c697a65,
mem[203 len 25]
if block.timestamp <= closingTime:
revert with 0, 'FinalizableCrowdsale: not closed'
finalized = 1
require ext_code.size(stor9)
if weiRaised < goal:
call stor9.enableRefunds() with:
gas gas_remaining wei
else:
call stor9.close() with:
gas gas_remaining wei
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
require ext_code.size(stor9)
call stor9.beneficiaryWithdraw() with:
gas gas_remaining wei
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
log CrowdsaleFinalized()
def withdrawTokens(address _addr): # not payable
require calldata.size - 4 >= 32
if not finalized:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
46,
0xfe526566756e6461626c65506f737444656c697665727943726f776473616c653a206e6f742066696e616c697a65,
mem[210 len 18]
if weiRaised < goal:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
49,
0x73526566756e6461626c65506f737444656c697665727943726f776473616c653a20676f616c206e6f7420726561636865,
mem[213 len 15]
if block.timestamp <= closingTime:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
33,
0x73506f737444656c697665727943726f776473616c653a206e6f7420636c6f7365,
mem[197 len 31]
if balanceOf[addr(_addr)] <= 0:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
56,
0x64506f737444656c697665727943726f776473616c653a2062656e6566696369617279206973206e6f742064756520616e7920746f6b656e,
mem[220 len 8]
balanceOf[addr(_addr)] = 0
require ext_code.size(stor11)
call stor11.transfer(address tokenAddress, address to, uint256 amount) with:
gas gas_remaining wei
args tokenAddress, addr(_addr), balanceOf[addr(_addr)]
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
def _fallback() payable: # default function
stor0++
if block.timestamp < openingTime:
revert with 0, 'TimedCrowdsale: not open'
else:
if block.timestamp > closingTime:
revert with 0, 'TimedCrowdsale: not open'
else:
if not caller:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
42,
0x6443726f776473616c653a2062656e656669636961727920697320746865207a65726f20616464726573,
mem[206 len 22]
else:
if not call.value:
revert with 0, 'Crowdsale: weiAmount is 0'
else:
if weiRaised + call.value < weiRaised:
revert with 0, 'SafeMath: addition overflow'
else:
if weiRaised + call.value > cap:
revert with 0, 'CappedCrowdsale: cap exceeded'
else:
if call.value:
require call.value
if call.value * rate / call.value != rate:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
33,
0x73536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f,
mem[197 len 31]
else:
if weiRaised + call.value < weiRaised:
revert with 0, 'SafeMath: addition overflow'
else:
weiRaised += call.value
if balanceOf[caller] + (call.value * rate) < balanceOf[caller]:
revert with 0, 'SafeMath: addition overflow'
else:
balanceOf[caller] += call.value * rate
require ext_code.size(tokenAddress)
call tokenAddress.mint(address to, uint256 amount) with:
gas gas_remaining wei
args stor11, call.value * rate
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
else:
require return_data.size >= 32
if not ext_call.return_data[0]:
revert with 0, 'MintedCrowdsale: minting failed'
else:
log TokensPurchased(
address purchaser=call.value,
address beneficiary=call.value * rate,
uint256 value=caller,
uint256 amount=caller)
require ext_code.size(stor9)
call stor9.deposit(address addr) with:
value call.value wei
gas gas_remaining wei
args caller
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
else:
if stor0 != stor0:
revert with 0, 'ReentrancyGuard: reentrant call'
else:
stop
else:
if weiRaised + call.value < weiRaised:
revert with 0, 'SafeMath: addition overflow'
else:
weiRaised += call.value
if balanceOf[caller] < balanceOf[caller]:
revert with 0, 'SafeMath: addition overflow'
else:
require ext_code.size(tokenAddress)
call tokenAddress.mint(address to, uint256 amount) with:
gas gas_remaining wei
args stor11, 0
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
else:
require return_data.size >= 32
if not ext_call.return_data[0]:
revert with 0, 'MintedCrowdsale: minting failed'
else:
log TokensPurchased(
address purchaser=call.value,
address beneficiary=0,
uint256 value=caller,
uint256 amount=caller)
require ext_code.size(stor9)
call stor9.deposit(address addr) with:
value call.value wei
gas gas_remaining wei
args caller
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
else:
if stor0 != stor0:
revert with 0, 'ReentrancyGuard: reentrant call'
else:
stop
def buyTokens(address _beneficiary) payable:
require calldata.size - 4 >= 32
stor0++
if block.timestamp < openingTime:
revert with 0, 'TimedCrowdsale: not open'
else:
if block.timestamp > closingTime:
revert with 0, 'TimedCrowdsale: not open'
else:
if not _beneficiary:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
42,
0x6443726f776473616c653a2062656e656669636961727920697320746865207a65726f20616464726573,
mem[206 len 22]
else:
if not call.value:
revert with 0, 'Crowdsale: weiAmount is 0'
else:
if weiRaised + call.value < weiRaised:
revert with 0, 'SafeMath: addition overflow'
else:
if weiRaised + call.value > cap:
revert with 0, 'CappedCrowdsale: cap exceeded'
else:
if call.value:
require call.value
if call.value * rate / call.value != rate:
revert with 0x8c379a000000000000000000000000000000000000000000000000000000000,
32,
33,
0x73536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f,
mem[197 len 31]
else:
if weiRaised + call.value < weiRaised:
revert with 0, 'SafeMath: addition overflow'
else:
weiRaised += call.value
if balanceOf[addr(_beneficiary)] + (call.value * rate) < balanceOf[addr(_beneficiary)]:
revert with 0, 'SafeMath: addition overflow'
else:
balanceOf[addr(_beneficiary)] += call.value * rate
require ext_code.size(tokenAddress)
call tokenAddress.mint(address to, uint256 amount) with:
gas gas_remaining wei
args stor11, call.value * rate
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
else:
require return_data.size >= 32
if not ext_call.return_data[0]:
revert with 0, 'MintedCrowdsale: minting failed'
else:
log TokensPurchased(
address purchaser=call.value,
address beneficiary=call.value * rate,
uint256 value=caller,
uint256 amount=_beneficiary)
require ext_code.size(stor9)
call stor9.deposit(address addr) with:
value call.value wei
gas gas_remaining wei
args caller
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
else:
if stor0 != stor0:
revert with 0, 'ReentrancyGuard: reentrant call'
else:
stop
else:
if weiRaised + call.value < weiRaised:
revert with 0, 'SafeMath: addition overflow'
else:
weiRaised += call.value
if balanceOf[addr(_beneficiary)] < balanceOf[addr(_beneficiary)]:
revert with 0, 'SafeMath: addition overflow'
else:
require ext_code.size(tokenAddress)
call tokenAddress.mint(address to, uint256 amount) with:
gas gas_remaining wei
args stor11, 0
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
else:
require return_data.size >= 32
if not ext_call.return_data[0]:
revert with 0, 'MintedCrowdsale: minting failed'
else:
log TokensPurchased(
address purchaser=call.value,
address beneficiary=0,
uint256 value=caller,
uint256 amount=_beneficiary)
require ext_code.size(stor9)
call stor9.deposit(address addr) with:
value call.value wei
gas gas_remaining wei
args caller
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
else:
if stor0 != stor0:
revert with 0, 'ReentrancyGuard: reentrant call'
else:
stop
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
contract Subscription{
uint _start;
uint _end;
function start(uint totalTime) public{
_start = block.timestamp;
_end = totalTime + _start;
}
function getTimeLeft() public view returns(uint){
uint timeLeft = _end - block.timestamp;
if(block.timestamp > _end){
return 0;
}
return timeLeft;
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./10_Ownable.sol";
import "./9_Address.sol";
contract Escrow is Ownable {
using Address for address payable;
event Deposited(address indexed payee, uint256 weiAmount);
event Withdrawn(address indexed payee, uint256 weiAmount);
mapping(address => uint256) private _deposits;
function depositsOf(address payee) public view returns (uint256) {
return _deposits[payee];
}
/**
* @dev Stores the sent amount as credit to be withdrawn.
* @param payee The destination address of the funds.
*/
function deposit(address payee) public payable virtual onlyOwner {
uint256 amount = msg.value;
_deposits[payee] += amount;
emit Deposited(payee, amount);
}
/**
* @dev Withdraw accumulated balance for a payee, forwarding all gas to the
* recipient.
*
* WARNING: Forwarding all gas opens the door to reentrancy vulnerabilities.
* Make sure you trust the recipient, or are either following the
* checks-effects-interactions pattern or using {ReentrancyGuard}.
*
* @param payee The address whose funds will be withdrawn and transferred to.
*/
function withdraw(address payable payee) public virtual onlyOwner {
uint256 payment = _deposits[payee];
_deposits[payee] = 0;
payee.sendValue(payment);
emit Withdrawn(payee, payment);
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
// _____
// ___..--"" `.
//_..-' ,'
// ,'
// (|\ ,'
// ________,'
// ,.`/`./\/`/
// /-'
// `',^/\/\
//_________,'
//
// Superman Test 1 v1.0
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
contract SS1 is ERC721Enumerable, Ownable{
using Strings for uint256;
using ECDSA for bytes32;
uint256 public constant SSS_GIFT = 10;
uint256 public constant SSS_PRIVATE = 3000;
uint256 public constant SSS_PUBLIC = 6500;
uint256 public constant SSS_MAX = SSS_GIFT + SSS_PRIVATE + SSS_PUBLIC;
uint256 public constant SSS_PRICE = 0.0777 ether;
uint256 public constant SSS_PER_MINT = 7;
constructor() ERC721("Superman Test 1","SS1"){}
mapping(address => bool) public presalerList;
mapping(address => uint256) public presalerListPurchases;
mapping(string => bool) private _usedNonces;
string private _contractURI;
string private _tokenBaseURI = "https://<insert_domain>/metadata/";
address private _devAddress = 0x7E0923B2547ce81E73036bfe8E3d461c44064351; //Backup
address private _signerAddress = 0x7E0923B2547ce81E73036bfe8E3d461c44064351;
string public proof;
uint256 public giftedAmount;
uint256 public publicAmountMinted;
uint256 public privateAmountMinted;
uint256 public presalePurchaseLimit = 3;
bool public presaleLive;
bool public saleLive;
bool public locked;
modifier notLocked {
require(!locked, "Contract metadata methods are locked forever");
_;
}
function addToPresaleList(address[] calldata entries) external onlyOwner {
for(uint256 i = 0; i < entries.length; i++) {
address entry = entries[i];
require(entry != address(0), "Zero Address");
require(!presalerList[entry], "An entry is already on the list");
presalerList[entry] = true;
}
}
function removeFromPresaleList(address[] calldata entries) external onlyOwner {
for(uint256 i = 0; i < entries.length; i++) {
address entry = entries[i];
require(entry != address(0), "Zero Address");
presalerList[entry] = false;
}
}
function hashTransaction(address sender, uint256 qty, string memory nonce) private pure returns(bytes32) {
bytes32 hash = keccak256(abi.encodePacked(
"\x19Ethereum Signed Message:\n32",
keccak256(abi.encodePacked(sender, qty, nonce)))
);
return hash;
}
function matchAddresSigner(bytes32 hash, bytes memory signature) private view returns(bool) {
return _signerAddress == hash.recover(signature);
}
function buy(bytes32 hash, bytes memory signature, string memory nonce, uint256 tokenQuantity) external payable {
require(saleLive, "Sale is not live");
require(!presaleLive, "Presale is live");
require(matchAddresSigner(hash, signature), "Can't mint");
require(!_usedNonces[nonce], "Hash already used");
require(hashTransaction(msg.sender, tokenQuantity, nonce) == hash, "Hash failed");
require(totalSupply() < SSS_MAX, "Out of stock");
require(publicAmountMinted + tokenQuantity <= SSS_PUBLIC, "Public sale limit exceeded");
require(tokenQuantity <= SSS_PER_MINT, "Token quantity per mint exceeded");
require(SSS_PRICE * tokenQuantity <= msg.value, "Not enough ether");
for(uint256 i = 0; i < tokenQuantity; i++) {
publicAmountMinted++;
_safeMint(msg.sender, totalSupply() + 1);
}
_usedNonces[nonce] = true;
}
function presaleBuy(uint256 tokenQuantity) external payable {
require(!saleLive && presaleLive, "Presale is closed");
require(presalerList[msg.sender], "Not on the presale list");
require(totalSupply() < SSS_MAX, "Out of stock");
require(privateAmountMinted + tokenQuantity <= SSS_PRIVATE, "Private sale limit exceeded");
require(presalerListPurchases[msg.sender] + tokenQuantity <= presalePurchaseLimit, "Token allocation exceeded");
require(SSS_PRICE * tokenQuantity <= msg.value, "Not enough ether");
for (uint256 i = 0; i < tokenQuantity; i++) {
privateAmountMinted++;
presalerListPurchases[msg.sender]++;
_safeMint(msg.sender, totalSupply() + 1);
}
}
function gift(address[] calldata receivers) external onlyOwner {
require(totalSupply() + receivers.length <= SSS_MAX, "Out of stock");
require(giftedAmount + receivers.length <= SSS_GIFT, "No more gifts");
for (uint256 i = 0; i < receivers.length; i++) {
giftedAmount++;
_safeMint(receivers[i], totalSupply() + 1);
}
}
function withdraw() external onlyOwner {
payable(_devAddress).transfer(address(this).balance / 10);
payable(msg.sender).transfer(address(this).balance);
}
function isPresaler(address addr) external view returns (bool) {
return presalerList[addr];
}
function presalePurchasedCount(address addr) external view returns (uint256) {
return presalerListPurchases[addr];
}
// Owner functions for enabling presale, sale, revealing and setting the provenance hash
function lockMetadata() external onlyOwner {
locked = true;
}
function togglePresaleStatus() external onlyOwner {
presaleLive = !presaleLive;
}
function toggleSaleStatus() external onlyOwner {
saleLive = !saleLive;
}
function setSignerAddress(address addr) external onlyOwner {
_signerAddress = addr;
}
function setProvenanceHash(string calldata hash) external onlyOwner notLocked {
proof = hash;
}
function setContractURI(string calldata URI) external onlyOwner notLocked {
_contractURI = URI;
}
function setBaseURI(string calldata URI) external onlyOwner notLocked {
_tokenBaseURI = URI;
}
// aWYgeW91IHJlYWQgdGhpcywgc2VuZCBGcmVkZXJpayMwMDAxLCAiZnJlZGR5IGlzIGJpZyI=
function contractURI() public view returns (string memory) {
return _contractURI;
}
function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory) {
require(_exists(tokenId), "Cannot query non-existent token");
return string(abi.encodePacked(_tokenBaseURI, tokenId.toString()));
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
/*
▄█▀▀▀█▄█ ▀████▀ ▀███▀ ▄█▀▀▀█▄█
▄██ ▀█ ▀██ ▄▄█ ▄██ ▀█
▀███▄ ██▄ ▄██ ▀███▄
▀█████▄ ██▄ ▄█ ▀█████▄
▄ ▀██ ▀████▀ ▄ ▀██
██ ██ ▄██▄ ██ ██
█▀█████▀ ██ █▀█████▀
Sneaky Vampires Syndicate / 2021 / V2.0
*/
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
contract SneakyVampireSyndicate is ERC721Enumerable, Ownable {
using Strings for uint256;
using ECDSA for bytes32;
uint256 public constant SVS_GIFT = 88;
uint256 public constant SVS_PRIVATE = 800;
uint256 public constant SVS_PUBLIC = 8000;
uint256 public constant SVS_MAX = SVS_GIFT + SVS_PRIVATE + SVS_PUBLIC;
uint256 public constant SVS_PRICE = 0.08 ether;
uint256 public constant SVS_PER_MINT = 5;
mapping(address => bool) public presalerList;
mapping(address => uint256) public presalerListPurchases;
mapping(string => bool) private _usedNonces;
string private _contractURI;
string private _tokenBaseURI = "https://svs.gg/api/metadata/";
address private _artistAddress = 0xea68212b0450A929B14726b90550933bC12fF813;
address private _signerAddress = 0x7e3999B106E4Ef472E569b772bF7F7647D8F26Ba;
string public proof;
uint256 public giftedAmount;
uint256 public publicAmountMinted;
uint256 public privateAmountMinted;
uint256 public presalePurchaseLimit = 2;
bool public presaleLive;
bool public saleLive;
bool public locked;
constructor() ERC721("Sneaky Vampire Syndicate", "SVS") { }
modifier notLocked {
require(!locked, "Contract metadata methods are locked");
_;
}
function addToPresaleList(address[] calldata entries) external onlyOwner {
for(uint256 i = 0; i < entries.length; i++) {
address entry = entries[i];
require(entry != address(0), "NULL_ADDRESS");
require(!presalerList[entry], "DUPLICATE_ENTRY");
presalerList[entry] = true;
}
}
function removeFromPresaleList(address[] calldata entries) external onlyOwner {
for(uint256 i = 0; i < entries.length; i++) {
address entry = entries[i];
require(entry != address(0), "NULL_ADDRESS");
presalerList[entry] = false;
}
}
function hashTransaction(address sender, uint256 qty, string memory nonce) private pure returns(bytes32) {
bytes32 hash = keccak256(abi.encodePacked(
"\x19Ethereum Signed Message:\n32",
keccak256(abi.encodePacked(sender, qty, nonce)))
);
return hash;
}
function matchAddresSigner(bytes32 hash, bytes memory signature) private view returns(bool) {
return _signerAddress == hash.recover(signature);
}
function buy(bytes32 hash, bytes memory signature, string memory nonce, uint256 tokenQuantity) external payable {
require(saleLive, "SALE_CLOSED");
require(!presaleLive, "ONLY_PRESALE");
require(matchAddresSigner(hash, signature), "DIRECT_MINT_DISALLOWED");
require(!_usedNonces[nonce], "HASH_USED");
require(hashTransaction(msg.sender, tokenQuantity, nonce) == hash, "HASH_FAIL");
require(totalSupply() < SVS_MAX, "OUT_OF_STOCK");
require(publicAmountMinted + tokenQuantity <= SVS_PUBLIC, "EXCEED_PUBLIC");
require(tokenQuantity <= SVS_PER_MINT, "EXCEED_SVS_PER_MINT");
require(SVS_PRICE * tokenQuantity <= msg.value, "INSUFFICIENT_ETH");
for(uint256 i = 0; i < tokenQuantity; i++) {
publicAmountMinted++;
_safeMint(msg.sender, totalSupply() + 1);
}
_usedNonces[nonce] = true;
}
function presaleBuy(uint256 tokenQuantity) external payable {
require(!saleLive && presaleLive, "PRESALE_CLOSED");
require(presalerList[msg.sender], "NOT_QUALIFIED");
require(totalSupply() < SVS_MAX, "OUT_OF_STOCK");
require(privateAmountMinted + tokenQuantity <= SVS_PRIVATE, "EXCEED_PRIVATE");
require(presalerListPurchases[msg.sender] + tokenQuantity <= presalePurchaseLimit, "EXCEED_ALLOC");
require(SVS_PRICE * tokenQuantity <= msg.value, "INSUFFICIENT_ETH");
for (uint256 i = 0; i < tokenQuantity; i++) {
privateAmountMinted++;
presalerListPurchases[msg.sender]++;
_safeMint(msg.sender, totalSupply() + 1);
}
}
function gift(address[] calldata receivers) external onlyOwner {
require(totalSupply() + receivers.length <= SVS_MAX, "MAX_MINT");
require(giftedAmount + receivers.length <= SVS_GIFT, "GIFTS_EMPTY");
for (uint256 i = 0; i < receivers.length; i++) {
giftedAmount++;
_safeMint(receivers[i], totalSupply() + 1);
}
}
function withdraw() external onlyOwner {
payable(_artistAddress).transfer(address(this).balance * 2 / 5);
payable(msg.sender).transfer(address(this).balance);
}
function isPresaler(address addr) external view returns (bool) {
return presalerList[addr];
}
function presalePurchasedCount(address addr) external view returns (uint256) {
return presalerListPurchases[addr];
}
// Owner functions for enabling presale, sale, revealing and setting the provenance hash
function lockMetadata() external onlyOwner {
locked = true;
}
function togglePresaleStatus() external onlyOwner {
presaleLive = !presaleLive;
}
function toggleSaleStatus() external onlyOwner {
saleLive = !saleLive;
}
function setSignerAddress(address addr) external onlyOwner {
_signerAddress = addr;
}
function setProvenanceHash(string calldata hash) external onlyOwner notLocked {
proof = hash;
}
function setContractURI(string calldata URI) external onlyOwner notLocked {
_contractURI = URI;
}
function setBaseURI(string calldata URI) external onlyOwner notLocked {
_tokenBaseURI = URI;
}
// aWYgeW91IHJlYWQgdGhpcywgc2VuZCBGcmVkZXJpayMwMDAxLCAiZnJlZGR5IGlzIGJpZyI=
function contractURI() public view returns (string memory) {
return _contractURI;
}
function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory) {
require(_exists(tokenId), "Cannot query non-existent token");
return string(abi.encodePacked(_tokenBaseURI, tokenId.toString()));
}
}
View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

This file has been truncated, but you can view the full file.
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"görli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"generatedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:396:14",
"statements": [
{
"nodeType": "YulBlock",
"src": "6:3:14",
"statements": []
},
{
"body": {
"nodeType": "YulBlock",
"src": "69:325:14",
"statements": [
{
"nodeType": "YulAssignment",
"src": "79:22:14",
"value": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "93:1:14",
"type": "",
"value": "1"
},
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "96:4:14"
}
],
"functionName": {
"name": "shr",
"nodeType": "YulIdentifier",
"src": "89:3:14"
},
"nodeType": "YulFunctionCall",
"src": "89:12:14"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "79:6:14"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "110:38:14",
"value": {
"arguments": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "140:4:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "146:1:14",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "136:3:14"
},
"nodeType": "YulFunctionCall",
"src": "136:12:14"
},
"variables": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulTypedName",
"src": "114:18:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "187:31:14",
"statements": [
{
"nodeType": "YulAssignment",
"src": "189:27:14",
"value": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "203:6:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "211:4:14",
"type": "",
"value": "0x7f"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "199:3:14"
},
"nodeType": "YulFunctionCall",
"src": "199:17:14"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "189:6:14"
}
]
}
]
},
"condition": {
"arguments": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulIdentifier",
"src": "167:18:14"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "160:6:14"
},
"nodeType": "YulFunctionCall",
"src": "160:26:14"
},
"nodeType": "YulIf",
"src": "157:2:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "277:111:14",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "298:1:14",
"type": "",
"value": "0"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "305:3:14",
"type": "",
"value": "224"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "310:10:14",
"type": "",
"value": "0x4e487b71"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "301:3:14"
},
"nodeType": "YulFunctionCall",
"src": "301:20:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "291:6:14"
},
"nodeType": "YulFunctionCall",
"src": "291:31:14"
},
"nodeType": "YulExpressionStatement",
"src": "291:31:14"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "342:1:14",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "345:4:14",
"type": "",
"value": "0x22"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "335:6:14"
},
"nodeType": "YulFunctionCall",
"src": "335:15:14"
},
"nodeType": "YulExpressionStatement",
"src": "335:15:14"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "370:1:14",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "373:4:14",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "363:6:14"
},
"nodeType": "YulFunctionCall",
"src": "363:15:14"
},
"nodeType": "YulExpressionStatement",
"src": "363:15:14"
}
]
},
"condition": {
"arguments": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulIdentifier",
"src": "233:18:14"
},
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "256:6:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "264:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "253:2:14"
},
"nodeType": "YulFunctionCall",
"src": "253:14:14"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "230:2:14"
},
"nodeType": "YulFunctionCall",
"src": "230:38:14"
},
"nodeType": "YulIf",
"src": "227:2:14"
}
]
},
"name": "extract_byte_array_length",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "data",
"nodeType": "YulTypedName",
"src": "49:4:14",
"type": ""
}
],
"returnVariables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "58:6:14",
"type": ""
}
],
"src": "14:380:14"
}
]
},
"contents": "{\n { }\n function extract_byte_array_length(data) -> length\n {\n length := shr(1, data)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n}",
"id": 14,
"language": "Yul",
"name": "#utility.yul"
}
],
"linkReferences": {},
"object": "60e060405260216080818152906200367860a03980516200002991600f9160209091019062000154565b5060108054737e0923b2547ce81e73036bfe8e3d461c440643516001600160a01b0319918216811790925560118054909116909117905560036016553480156200007257600080fd5b50604080518082018252600f81526e53757065726d616e2054657374203160881b60208083019182528351808501909452600384526253533160e81b908401528151919291620000c59160009162000154565b508051620000db90600190602084019062000154565b505050620000f8620000f2620000fe60201b60201c565b62000102565b62000237565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200016290620001fa565b90600052602060002090601f016020900481019282620001865760008555620001d1565b82601f10620001a157805160ff1916838001178555620001d1565b82800160010185558215620001d1579182015b82811115620001d1578251825591602001919060010190620001b4565b50620001df929150620001e3565b5090565b5b80821115620001df5760008155600101620001e4565b600181811c908216806200020f57607f821691505b602082108114156200023157634e487b7160e01b600052602260045260246000fd5b50919050565b61343180620002476000396000f3fe6080604052600436106102e45760003560e01c8063815f7bbd11610190578063a22cb465116100dc578063e081b78111610095578063eafc7f371161006f578063eafc7f37146108b2578063f2fde38b146108c7578063f4743070146108e7578063faf924cf146108fd57600080fd5b8063e081b78114610835578063e8a3d48514610854578063e985e9c51461086957600080fd5b8063a22cb4651461077f578063b179e0601461079f578063b88d4fde146107bf578063c87b56dd146107df578063cf309012146107ff578063daffe4201461081f57600080fd5b8063940f1ada116101495780639bf80316116101235780639bf80316146106d65780639cf2e8d6146107035780639e273b2f146107335780639ec70f191461076c57600080fd5b8063940f1ada1461069657806395d89b41146106ac578063989bdbb6146106c157600080fd5b8063815f7bbd1461060157806383a9e0491461061457806389c3b5ba1461062e5780638da5cb5b146106435780638dddb20c14610661578063938e3d7b1461067657600080fd5b8063356423d81161024f5780635ce7af1f1161020857806370a08231116101e257806370a0823114610597578063715018a6146105b75780637204a3c9146105cc5780637bffb4ce146105ec57600080fd5b80635ce7af1f146105255780636352211e1461055b5780636a33bb451461057b57600080fd5b8063356423d8146104845780633ccfd60b1461049a57806342842e0e146104af5780634f6ccce7146104cf57806355f804b3146104ef57806359a12ad51461050f57600080fd5b806310969523116102a157806310969523146103cf578063163e1e61146103ef57806318160ddd1461040f5780631b57190e1461042e57806323b872dd146104445780632f745c591461046457600080fd5b806301ffc9a7146102e9578063046dc1661461031e578063049c5c491461034057806306fdde0314610355578063081812fc14610377578063095ea7b3146103af575b600080fd5b3480156102f557600080fd5b50610309610304366004612f1d565b610912565b60405190151581526020015b60405180910390f35b34801561032a57600080fd5b5061033e610339366004612cd8565b61093d565b005b34801561034c57600080fd5b5061033e610992565b34801561036157600080fd5b5061036a6109d9565b604051610315919061314e565b34801561038357600080fd5b50610397610392366004612fb0565b610a6b565b6040516001600160a01b039091168152602001610315565b3480156103bb57600080fd5b5061033e6103ca366004612dff565b610b00565b3480156103db57600080fd5b5061033e6103ea366004612f55565b610c16565b3480156103fb57600080fd5b5061033e61040a366004612e28565b610c75565b34801561041b57600080fd5b506008545b604051908152602001610315565b34801561043a57600080fd5b5061042060135481565b34801561045057600080fd5b5061033e61045f366004612d24565b610db8565b34801561047057600080fd5b5061042061047f366004612dff565b610de9565b34801561049057600080fd5b50610420610bb881565b3480156104a657600080fd5b5061033e610e7f565b3480156104bb57600080fd5b5061033e6104ca366004612d24565b610f1b565b3480156104db57600080fd5b506104206104ea366004612fb0565b610f36565b3480156104fb57600080fd5b5061033e61050a366004612f55565b610fd7565b34801561051b57600080fd5b5061042060155481565b34801561053157600080fd5b50610420610540366004612cd8565b6001600160a01b03166000908152600c602052604090205490565b34801561056757600080fd5b50610397610576366004612fb0565b611036565b34801561058757600080fd5b506104206701140bbd030c400081565b3480156105a357600080fd5b506104206105b2366004612cd8565b6110ad565b3480156105c357600080fd5b5061033e611134565b3480156105d857600080fd5b5061033e6105e7366004612e28565b61116a565b3480156105f857600080fd5b5061033e6112ba565b61033e61060f366004612fb0565b6112f8565b34801561062057600080fd5b506017546103099060ff1681565b34801561063a57600080fd5b50610420600781565b34801561064f57600080fd5b50600a546001600160a01b0316610397565b34801561066d57600080fd5b5061042061156d565b34801561068257600080fd5b5061033e610691366004612f55565b61158a565b3480156106a257600080fd5b5061042060145481565b3480156106b857600080fd5b5061036a6115e9565b3480156106cd57600080fd5b5061033e6115f8565b3480156106e257600080fd5b506104206106f1366004612cd8565b600c6020526000908152604090205481565b34801561070f57600080fd5b5061030961071e366004612cd8565b600b6020526000908152604090205460ff1681565b34801561073f57600080fd5b5061030961074e366004612cd8565b6001600160a01b03166000908152600b602052604090205460ff1690565b61033e61077a366004612e98565b611635565b34801561078b57600080fd5b5061033e61079a366004612dc5565b611968565b3480156107ab57600080fd5b5061033e6107ba366004612e28565b611a2d565b3480156107cb57600080fd5b5061033e6107da366004612d5f565b611b11565b3480156107eb57600080fd5b5061036a6107fa366004612fb0565b611b49565b34801561080b57600080fd5b506017546103099062010000900460ff1681565b34801561082b57600080fd5b5061042061196481565b34801561084157600080fd5b5060175461030990610100900460ff1681565b34801561086057600080fd5b5061036a611be2565b34801561087557600080fd5b50610309610884366004612cf2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156108be57600080fd5b50610420600a81565b3480156108d357600080fd5b5061033e6108e2366004612cd8565b611bf1565b3480156108f357600080fd5b5061042060165481565b34801561090957600080fd5b5061036a611c89565b60006001600160e01b0319821663780e9d6360e01b1480610937575061093782611d17565b92915050565b600a546001600160a01b031633146109705760405162461bcd60e51b8152600401610967906131d9565b60405180910390fd5b601180546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031633146109bc5760405162461bcd60e51b8152600401610967906131d9565b6017805461ff001981166101009182900460ff1615909102179055565b6060600080546109e890613339565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1490613339565b8015610a615780601f10610a3657610100808354040283529160200191610a61565b820191906000526020600020905b815481529060010190602001808311610a4457829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610ae45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610967565b506000908152600460205260409020546001600160a01b031690565b6000610b0b82611036565b9050806001600160a01b0316836001600160a01b03161415610b795760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610967565b336001600160a01b0382161480610b955750610b958133610884565b610c075760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610967565b610c118383611d67565b505050565b600a546001600160a01b03163314610c405760405162461bcd60e51b8152600401610967906131d9565b60175462010000900460ff1615610c695760405162461bcd60e51b81526004016109679061320e565b610c1160128383612b87565b600a546001600160a01b03163314610c9f5760405162461bcd60e51b8152600401610967906131d9565b611964610caf610bb8600a6132ab565b610cb991906132ab565b81610cc360085490565b610ccd91906132ab565b1115610ceb5760405162461bcd60e51b8152600401610967906131b3565b601354600a90610cfc9083906132ab565b1115610d3a5760405162461bcd60e51b815260206004820152600d60248201526c4e6f206d6f726520676966747360981b6044820152606401610967565b60005b81811015610c115760138054906000610d5583613374565b9190505550610da6838383818110610d7d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610d929190612cd8565b6008545b610da19060016132ab565b611dd5565b80610db081613374565b915050610d3d565b610dc23382611def565b610dde5760405162461bcd60e51b81526004016109679061325a565b610c11838383611ee6565b6000610df4836110ad565b8210610e565760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610967565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610ea95760405162461bcd60e51b8152600401610967906131d9565b6010546001600160a01b03166108fc610ec3600a476132c3565b6040518115909202916000818181858888f19350505050158015610eeb573d6000803e3d6000fd5b5060405133904780156108fc02916000818181858888f19350505050158015610f18573d6000803e3d6000fd5b50565b610c1183838360405180602001604052806000815250611b11565b6000610f4160085490565b8210610fa45760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610967565b60088281548110610fc557634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b600a546001600160a01b031633146110015760405162461bcd60e51b8152600401610967906131d9565b60175462010000900460ff161561102a5760405162461bcd60e51b81526004016109679061320e565b610c11600f8383612b87565b6000818152600260205260408120546001600160a01b0316806109375760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610967565b60006001600160a01b0382166111185760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610967565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b0316331461115e5760405162461bcd60e51b8152600401610967906131d9565b6111686000612091565b565b600a546001600160a01b031633146111945760405162461bcd60e51b8152600401610967906131d9565b60005b81811015610c115760008383838181106111c157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906111d69190612cd8565b90506001600160a01b03811661121d5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610967565b6001600160a01b0381166000908152600b602052604090205460ff16156112865760405162461bcd60e51b815260206004820152601f60248201527f416e20656e74727920697320616c7265616479206f6e20746865206c697374006044820152606401610967565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055806112b281613374565b915050611197565b600a546001600160a01b031633146112e45760405162461bcd60e51b8152600401610967906131d9565b6017805460ff19811660ff90911615179055565b601754610100900460ff16158015611312575060175460ff165b6113525760405162461bcd60e51b8152602060048201526011602482015270141c995cd85b19481a5cc818db1bdcd959607a1b6044820152606401610967565b336000908152600b602052604090205460ff166113b15760405162461bcd60e51b815260206004820152601760248201527f4e6f74206f6e207468652070726573616c65206c6973740000000000000000006044820152606401610967565b6119646113c1610bb8600a6132ab565b6113cb91906132ab565b600854106113eb5760405162461bcd60e51b8152600401610967906131b3565b610bb8816015546113fc91906132ab565b111561144a5760405162461bcd60e51b815260206004820152601b60248201527f507269766174652073616c65206c696d697420657863656564656400000000006044820152606401610967565b601654336000908152600c60205260409020546114689083906132ab565b11156114b65760405162461bcd60e51b815260206004820152601960248201527f546f6b656e20616c6c6f636174696f6e206578636565646564000000000000006044820152606401610967565b346114c9826701140bbd030c40006132d7565b111561150a5760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b41032ba3432b960811b6044820152606401610967565b60005b81811015611569576015805490600061152583613374565b9091555050336000908152600c6020526040812080549161154583613374565b919050555061155733610d9660085490565b8061156181613374565b91505061150d565b5050565b61196461157d610bb8600a6132ab565b61158791906132ab565b81565b600a546001600160a01b031633146115b45760405162461bcd60e51b8152600401610967906131d9565b60175462010000900460ff16156115dd5760405162461bcd60e51b81526004016109679061320e565b610c11600e8383612b87565b6060600180546109e890613339565b600a546001600160a01b031633146116225760405162461bcd60e51b8152600401610967906131d9565b6017805462ff0000191662010000179055565b601754610100900460ff1661167f5760405162461bcd60e51b815260206004820152601060248201526f53616c65206973206e6f74206c69766560801b6044820152606401610967565b60175460ff16156116c45760405162461bcd60e51b815260206004820152600f60248201526e50726573616c65206973206c69766560881b6044820152606401610967565b6116ce84846120e3565b6117075760405162461bcd60e51b815260206004820152600a60248201526910d85b89dd081b5a5b9d60b21b6044820152606401610967565b600d82604051611717919061304f565b9081526040519081900360200190205460ff161561176b5760405162461bcd60e51b815260206004820152601160248201527012185cda08185b1c9958591e481d5cd959607a1b6044820152606401610967565b83611777338385612107565b146117b25760405162461bcd60e51b815260206004820152600b60248201526a12185cda0819985a5b195960aa1b6044820152606401610967565b6119646117c2610bb8600a6132ab565b6117cc91906132ab565b600854106117ec5760405162461bcd60e51b8152600401610967906131b3565b611964816014546117fd91906132ab565b111561184b5760405162461bcd60e51b815260206004820152601a60248201527f5075626c69632073616c65206c696d69742065786365656465640000000000006044820152606401610967565b600781111561189c5760405162461bcd60e51b815260206004820181905260248201527f546f6b656e207175616e7469747920706572206d696e742065786365656465646044820152606401610967565b346118af826701140bbd030c40006132d7565b11156118f05760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b41032ba3432b960811b6044820152606401610967565b60005b8181101561192f576014805490600061190b83613374565b919050555061191d33610d9660085490565b8061192781613374565b9150506118f3565b506001600d83604051611942919061304f565b908152604051908190036020019020805491151560ff1990921691909117905550505050565b6001600160a01b0382163314156119c15760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610967565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b03163314611a575760405162461bcd60e51b8152600401610967906131d9565b60005b81811015610c11576000838383818110611a8457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a999190612cd8565b90506001600160a01b038116611ae05760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610967565b6001600160a01b03166000908152600b60205260409020805460ff1916905580611b0981613374565b915050611a5a565b611b1b3383611def565b611b375760405162461bcd60e51b81526004016109679061325a565b611b4384848484612189565b50505050565b6000818152600260205260409020546060906001600160a01b0316611bb05760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e006044820152606401610967565b600f611bbb836121bc565b604051602001611bcc92919061306b565b6040516020818303038152906040529050919050565b6060600e80546109e890613339565b600a546001600160a01b03163314611c1b5760405162461bcd60e51b8152600401610967906131d9565b6001600160a01b038116611c805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610967565b610f1881612091565b60128054611c9690613339565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc290613339565b8015611d0f5780601f10611ce457610100808354040283529160200191611d0f565b820191906000526020600020905b815481529060010190602001808311611cf257829003601f168201915b505050505081565b60006001600160e01b031982166380ac58cd60e01b1480611d4857506001600160e01b03198216635b5e139f60e01b145b8061093757506301ffc9a760e01b6001600160e01b0319831614610937565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d9c82611036565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6115698282604051806020016040528060008152506122d6565b6000818152600260205260408120546001600160a01b0316611e685760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610967565b6000611e7383611036565b9050806001600160a01b0316846001600160a01b03161480611eae5750836001600160a01b0316611ea384610a6b565b6001600160a01b0316145b80611ede57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611ef982611036565b6001600160a01b031614611f615760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610967565b6001600160a01b038216611fc35760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610967565b611fce838383612309565b611fd9600082611d67565b6001600160a01b03831660009081526003602052604081208054600192906120029084906132f6565b90915550506001600160a01b03821660009081526003602052604081208054600192906120309084906132ab565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006120ef83836123c1565b6011546001600160a01b039182169116149392505050565b60008084848460405160200161211f93929190613010565b60408051601f198184030181529082905280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000091830191909152603c820152605c0160408051808303601f19018152919052805160209091012095945050505050565b612194848484611ee6565b6121a0848484846123e5565b611b435760405162461bcd60e51b815260040161096790613161565b6060816121e05750506040805180820190915260018152600360fc1b602082015290565b8160005b811561220a57806121f481613374565b91506122039050600a836132c3565b91506121e4565b60008167ffffffffffffffff81111561223357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561225d576020820181803683370190505b5090505b8415611ede576122726001836132f6565b915061227f600a8661338f565b61228a9060306132ab565b60f81b8183815181106122ad57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506122cf600a866132c3565b9450612261565b6122e083836124f2565b6122ed60008484846123e5565b610c115760405162461bcd60e51b815260040161096790613161565b6001600160a01b0383166123645761235f81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612387565b816001600160a01b0316836001600160a01b031614612387576123878382612640565b6001600160a01b03821661239e57610c11816126dd565b826001600160a01b0316826001600160a01b031614610c1157610c1182826127b6565b60008060006123d085856127fa565b915091506123dd8161286a565b509392505050565b60006001600160a01b0384163b156124e757604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612429903390899088908890600401613111565b602060405180830381600087803b15801561244357600080fd5b505af1925050508015612473575060408051601f3d908101601f1916820190925261247091810190612f39565b60015b6124cd573d8080156124a1576040519150601f19603f3d011682016040523d82523d6000602084013e6124a6565b606091505b5080516124c55760405162461bcd60e51b815260040161096790613161565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611ede565b506001949350505050565b6001600160a01b0382166125485760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610967565b6000818152600260205260409020546001600160a01b0316156125ad5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610967565b6125b960008383612309565b6001600160a01b03821660009081526003602052604081208054600192906125e29084906132ab565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000600161264d846110ad565b61265791906132f6565b6000838152600760205260409020549091508082146126aa576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906126ef906001906132f6565b6000838152600960205260408120546008805493945090928490811061272557634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806008838154811061275457634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061279a57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006127c1836110ad565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6000808251604114156128315760208301516040840151606085015160001a61282587828585612a6b565b94509450505050612863565b82516040141561285b5760208301516040840151612850868383612b58565b935093505050612863565b506000905060025b9250929050565b600081600481111561288c57634e487b7160e01b600052602160045260246000fd5b14156128955750565b60018160048111156128b757634e487b7160e01b600052602160045260246000fd5b14156129055760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610967565b600281600481111561292757634e487b7160e01b600052602160045260246000fd5b14156129755760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610967565b600381600481111561299757634e487b7160e01b600052602160045260246000fd5b14156129f05760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610967565b6004816004811115612a1257634e487b7160e01b600052602160045260246000fd5b1415610f185760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610967565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612aa25750600090506003612b4f565b8460ff16601b14158015612aba57508460ff16601c14155b15612acb5750600090506004612b4f565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612b1f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612b4857600060019250925050612b4f565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01612b7987828885612a6b565b935093505050935093915050565b828054612b9390613339565b90600052602060002090601f016020900481019282612bb55760008555612bfb565b82601f10612bce5782800160ff19823516178555612bfb565b82800160010185558215612bfb579182015b82811115612bfb578235825591602001919060010190612be0565b50612c07929150612c0b565b5090565b5b80821115612c075760008155600101612c0c565b600067ffffffffffffffff80841115612c3b57612c3b6133cf565b604051601f8501601f19908116603f01168101908282118183101715612c6357612c636133cf565b81604052809350858152868686011115612c7c57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612cad57600080fd5b919050565b600082601f830112612cc2578081fd5b612cd183833560208501612c20565b9392505050565b600060208284031215612ce9578081fd5b612cd182612c96565b60008060408385031215612d04578081fd5b612d0d83612c96565b9150612d1b60208401612c96565b90509250929050565b600080600060608486031215612d38578081fd5b612d4184612c96565b9250612d4f60208501612c96565b9150604084013590509250925092565b60008060008060808587031215612d74578081fd5b612d7d85612c96565b9350612d8b60208601612c96565b925060408501359150606085013567ffffffffffffffff811115612dad578182fd5b612db987828801612cb2565b91505092959194509250565b60008060408385031215612dd7578182fd5b612de083612c96565b915060208301358015158114612df4578182fd5b809150509250929050565b60008060408385031215612e11578182fd5b612e1a83612c96565b946020939093013593505050565b60008060208385031215612e3a578182fd5b823567ffffffffffffffff80821115612e51578384fd5b818501915085601f830112612e64578384fd5b813581811115612e72578485fd5b8660208260051b8501011115612e86578485fd5b60209290920196919550909350505050565b60008060008060808587031215612ead578384fd5b84359350602085013567ffffffffffffffff80821115612ecb578485fd5b612ed788838901612cb2565b94506040870135915080821115612eec578384fd5b508501601f81018713612efd578283fd5b612f0c87823560208401612c20565b949793965093946060013593505050565b600060208284031215612f2e578081fd5b8135612cd1816133e5565b600060208284031215612f4a578081fd5b8151612cd1816133e5565b60008060208385031215612f67578182fd5b823567ffffffffffffffff80821115612f7e578384fd5b818501915085601f830112612f91578384fd5b813581811115612f9f578485fd5b866020828501011115612e86578485fd5b600060208284031215612fc1578081fd5b5035919050565b60008151808452612fe081602086016020860161330d565b601f01601f19169290920160200192915050565b6000815161300681856020860161330d565b9290920192915050565b6bffffffffffffffffffffffff198460601b1681528260148201526000825161304081603485016020870161330d565b91909101603401949350505050565b6000825161306181846020870161330d565b9190910192915050565b600080845482600182811c91508083168061308757607f831692505b60208084108214156130a757634e487b7160e01b87526022600452602487fd5b8180156130bb57600181146130cc576130f8565b60ff198616895284890196506130f8565b60008b815260209020885b868110156130f05781548b8201529085019083016130d7565b505084890196505b5050505050506131088185612ff4565b95945050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061314490830184612fc8565b9695505050505050565b602081526000612cd16020830184612fc8565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252600c908201526b4f7574206f662073746f636b60a01b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602c908201527f436f6e7472616374206d65746164617461206d6574686f647320617265206c6f60408201526b31b5b2b2103337b932bb32b960a11b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156132be576132be6133a3565b500190565b6000826132d2576132d26133b9565b500490565b60008160001904831182151516156132f1576132f16133a3565b500290565b600082821015613308576133086133a3565b500390565b60005b83811015613328578181015183820152602001613310565b83811115611b435750506000910152565b600181811c9082168061334d57607f821691505b6020821081141561336e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613388576133886133a3565b5060010190565b60008261339e5761339e6133b9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610f1857600080fdfea2646970667358221220728c04d1a0b578d0c1da5f0ff806b04d67a56254876b37bd652d62f534d2b7f364736f6c6343000804003368747470733a2f2f3c696e736572745f646f6d61696e3e2f6d657461646174612f",
"opcodes": "PUSH1 0xE0 PUSH1 0x40 MSTORE PUSH1 0x21 PUSH1 0x80 DUP2 DUP2 MSTORE SWAP1 PUSH3 0x3678 PUSH1 0xA0 CODECOPY DUP1 MLOAD PUSH3 0x29 SWAP2 PUSH1 0xF SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x154 JUMP JUMPDEST POP PUSH1 0x10 DUP1 SLOAD PUSH20 0x7E0923B2547CE81E73036BFE8E3D461C44064351 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE PUSH1 0x11 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x3 PUSH1 0x16 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH15 0x53757065726D616E20546573742031 PUSH1 0x88 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE DUP4 MLOAD DUP1 DUP6 ADD SWAP1 SWAP5 MSTORE PUSH1 0x3 DUP5 MSTORE PUSH3 0x535331 PUSH1 0xE8 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 PUSH3 0xC5 SWAP2 PUSH1 0x0 SWAP2 PUSH3 0x154 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0xDB SWAP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x154 JUMP JUMPDEST POP POP POP PUSH3 0xF8 PUSH3 0xF2 PUSH3 0xFE PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x102 JUMP JUMPDEST PUSH3 0x237 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x162 SWAP1 PUSH3 0x1FA JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x186 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x1D1 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x1A1 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x1D1 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x1D1 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1D1 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1B4 JUMP JUMPDEST POP PUSH3 0x1DF SWAP3 SWAP2 POP PUSH3 0x1E3 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x1DF JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1E4 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x20F JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x231 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x3431 DUP1 PUSH3 0x247 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2E4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x815F7BBD GT PUSH2 0x190 JUMPI DUP1 PUSH4 0xA22CB465 GT PUSH2 0xDC JUMPI DUP1 PUSH4 0xE081B781 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xEAFC7F37 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xEAFC7F37 EQ PUSH2 0x8B2 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x8C7 JUMPI DUP1 PUSH4 0xF4743070 EQ PUSH2 0x8E7 JUMPI DUP1 PUSH4 0xFAF924CF EQ PUSH2 0x8FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE081B781 EQ PUSH2 0x835 JUMPI DUP1 PUSH4 0xE8A3D485 EQ PUSH2 0x854 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x869 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x77F JUMPI DUP1 PUSH4 0xB179E060 EQ PUSH2 0x79F JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x7BF JUMPI DUP1 PUSH4 0xC87B56DD EQ PUSH2 0x7DF JUMPI DUP1 PUSH4 0xCF309012 EQ PUSH2 0x7FF JUMPI DUP1 PUSH4 0xDAFFE420 EQ PUSH2 0x81F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x940F1ADA GT PUSH2 0x149 JUMPI DUP1 PUSH4 0x9BF80316 GT PUSH2 0x123 JUMPI DUP1 PUSH4 0x9BF80316 EQ PUSH2 0x6D6 JUMPI DUP1 PUSH4 0x9CF2E8D6 EQ PUSH2 0x703 JUMPI DUP1 PUSH4 0x9E273B2F EQ PUSH2 0x733 JUMPI DUP1 PUSH4 0x9EC70F19 EQ PUSH2 0x76C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x940F1ADA EQ PUSH2 0x696 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x6AC JUMPI DUP1 PUSH4 0x989BDBB6 EQ PUSH2 0x6C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x815F7BBD EQ PUSH2 0x601 JUMPI DUP1 PUSH4 0x83A9E049 EQ PUSH2 0x614 JUMPI DUP1 PUSH4 0x89C3B5BA EQ PUSH2 0x62E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x643 JUMPI DUP1 PUSH4 0x8DDDB20C EQ PUSH2 0x661 JUMPI DUP1 PUSH4 0x938E3D7B EQ PUSH2 0x676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x356423D8 GT PUSH2 0x24F JUMPI DUP1 PUSH4 0x5CE7AF1F GT PUSH2 0x208 JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x1E2 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x597 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x5B7 JUMPI DUP1 PUSH4 0x7204A3C9 EQ PUSH2 0x5CC JUMPI DUP1 PUSH4 0x7BFFB4CE EQ PUSH2 0x5EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5CE7AF1F EQ PUSH2 0x525 JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x55B JUMPI DUP1 PUSH4 0x6A33BB45 EQ PUSH2 0x57B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x356423D8 EQ PUSH2 0x484 JUMPI DUP1 PUSH4 0x3CCFD60B EQ PUSH2 0x49A JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x4AF JUMPI DUP1 PUSH4 0x4F6CCCE7 EQ PUSH2 0x4CF JUMPI DUP1 PUSH4 0x55F804B3 EQ PUSH2 0x4EF JUMPI DUP1 PUSH4 0x59A12AD5 EQ PUSH2 0x50F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x10969523 GT PUSH2 0x2A1 JUMPI DUP1 PUSH4 0x10969523 EQ PUSH2 0x3CF JUMPI DUP1 PUSH4 0x163E1E61 EQ PUSH2 0x3EF JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x40F JUMPI DUP1 PUSH4 0x1B57190E EQ PUSH2 0x42E JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x444 JUMPI DUP1 PUSH4 0x2F745C59 EQ PUSH2 0x464 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x2E9 JUMPI DUP1 PUSH4 0x46DC166 EQ PUSH2 0x31E JUMPI DUP1 PUSH4 0x49C5C49 EQ PUSH2 0x340 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x377 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x3AF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x309 PUSH2 0x304 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F1D JUMP JUMPDEST PUSH2 0x912 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x32A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x339 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CD8 JUMP JUMPDEST PUSH2 0x93D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x34C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x992 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x361 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x36A PUSH2 0x9D9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x315 SWAP2 SWAP1 PUSH2 0x314E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x383 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x397 PUSH2 0x392 CALLDATASIZE PUSH1 0x4 PUSH2 0x2FB0 JUMP JUMPDEST PUSH2 0xA6B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x315 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x3CA CALLDATASIZE PUSH1 0x4 PUSH2 0x2DFF JUMP JUMPDEST PUSH2 0xB00 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x3EA CALLDATASIZE PUSH1 0x4 PUSH2 0x2F55 JUMP JUMPDEST PUSH2 0xC16 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x40A CALLDATASIZE PUSH1 0x4 PUSH2 0x2E28 JUMP JUMPDEST PUSH2 0xC75 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x41B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x8 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x315 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x43A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH1 0x13 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x450 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x45F CALLDATASIZE PUSH1 0x4 PUSH2 0x2D24 JUMP JUMPDEST PUSH2 0xDB8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x470 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH2 0x47F CALLDATASIZE PUSH1 0x4 PUSH2 0x2DFF JUMP JUMPDEST PUSH2 0xDE9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x490 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH2 0xBB8 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0xE7F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x4CA CALLDATASIZE PUSH1 0x4 PUSH2 0x2D24 JUMP JUMPDEST PUSH2 0xF1B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH2 0x4EA CALLDATASIZE PUSH1 0x4 PUSH2 0x2FB0 JUMP JUMPDEST PUSH2 0xF36 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x50A CALLDATASIZE PUSH1 0x4 PUSH2 0x2F55 JUMP JUMPDEST PUSH2 0xFD7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH1 0x15 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x531 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH2 0x540 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CD8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x567 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x397 PUSH2 0x576 CALLDATASIZE PUSH1 0x4 PUSH2 0x2FB0 JUMP JUMPDEST PUSH2 0x1036 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x587 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH8 0x1140BBD030C4000 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH2 0x5B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CD8 JUMP JUMPDEST PUSH2 0x10AD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x1134 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x5E7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2E28 JUMP JUMPDEST PUSH2 0x116A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x12BA JUMP JUMPDEST PUSH2 0x33E PUSH2 0x60F CALLDATASIZE PUSH1 0x4 PUSH2 0x2FB0 JUMP JUMPDEST PUSH2 0x12F8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x620 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x17 SLOAD PUSH2 0x309 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH1 0x7 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x64F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x397 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x66D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH2 0x156D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x682 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x691 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F55 JUMP JUMPDEST PUSH2 0x158A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH1 0x14 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x36A PUSH2 0x15E9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x15F8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH2 0x6F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CD8 JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x309 PUSH2 0x71E CALLDATASIZE PUSH1 0x4 PUSH2 0x2CD8 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x73F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x309 PUSH2 0x74E CALLDATASIZE PUSH1 0x4 PUSH2 0x2CD8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x33E PUSH2 0x77A CALLDATASIZE PUSH1 0x4 PUSH2 0x2E98 JUMP JUMPDEST PUSH2 0x1635 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x78B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x79A CALLDATASIZE PUSH1 0x4 PUSH2 0x2DC5 JUMP JUMPDEST PUSH2 0x1968 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x7BA CALLDATASIZE PUSH1 0x4 PUSH2 0x2E28 JUMP JUMPDEST PUSH2 0x1A2D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x7DA CALLDATASIZE PUSH1 0x4 PUSH2 0x2D5F JUMP JUMPDEST PUSH2 0x1B11 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x36A PUSH2 0x7FA CALLDATASIZE PUSH1 0x4 PUSH2 0x2FB0 JUMP JUMPDEST PUSH2 0x1B49 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x80B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x17 SLOAD PUSH2 0x309 SWAP1 PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x82B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH2 0x1964 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x841 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x17 SLOAD PUSH2 0x309 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x860 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x36A PUSH2 0x1BE2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x875 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x309 PUSH2 0x884 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CF2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH1 0xA DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x8E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CD8 JUMP JUMPDEST PUSH2 0x1BF1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH1 0x16 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x909 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x36A PUSH2 0x1C89 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x780E9D63 PUSH1 0xE0 SHL EQ DUP1 PUSH2 0x937 JUMPI POP PUSH2 0x937 DUP3 PUSH2 0x1D17 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x970 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x11 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x17 DUP1 SLOAD PUSH2 0xFF00 NOT DUP2 AND PUSH2 0x100 SWAP2 DUP3 SWAP1 DIV PUSH1 0xFF AND ISZERO SWAP1 SWAP2 MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD PUSH2 0x9E8 SWAP1 PUSH2 0x3339 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xA14 SWAP1 PUSH2 0x3339 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xA61 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xA36 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xA61 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA44 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xAE4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F76656420717565727920666F72206E6F6E6578 PUSH1 0x44 DUP3 ADD MSTORE PUSH12 0x34B9BA32B73A103A37B5B2B7 PUSH1 0xA1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB0B DUP3 PUSH2 0x1036 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xB79 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F76616C20746F2063757272656E74206F776E65 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x39 PUSH1 0xF9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ DUP1 PUSH2 0xB95 JUMPI POP PUSH2 0xB95 DUP2 CALLER PUSH2 0x884 JUMP JUMPDEST PUSH2 0xC07 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x38 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F76652063616C6C6572206973206E6F74206F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E6572206E6F7220617070726F76656420666F7220616C6C0000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST PUSH2 0xC11 DUP4 DUP4 PUSH2 0x1D67 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC40 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xC69 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x320E JUMP JUMPDEST PUSH2 0xC11 PUSH1 0x12 DUP4 DUP4 PUSH2 0x2B87 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC9F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH2 0x1964 PUSH2 0xCAF PUSH2 0xBB8 PUSH1 0xA PUSH2 0x32AB JUMP JUMPDEST PUSH2 0xCB9 SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST DUP2 PUSH2 0xCC3 PUSH1 0x8 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xCCD SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST GT ISZERO PUSH2 0xCEB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31B3 JUMP JUMPDEST PUSH1 0x13 SLOAD PUSH1 0xA SWAP1 PUSH2 0xCFC SWAP1 DUP4 SWAP1 PUSH2 0x32AB JUMP JUMPDEST GT ISZERO PUSH2 0xD3A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x4E6F206D6F7265206769667473 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC11 JUMPI PUSH1 0x13 DUP1 SLOAD SWAP1 PUSH1 0x0 PUSH2 0xD55 DUP4 PUSH2 0x3374 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP PUSH2 0xDA6 DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0xD7D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xD92 SWAP2 SWAP1 PUSH2 0x2CD8 JUMP JUMPDEST PUSH1 0x8 SLOAD JUMPDEST PUSH2 0xDA1 SWAP1 PUSH1 0x1 PUSH2 0x32AB JUMP JUMPDEST PUSH2 0x1DD5 JUMP JUMPDEST DUP1 PUSH2 0xDB0 DUP2 PUSH2 0x3374 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xD3D JUMP JUMPDEST PUSH2 0xDC2 CALLER DUP3 PUSH2 0x1DEF JUMP JUMPDEST PUSH2 0xDDE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x325A JUMP JUMPDEST PUSH2 0xC11 DUP4 DUP4 DUP4 PUSH2 0x1EE6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDF4 DUP4 PUSH2 0x10AD JUMP JUMPDEST DUP3 LT PUSH2 0xE56 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243373231456E756D657261626C653A206F776E657220696E646578206F75 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x74206F6620626F756E6473 PUSH1 0xA8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xEA9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x8FC PUSH2 0xEC3 PUSH1 0xA SELFBALANCE PUSH2 0x32C3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 ISZERO SWAP1 SWAP3 MUL SWAP2 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0xEEB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD CALLER SWAP1 SELFBALANCE DUP1 ISZERO PUSH2 0x8FC MUL SWAP2 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0xF18 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xC11 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x1B11 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF41 PUSH1 0x8 SLOAD SWAP1 JUMP JUMPDEST DUP3 LT PUSH2 0xFA4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243373231456E756D657261626C653A20676C6F62616C20696E646578206F PUSH1 0x44 DUP3 ADD MSTORE PUSH12 0x7574206F6620626F756E6473 PUSH1 0xA0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x8 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xFC5 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1001 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x102A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x320E JUMP JUMPDEST PUSH2 0xC11 PUSH1 0xF DUP4 DUP4 PUSH2 0x2B87 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0x937 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A206F776E657220717565727920666F72206E6F6E6578697374 PUSH1 0x44 DUP3 ADD MSTORE PUSH9 0x32B73A103A37B5B2B7 PUSH1 0xB9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1118 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A2062616C616E636520717565727920666F7220746865207A65 PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x726F2061646472657373 PUSH1 0xB0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x115E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH2 0x1168 PUSH1 0x0 PUSH2 0x2091 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1194 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC11 JUMPI PUSH1 0x0 DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0x11C1 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x11D6 SWAP2 SWAP1 PUSH2 0x2CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x121D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x5A65726F2041646472657373 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1286 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416E20656E74727920697320616C7265616479206F6E20746865206C69737400 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 PUSH2 0x12B2 DUP2 PUSH2 0x3374 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1197 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x12E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x17 DUP1 SLOAD PUSH1 0xFF NOT DUP2 AND PUSH1 0xFF SWAP1 SWAP2 AND ISZERO OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1312 JUMPI POP PUSH1 0x17 SLOAD PUSH1 0xFF AND JUMPDEST PUSH2 0x1352 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x141C995CD85B19481A5CC818DB1BDCD959 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x13B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F74206F6E207468652070726573616C65206C697374000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH2 0x1964 PUSH2 0x13C1 PUSH2 0xBB8 PUSH1 0xA PUSH2 0x32AB JUMP JUMPDEST PUSH2 0x13CB SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST PUSH1 0x8 SLOAD LT PUSH2 0x13EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31B3 JUMP JUMPDEST PUSH2 0xBB8 DUP2 PUSH1 0x15 SLOAD PUSH2 0x13FC SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST GT ISZERO PUSH2 0x144A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x507269766174652073616C65206C696D69742065786365656465640000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x16 SLOAD CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1468 SWAP1 DUP4 SWAP1 PUSH2 0x32AB JUMP JUMPDEST GT ISZERO PUSH2 0x14B6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E20616C6C6F636174696F6E20657863656564656400000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST CALLVALUE PUSH2 0x14C9 DUP3 PUSH8 0x1140BBD030C4000 PUSH2 0x32D7 JUMP JUMPDEST GT ISZERO PUSH2 0x150A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x2737BA1032B737BAB3B41032BA3432B9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1569 JUMPI PUSH1 0x15 DUP1 SLOAD SWAP1 PUSH1 0x0 PUSH2 0x1525 DUP4 PUSH2 0x3374 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 PUSH2 0x1545 DUP4 PUSH2 0x3374 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP PUSH2 0x1557 CALLER PUSH2 0xD96 PUSH1 0x8 SLOAD SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x1561 DUP2 PUSH2 0x3374 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x150D JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1964 PUSH2 0x157D PUSH2 0xBB8 PUSH1 0xA PUSH2 0x32AB JUMP JUMPDEST PUSH2 0x1587 SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x15B4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x15DD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x320E JUMP JUMPDEST PUSH2 0xC11 PUSH1 0xE DUP4 DUP4 PUSH2 0x2B87 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP1 SLOAD PUSH2 0x9E8 SWAP1 PUSH2 0x3339 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1622 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x17 DUP1 SLOAD PUSH3 0xFF0000 NOT AND PUSH3 0x10000 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x167F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x53616C65206973206E6F74206C697665 PUSH1 0x80 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x16C4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x50726573616C65206973206C697665 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH2 0x16CE DUP5 DUP5 PUSH2 0x20E3 JUMP JUMPDEST PUSH2 0x1707 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x10D85B89DD081B5A5B9D PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0xD DUP3 PUSH1 0x40 MLOAD PUSH2 0x1717 SWAP2 SWAP1 PUSH2 0x304F JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x176B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x12185CDA08185B1C9958591E481D5CD959 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST DUP4 PUSH2 0x1777 CALLER DUP4 DUP6 PUSH2 0x2107 JUMP JUMPDEST EQ PUSH2 0x17B2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x12185CDA0819985A5B1959 PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH2 0x1964 PUSH2 0x17C2 PUSH2 0xBB8 PUSH1 0xA PUSH2 0x32AB JUMP JUMPDEST PUSH2 0x17CC SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST PUSH1 0x8 SLOAD LT PUSH2 0x17EC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31B3 JUMP JUMPDEST PUSH2 0x1964 DUP2 PUSH1 0x14 SLOAD PUSH2 0x17FD SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST GT ISZERO PUSH2 0x184B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5075626C69632073616C65206C696D6974206578636565646564000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x7 DUP2 GT ISZERO PUSH2 0x189C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E207175616E7469747920706572206D696E74206578636565646564 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST CALLVALUE PUSH2 0x18AF DUP3 PUSH8 0x1140BBD030C4000 PUSH2 0x32D7 JUMP JUMPDEST GT ISZERO PUSH2 0x18F0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x2737BA1032B737BAB3B41032BA3432B9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x192F JUMPI PUSH1 0x14 DUP1 SLOAD SWAP1 PUSH1 0x0 PUSH2 0x190B DUP4 PUSH2 0x3374 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP PUSH2 0x191D CALLER PUSH2 0xD96 PUSH1 0x8 SLOAD SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x1927 DUP2 PUSH2 0x3374 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x18F3 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0xD DUP4 PUSH1 0x40 MLOAD PUSH2 0x1942 SWAP2 SWAP1 PUSH2 0x304F JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 KECCAK256 DUP1 SLOAD SWAP2 ISZERO ISZERO PUSH1 0xFF NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND CALLER EQ ISZERO PUSH2 0x19C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F766520746F2063616C6C657200000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1A57 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC11 JUMPI PUSH1 0x0 DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0x1A84 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1A99 SWAP2 SWAP1 PUSH2 0x2CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1AE0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x5A65726F2041646472657373 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP1 PUSH2 0x1B09 DUP2 PUSH2 0x3374 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1A5A JUMP JUMPDEST PUSH2 0x1B1B CALLER DUP4 PUSH2 0x1DEF JUMP JUMPDEST PUSH2 0x1B37 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x325A JUMP JUMPDEST PUSH2 0x1B43 DUP5 DUP5 DUP5 DUP5 PUSH2 0x2189 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x60 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1BB0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F74207175657279206E6F6E2D6578697374656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0xF PUSH2 0x1BBB DUP4 PUSH2 0x21BC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1BCC SWAP3 SWAP2 SWAP1 PUSH2 0x306B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0xE DUP1 SLOAD PUSH2 0x9E8 SWAP1 PUSH2 0x3339 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1C1B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1C80 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST PUSH2 0xF18 DUP2 PUSH2 0x2091 JUMP JUMPDEST PUSH1 0x12 DUP1 SLOAD PUSH2 0x1C96 SWAP1 PUSH2 0x3339 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1CC2 SWAP1 PUSH2 0x3339 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1D0F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1CE4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1D0F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1CF2 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x80AC58CD PUSH1 0xE0 SHL EQ DUP1 PUSH2 0x1D48 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x5B5E139F PUSH1 0xE0 SHL EQ JUMPDEST DUP1 PUSH2 0x937 JUMPI POP PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND EQ PUSH2 0x937 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SWAP1 PUSH2 0x1D9C DUP3 PUSH2 0x1036 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH2 0x1569 DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x22D6 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1E68 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A206F70657261746F7220717565727920666F72206E6F6E6578 PUSH1 0x44 DUP3 ADD MSTORE PUSH12 0x34B9BA32B73A103A37B5B2B7 PUSH1 0xA1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E73 DUP4 PUSH2 0x1036 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x1EAE JUMPI POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1EA3 DUP5 PUSH2 0xA6B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 PUSH2 0x1EDE JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1EF9 DUP3 PUSH2 0x1036 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1F61 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E73666572206F6620746F6B656E20746861742069 PUSH1 0x44 DUP3 ADD MSTORE PUSH9 0x39903737BA1037BBB7 PUSH1 0xB9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1FC3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E7366657220746F20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST PUSH2 0x1FCE DUP4 DUP4 DUP4 PUSH2 0x2309 JUMP JUMPDEST PUSH2 0x1FD9 PUSH1 0x0 DUP3 PUSH2 0x1D67 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP3 SWAP1 PUSH2 0x2002 SWAP1 DUP5 SWAP1 PUSH2 0x32F6 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP3 SWAP1 PUSH2 0x2030 SWAP1 DUP5 SWAP1 PUSH2 0x32AB JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE SWAP2 MLOAD DUP5 SWAP4 SWAP2 DUP8 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x20EF DUP4 DUP4 PUSH2 0x23C1 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x211F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3010 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3C DUP3 ADD MSTORE PUSH1 0x5C ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB PUSH1 0x1F NOT ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2194 DUP5 DUP5 DUP5 PUSH2 0x1EE6 JUMP JUMPDEST PUSH2 0x21A0 DUP5 DUP5 DUP5 DUP5 PUSH2 0x23E5 JUMP JUMPDEST PUSH2 0x1B43 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x3161 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH2 0x21E0 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x3 PUSH1 0xFC SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x0 JUMPDEST DUP2 ISZERO PUSH2 0x220A JUMPI DUP1 PUSH2 0x21F4 DUP2 PUSH2 0x3374 JUMP JUMPDEST SWAP2 POP PUSH2 0x2203 SWAP1 POP PUSH1 0xA DUP4 PUSH2 0x32C3 JUMP JUMPDEST SWAP2 POP PUSH2 0x21E4 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2233 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x225D JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP JUMPDEST DUP5 ISZERO PUSH2 0x1EDE JUMPI PUSH2 0x2272 PUSH1 0x1 DUP4 PUSH2 0x32F6 JUMP JUMPDEST SWAP2 POP PUSH2 0x227F PUSH1 0xA DUP7 PUSH2 0x338F JUMP JUMPDEST PUSH2 0x228A SWAP1 PUSH1 0x30 PUSH2 0x32AB JUMP JUMPDEST PUSH1 0xF8 SHL DUP2 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x22AD JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH2 0x22CF PUSH1 0xA DUP7 PUSH2 0x32C3 JUMP JUMPDEST SWAP5 POP PUSH2 0x2261 JUMP JUMPDEST PUSH2 0x22E0 DUP4 DUP4 PUSH2 0x24F2 JUMP JUMPDEST PUSH2 0x22ED PUSH1 0x0 DUP5 DUP5 DUP5 PUSH2 0x23E5 JUMP JUMPDEST PUSH2 0xC11 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x3161 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x2364 JUMPI PUSH2 0x235F DUP2 PUSH1 0x8 DUP1 SLOAD PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP3 SWAP1 SSTORE PUSH1 0x1 DUP3 ADD DUP4 SSTORE SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xF3F7A9FE364FAAB93B216DA50A3214154F22A0A2B415B23A84C8169E8B636EE3 ADD SSTORE JUMP JUMPDEST PUSH2 0x2387 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x2387 JUMPI PUSH2 0x2387 DUP4 DUP3 PUSH2 0x2640 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x239E JUMPI PUSH2 0xC11 DUP2 PUSH2 0x26DD JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xC11 JUMPI PUSH2 0xC11 DUP3 DUP3 PUSH2 0x27B6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x23D0 DUP6 DUP6 PUSH2 0x27FA JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x23DD DUP2 PUSH2 0x286A JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO PUSH2 0x24E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA85BD01 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x150B7A02 SWAP1 PUSH2 0x2429 SWAP1 CALLER SWAP1 DUP10 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x3111 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2443 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x2473 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x2470 SWAP2 DUP2 ADD SWAP1 PUSH2 0x2F39 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x24CD JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x24A1 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x24A6 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP DUP1 MLOAD PUSH2 0x24C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x3161 JUMP JUMPDEST DUP1 MLOAD DUP2 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH4 0xA85BD01 PUSH1 0xE1 SHL EQ SWAP1 POP PUSH2 0x1EDE JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2548 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A206D696E7420746F20746865207A65726F2061646472657373 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x25AD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20746F6B656E20616C7265616479206D696E74656400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH2 0x25B9 PUSH1 0x0 DUP4 DUP4 PUSH2 0x2309 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP3 SWAP1 PUSH2 0x25E2 SWAP1 DUP5 SWAP1 PUSH2 0x32AB JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD DUP4 SWAP3 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 DUP3 SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH2 0x264D DUP5 PUSH2 0x10AD JUMP JUMPDEST PUSH2 0x2657 SWAP2 SWAP1 PUSH2 0x32F6 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP1 DUP3 EQ PUSH2 0x26AA JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP5 DUP5 MSTORE DUP2 DUP5 KECCAK256 DUP2 SWAP1 SSTORE DUP4 MSTORE PUSH1 0x7 SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP2 SWAP1 SSTORE JUMPDEST POP PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP5 SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND DUP4 MSTORE PUSH1 0x6 DUP2 MSTORE DUP4 DUP4 KECCAK256 SWAP2 DUP4 MSTORE MSTORE SWAP1 DUP2 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x26EF SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x32F6 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x8 DUP1 SLOAD SWAP4 SWAP5 POP SWAP1 SWAP3 DUP5 SWAP1 DUP2 LT PUSH2 0x2725 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 PUSH1 0x8 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x2754 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE DUP3 DUP2 MSTORE PUSH1 0x9 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE DUP6 DUP3 MSTORE DUP2 KECCAK256 SSTORE PUSH1 0x8 DUP1 SLOAD DUP1 PUSH2 0x279A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27C1 DUP4 PUSH2 0x10AD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE SWAP4 DUP3 MSTORE PUSH1 0x7 SWAP1 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD PUSH1 0x41 EQ ISZERO PUSH2 0x2831 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x0 BYTE PUSH2 0x2825 DUP8 DUP3 DUP6 DUP6 PUSH2 0x2A6B JUMP JUMPDEST SWAP5 POP SWAP5 POP POP POP POP PUSH2 0x2863 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x40 EQ ISZERO PUSH2 0x285B JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x2850 DUP7 DUP4 DUP4 PUSH2 0x2B58 JUMP JUMPDEST SWAP4 POP SWAP4 POP POP POP PUSH2 0x2863 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 POP PUSH1 0x2 JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x288C JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ ISZERO PUSH2 0x2895 JUMPI POP JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x28B7 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ ISZERO PUSH2 0x2905 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x2927 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ ISZERO PUSH2 0x2975 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x2997 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ ISZERO PUSH2 0x29F0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x4 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x2A12 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ ISZERO PUSH2 0xF18 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202776272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP4 GT ISZERO PUSH2 0x2AA2 JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x3 PUSH2 0x2B4F JUMP JUMPDEST DUP5 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0x2ABA JUMPI POP DUP5 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0x2ACB JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x4 PUSH2 0x2B4F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B1F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2B48 JUMPI PUSH1 0x0 PUSH1 0x1 SWAP3 POP SWAP3 POP POP PUSH2 0x2B4F JUMP JUMPDEST SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xFF SHL SUB DUP4 AND PUSH1 0xFF DUP5 SWAP1 SHR PUSH1 0x1B ADD PUSH2 0x2B79 DUP8 DUP3 DUP9 DUP6 PUSH2 0x2A6B JUMP JUMPDEST SWAP4 POP SWAP4 POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x2B93 SWAP1 PUSH2 0x3339 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2BB5 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x2BFB JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2BCE JUMPI DUP3 DUP1 ADD PUSH1 0xFF NOT DUP3 CALLDATALOAD AND OR DUP6 SSTORE PUSH2 0x2BFB JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2BFB JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2BFB JUMPI DUP3 CALLDATALOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2BE0 JUMP JUMPDEST POP PUSH2 0x2C07 SWAP3 SWAP2 POP PUSH2 0x2C0B JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x2C07 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2C0C JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT ISZERO PUSH2 0x2C3B JUMPI PUSH2 0x2C3B PUSH2 0x33CF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP6 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x2C63 JUMPI PUSH2 0x2C63 PUSH2 0x33CF JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP1 SWAP4 POP DUP6 DUP2 MSTORE DUP7 DUP7 DUP7 ADD GT ISZERO PUSH2 0x2C7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP8 DUP4 ADD ADD MSTORE POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2CAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2CC2 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2CD1 DUP4 DUP4 CALLDATALOAD PUSH1 0x20 DUP6 ADD PUSH2 0x2C20 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2CE9 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2CD1 DUP3 PUSH2 0x2C96 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2D04 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2D0D DUP4 PUSH2 0x2C96 JUMP JUMPDEST SWAP2 POP PUSH2 0x2D1B PUSH1 0x20 DUP5 ADD PUSH2 0x2C96 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2D38 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2D41 DUP5 PUSH2 0x2C96 JUMP JUMPDEST SWAP3 POP PUSH2 0x2D4F PUSH1 0x20 DUP6 ADD PUSH2 0x2C96 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2D74 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2D7D DUP6 PUSH2 0x2C96 JUMP JUMPDEST SWAP4 POP PUSH2 0x2D8B PUSH1 0x20 DUP7 ADD PUSH2 0x2C96 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2DAD JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2DB9 DUP8 DUP3 DUP9 ADD PUSH2 0x2CB2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2DD7 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2DE0 DUP4 PUSH2 0x2C96 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2DF4 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2E11 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2E1A DUP4 PUSH2 0x2C96 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2E3A JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2E51 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2E64 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x2E72 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP7 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x2E86 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH1 0x20 SWAP3 SWAP1 SWAP3 ADD SWAP7 SWAP2 SWAP6 POP SWAP1 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2EAD JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2ECB JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2ED7 DUP9 DUP4 DUP10 ADD PUSH2 0x2CB2 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2EEC JUMPI DUP4 DUP5 REVERT JUMPDEST POP DUP6 ADD PUSH1 0x1F DUP2 ADD DUP8 SGT PUSH2 0x2EFD JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x2F0C DUP8 DUP3 CALLDATALOAD PUSH1 0x20 DUP5 ADD PUSH2 0x2C20 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP4 SWAP5 PUSH1 0x60 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2F2E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2CD1 DUP2 PUSH2 0x33E5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2F4A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2CD1 DUP2 PUSH2 0x33E5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2F67 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2F7E JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2F91 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x2F9F JUMPI DUP5 DUP6 REVERT JUMPDEST DUP7 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2E86 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2FC1 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2FE0 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x330D JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH2 0x3006 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x330D JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP5 PUSH1 0x60 SHL AND DUP2 MSTORE DUP3 PUSH1 0x14 DUP3 ADD MSTORE PUSH1 0x0 DUP3 MLOAD PUSH2 0x3040 DUP2 PUSH1 0x34 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x330D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x34 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x3061 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x330D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 SLOAD DUP3 PUSH1 0x1 DUP3 DUP2 SHR SWAP2 POP DUP1 DUP4 AND DUP1 PUSH2 0x3087 JUMPI PUSH1 0x7F DUP4 AND SWAP3 POP JUMPDEST PUSH1 0x20 DUP1 DUP5 LT DUP3 EQ ISZERO PUSH2 0x30A7 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP8 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 DUP8 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x30BB JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x30CC JUMPI PUSH2 0x30F8 JUMP JUMPDEST PUSH1 0xFF NOT DUP7 AND DUP10 MSTORE DUP5 DUP10 ADD SWAP7 POP PUSH2 0x30F8 JUMP JUMPDEST PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 DUP9 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x30F0 JUMPI DUP2 SLOAD DUP12 DUP3 ADD MSTORE SWAP1 DUP6 ADD SWAP1 DUP4 ADD PUSH2 0x30D7 JUMP JUMPDEST POP POP DUP5 DUP10 ADD SWAP7 POP JUMPDEST POP POP POP POP POP POP PUSH2 0x3108 DUP2 DUP6 PUSH2 0x2FF4 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x3144 SWAP1 DUP4 ADD DUP5 PUSH2 0x2FC8 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2CD1 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2FC8 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x32 SWAP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E7366657220746F206E6F6E204552433732315265 PUSH1 0x40 DUP3 ADD MSTORE PUSH18 0x31B2B4BB32B91034B6B83632B6B2B73A32B9 PUSH1 0x71 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xC SWAP1 DUP3 ADD MSTORE PUSH12 0x4F7574206F662073746F636B PUSH1 0xA0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2C SWAP1 DUP3 ADD MSTORE PUSH32 0x436F6E7472616374206D65746164617461206D6574686F647320617265206C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH12 0x31B5B2B2103337B932BB32B9 PUSH1 0xA1 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x31 SWAP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E736665722063616C6C6572206973206E6F74206F PUSH1 0x40 DUP3 ADD MSTORE PUSH17 0x1DDB995C881B9BDC88185C1C1C9BDD9959 PUSH1 0x7A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x32BE JUMPI PUSH2 0x32BE PUSH2 0x33A3 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x32D2 JUMPI PUSH2 0x32D2 PUSH2 0x33B9 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x32F1 JUMPI PUSH2 0x32F1 PUSH2 0x33A3 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3308 JUMPI PUSH2 0x3308 PUSH2 0x33A3 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3328 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3310 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1B43 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x334D JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x336E JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x3388 JUMPI PUSH2 0x3388 PUSH2 0x33A3 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x339E JUMPI PUSH2 0x339E PUSH2 0x33B9 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0xF18 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH19 0x8C04D1A0B578D0C1DA5F0FF806B04D67A56254 DUP8 PUSH12 0x37BD652D62F534D2B7F36473 PUSH16 0x6C6343000804003368747470733A2F2F EXTCODECOPY PUSH10 0x6E736572745F646F6D61 PUSH10 0x6E3E2F6D657461646174 PUSH2 0x2F00 ",
"sourceMap": "1218:66:13:-:0;531:6351;1218:66;;531:6351;1218:66;;;531:6351;1218:66;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1290:72:13;;;1320:42;-1:-1:-1;;;;;;1290:72:13;;;;;;;;1377:75;;;;;;;;;;;1638:1;1600:39;;962:47;;;;;;;;;-1:-1:-1;1316:113:1;;;;;;;;;;;-1:-1:-1;;;1316:113:1;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1316:113:1;;;;1382:13;;1316:113;;;1382:13;;-1:-1:-1;;1382:13:1;:::i;:::-;-1:-1:-1;1405:17:1;;;;:7;;:17;;;;;:::i;:::-;;1316:113;;867:23:0;877:12;:10;;;:12;;:::i;:::-;867:9;:23::i;:::-;531:6351:13;;587:96:8;666:10;;587:96::o;2041:169:0:-;2115:6;;;-1:-1:-1;;;;;2131:17:0;;;-1:-1:-1;;;;;;2131:17:0;;;;;;;2163:40;;2115:6;;;2131:17;2115:6;;2163:40;;2096:16;;2163:40;2041:169;;:::o;531:6351:13:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;531:6351:13;;;-1:-1:-1;531:6351:13;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:380:14;93:1;89:12;;;;136;;;157:2;;211:4;203:6;199:17;189:27;;157:2;264;256:6;253:14;233:18;230:38;227:2;;;310:10;305:3;301:20;298:1;291:31;345:4;342:1;335:15;373:4;370:1;363:15;227:2;;69:325;;;:::o;:::-;531:6351:13;;;;;;"
},
"deployedBytecode": {
"generatedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:27217:14",
"statements": [
{
"nodeType": "YulBlock",
"src": "6:3:14",
"statements": []
},
{
"body": {
"nodeType": "YulBlock",
"src": "88:557:14",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "98:28:14",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "108:18:14",
"type": "",
"value": "0xffffffffffffffff"
},
"variables": [
{
"name": "_1",
"nodeType": "YulTypedName",
"src": "102:2:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "153:22:14",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x41",
"nodeType": "YulIdentifier",
"src": "155:16:14"
},
"nodeType": "YulFunctionCall",
"src": "155:18:14"
},
"nodeType": "YulExpressionStatement",
"src": "155:18:14"
}
]
},
"condition": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "141:6:14"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "149:2:14"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "138:2:14"
},
"nodeType": "YulFunctionCall",
"src": "138:14:14"
},
"nodeType": "YulIf",
"src": "135:2:14"
},
{
"nodeType": "YulVariableDeclaration",
"src": "184:17:14",
"value": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "198:2:14",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "194:3:14"
},
"nodeType": "YulFunctionCall",
"src": "194:7:14"
},
"variables": [
{
"name": "_2",
"nodeType": "YulTypedName",
"src": "188:2:14",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "210:23:14",
"value": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "230:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "224:5:14"
},
"nodeType": "YulFunctionCall",
"src": "224:9:14"
},
"variables": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "214:6:14",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "242:73:14",
"value": {
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "264:6:14"
},
{
"arguments": [
{
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "288:6:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "296:2:14",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "284:3:14"
},
"nodeType": "YulFunctionCall",
"src": "284:15:14"
},
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "301:2:14"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "280:3:14"
},
"nodeType": "YulFunctionCall",
"src": "280:24:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "306:2:14",
"type": "",
"value": "63"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "276:3:14"
},
"nodeType": "YulFunctionCall",
"src": "276:33:14"
},
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "311:2:14"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "272:3:14"
},
"nodeType": "YulFunctionCall",
"src": "272:42:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "260:3:14"
},
"nodeType": "YulFunctionCall",
"src": "260:55:14"
},
"variables": [
{
"name": "newFreePtr",
"nodeType": "YulTypedName",
"src": "246:10:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "374:22:14",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x41",
"nodeType": "YulIdentifier",
"src": "376:16:14"
},
"nodeType": "YulFunctionCall",
"src": "376:18:14"
},
"nodeType": "YulExpressionStatement",
"src": "376:18:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "333:10:14"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "345:2:14"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "330:2:14"
},
"nodeType": "YulFunctionCall",
"src": "330:18:14"
},
{
"arguments": [
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "353:10:14"
},
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "365:6:14"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "350:2:14"
},
"nodeType": "YulFunctionCall",
"src": "350:22:14"
}
],
"functionName": {
"name": "or",
"nodeType": "YulIdentifier",
"src": "327:2:14"
},
"nodeType": "YulFunctionCall",
"src": "327:46:14"
},
"nodeType": "YulIf",
"src": "324:2:14"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "412:2:14",
"type": "",
"value": "64"
},
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "416:10:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "405:6:14"
},
"nodeType": "YulFunctionCall",
"src": "405:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "405:22:14"
},
{
"nodeType": "YulAssignment",
"src": "436:15:14",
"value": {
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "445:6:14"
},
"variableNames": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "436:5:14"
}
]
},
{
"expression": {
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "467:6:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "475:6:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "460:6:14"
},
"nodeType": "YulFunctionCall",
"src": "460:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "460:22:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "520:16:14",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "529:1:14",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "532:1:14",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "522:6:14"
},
"nodeType": "YulFunctionCall",
"src": "522:12:14"
},
"nodeType": "YulExpressionStatement",
"src": "522:12:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "501:3:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "506:6:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "497:3:14"
},
"nodeType": "YulFunctionCall",
"src": "497:16:14"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "515:3:14"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "494:2:14"
},
"nodeType": "YulFunctionCall",
"src": "494:25:14"
},
"nodeType": "YulIf",
"src": "491:2:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "562:6:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "570:4:14",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "558:3:14"
},
"nodeType": "YulFunctionCall",
"src": "558:17:14"
},
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "577:3:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "582:6:14"
}
],
"functionName": {
"name": "calldatacopy",
"nodeType": "YulIdentifier",
"src": "545:12:14"
},
"nodeType": "YulFunctionCall",
"src": "545:44:14"
},
"nodeType": "YulExpressionStatement",
"src": "545:44:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "613:6:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "621:6:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "609:3:14"
},
"nodeType": "YulFunctionCall",
"src": "609:19:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "630:4:14",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "605:3:14"
},
"nodeType": "YulFunctionCall",
"src": "605:30:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "637:1:14",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "598:6:14"
},
"nodeType": "YulFunctionCall",
"src": "598:41:14"
},
"nodeType": "YulExpressionStatement",
"src": "598:41:14"
}
]
},
"name": "abi_decode_available_length_bytes",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "src",
"nodeType": "YulTypedName",
"src": "57:3:14",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "62:6:14",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "70:3:14",
"type": ""
}
],
"returnVariables": [
{
"name": "array",
"nodeType": "YulTypedName",
"src": "78:5:14",
"type": ""
}
],
"src": "14:631:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "699:124:14",
"statements": [
{
"nodeType": "YulAssignment",
"src": "709:29:14",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "731:6:14"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "718:12:14"
},
"nodeType": "YulFunctionCall",
"src": "718:20:14"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "709:5:14"
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "801:16:14",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "810:1:14",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "813:1:14",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "803:6:14"
},
"nodeType": "YulFunctionCall",
"src": "803:12:14"
},
"nodeType": "YulExpressionStatement",
"src": "803:12:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "760:5:14"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "771:5:14"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "786:3:14",
"type": "",
"value": "160"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "791:1:14",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "782:3:14"
},
"nodeType": "YulFunctionCall",
"src": "782:11:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "795:1:14",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "778:3:14"
},
"nodeType": "YulFunctionCall",
"src": "778:19:14"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "767:3:14"
},
"nodeType": "YulFunctionCall",
"src": "767:31:14"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "757:2:14"
},
"nodeType": "YulFunctionCall",
"src": "757:42:14"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "750:6:14"
},
"nodeType": "YulFunctionCall",
"src": "750:50:14"
},
"nodeType": "YulIf",
"src": "747:2:14"
}
]
},
"name": "abi_decode_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "678:6:14",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "689:5:14",
"type": ""
}
],
"src": "650:173:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "880:176:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "929:24:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "938:5:14"
},
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "945:5:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "931:6:14"
},
"nodeType": "YulFunctionCall",
"src": "931:20:14"
},
"nodeType": "YulExpressionStatement",
"src": "931:20:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "908:6:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "916:4:14",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "904:3:14"
},
"nodeType": "YulFunctionCall",
"src": "904:17:14"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "923:3:14"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "900:3:14"
},
"nodeType": "YulFunctionCall",
"src": "900:27:14"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "893:6:14"
},
"nodeType": "YulFunctionCall",
"src": "893:35:14"
},
"nodeType": "YulIf",
"src": "890:2:14"
},
{
"nodeType": "YulAssignment",
"src": "962:88:14",
"value": {
"arguments": [
{
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1009:6:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1017:4:14",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1005:3:14"
},
"nodeType": "YulFunctionCall",
"src": "1005:17:14"
},
{
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1037:6:14"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1024:12:14"
},
"nodeType": "YulFunctionCall",
"src": "1024:20:14"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "1046:3:14"
}
],
"functionName": {
"name": "abi_decode_available_length_bytes",
"nodeType": "YulIdentifier",
"src": "971:33:14"
},
"nodeType": "YulFunctionCall",
"src": "971:79:14"
},
"variableNames": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "962:5:14"
}
]
}
]
},
"name": "abi_decode_bytes",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "854:6:14",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "862:3:14",
"type": ""
}
],
"returnVariables": [
{
"name": "array",
"nodeType": "YulTypedName",
"src": "870:5:14",
"type": ""
}
],
"src": "828:228:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1131:126:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "1177:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1186:6:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1194:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1179:6:14"
},
"nodeType": "YulFunctionCall",
"src": "1179:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "1179:22:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1152:7:14"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1161:9:14"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "1148:3:14"
},
"nodeType": "YulFunctionCall",
"src": "1148:23:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1173:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "1144:3:14"
},
"nodeType": "YulFunctionCall",
"src": "1144:32:14"
},
"nodeType": "YulIf",
"src": "1141:2:14"
},
{
"nodeType": "YulAssignment",
"src": "1212:39:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1241:9:14"
}
],
"functionName": {
"name": "abi_decode_address",
"nodeType": "YulIdentifier",
"src": "1222:18:14"
},
"nodeType": "YulFunctionCall",
"src": "1222:29:14"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1212:6:14"
}
]
}
]
},
"name": "abi_decode_tuple_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1097:9:14",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "1108:7:14",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1120:6:14",
"type": ""
}
],
"src": "1061:196:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1349:183:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "1395:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "1404:6:14"
},
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "1412:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1397:6:14"
},
"nodeType": "YulFunctionCall",
"src": "1397:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "1397:22:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1370:7:14"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1379:9:14"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "1366:3:14"
},
"nodeType": "YulFunctionCall",
"src": "1366:23:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1391:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "1362:3:14"
},
"nodeType": "YulFunctionCall",
"src": "1362:32:14"
},
"nodeType": "YulIf",
"src": "1359:2:14"
},
{
"nodeType": "YulAssignment",
"src": "1430:39:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1459:9:14"
}
],
"functionName": {
"name": "abi_decode_address",
"nodeType": "YulIdentifier",
"src": "1440:18:14"
},
"nodeType": "YulFunctionCall",
"src": "1440:29:14"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1430:6:14"
}
]
},
{
"nodeType": "YulAssignment",
"src": "1478:48:14",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1511:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1522:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1507:3:14"
},
"nodeType": "YulFunctionCall",
"src": "1507:18:14"
}
],
"functionName": {
"name": "abi_decode_address",
"nodeType": "YulIdentifier",
"src": "1488:18:14"
},
"nodeType": "YulFunctionCall",
"src": "1488:38:14"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "1478:6:14"
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1307:9:14",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "1318:7:14",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1330:6:14",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "1338:6:14",
"type": ""
}
],
"src": "1262:270:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1641:234:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "1687:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "1696:6:14"
},
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "1704:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1689:6:14"
},
"nodeType": "YulFunctionCall",
"src": "1689:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "1689:22:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1662:7:14"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1671:9:14"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "1658:3:14"
},
"nodeType": "YulFunctionCall",
"src": "1658:23:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1683:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "1654:3:14"
},
"nodeType": "YulFunctionCall",
"src": "1654:32:14"
},
"nodeType": "YulIf",
"src": "1651:2:14"
},
{
"nodeType": "YulAssignment",
"src": "1722:39:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1751:9:14"
}
],
"functionName": {
"name": "abi_decode_address",
"nodeType": "YulIdentifier",
"src": "1732:18:14"
},
"nodeType": "YulFunctionCall",
"src": "1732:29:14"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1722:6:14"
}
]
},
{
"nodeType": "YulAssignment",
"src": "1770:48:14",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1803:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1814:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1799:3:14"
},
"nodeType": "YulFunctionCall",
"src": "1799:18:14"
}
],
"functionName": {
"name": "abi_decode_address",
"nodeType": "YulIdentifier",
"src": "1780:18:14"
},
"nodeType": "YulFunctionCall",
"src": "1780:38:14"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "1770:6:14"
}
]
},
{
"nodeType": "YulAssignment",
"src": "1827:42:14",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1854:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1865:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1850:3:14"
},
"nodeType": "YulFunctionCall",
"src": "1850:18:14"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1837:12:14"
},
"nodeType": "YulFunctionCall",
"src": "1837:32:14"
},
"variableNames": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "1827:6:14"
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_addresst_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1591:9:14",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "1602:7:14",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1614:6:14",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "1622:6:14",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "1630:6:14",
"type": ""
}
],
"src": "1537:338:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2010:427:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2057:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "2066:6:14"
},
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "2074:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2059:6:14"
},
"nodeType": "YulFunctionCall",
"src": "2059:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "2059:22:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2031:7:14"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2040:9:14"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "2027:3:14"
},
"nodeType": "YulFunctionCall",
"src": "2027:23:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2052:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "2023:3:14"
},
"nodeType": "YulFunctionCall",
"src": "2023:33:14"
},
"nodeType": "YulIf",
"src": "2020:2:14"
},
{
"nodeType": "YulAssignment",
"src": "2092:39:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2121:9:14"
}
],
"functionName": {
"name": "abi_decode_address",
"nodeType": "YulIdentifier",
"src": "2102:18:14"
},
"nodeType": "YulFunctionCall",
"src": "2102:29:14"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2092:6:14"
}
]
},
{
"nodeType": "YulAssignment",
"src": "2140:48:14",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2173:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2184:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2169:3:14"
},
"nodeType": "YulFunctionCall",
"src": "2169:18:14"
}
],
"functionName": {
"name": "abi_decode_address",
"nodeType": "YulIdentifier",
"src": "2150:18:14"
},
"nodeType": "YulFunctionCall",
"src": "2150:38:14"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "2140:6:14"
}
]
},
{
"nodeType": "YulAssignment",
"src": "2197:42:14",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2224:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2235:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2220:3:14"
},
"nodeType": "YulFunctionCall",
"src": "2220:18:14"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "2207:12:14"
},
"nodeType": "YulFunctionCall",
"src": "2207:32:14"
},
"variableNames": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "2197:6:14"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "2248:46:14",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2279:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2290:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2275:3:14"
},
"nodeType": "YulFunctionCall",
"src": "2275:18:14"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "2262:12:14"
},
"nodeType": "YulFunctionCall",
"src": "2262:32:14"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "2252:6:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "2337:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "2346:6:14"
},
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "2354:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2339:6:14"
},
"nodeType": "YulFunctionCall",
"src": "2339:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "2339:22:14"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2309:6:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2317:18:14",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "2306:2:14"
},
"nodeType": "YulFunctionCall",
"src": "2306:30:14"
},
"nodeType": "YulIf",
"src": "2303:2:14"
},
{
"nodeType": "YulAssignment",
"src": "2372:59:14",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2403:9:14"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2414:6:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2399:3:14"
},
"nodeType": "YulFunctionCall",
"src": "2399:22:14"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2423:7:14"
}
],
"functionName": {
"name": "abi_decode_bytes",
"nodeType": "YulIdentifier",
"src": "2382:16:14"
},
"nodeType": "YulFunctionCall",
"src": "2382:49:14"
},
"variableNames": [
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "2372:6:14"
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1952:9:14",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "1963:7:14",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1975:6:14",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "1983:6:14",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "1991:6:14",
"type": ""
},
{
"name": "value3",
"nodeType": "YulTypedName",
"src": "1999:6:14",
"type": ""
}
],
"src": "1880:557:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2526:283:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2572:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2581:6:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2589:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2574:6:14"
},
"nodeType": "YulFunctionCall",
"src": "2574:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "2574:22:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2547:7:14"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2556:9:14"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "2543:3:14"
},
"nodeType": "YulFunctionCall",
"src": "2543:23:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2568:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "2539:3:14"
},
"nodeType": "YulFunctionCall",
"src": "2539:32:14"
},
"nodeType": "YulIf",
"src": "2536:2:14"
},
{
"nodeType": "YulAssignment",
"src": "2607:39:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2636:9:14"
}
],
"functionName": {
"name": "abi_decode_address",
"nodeType": "YulIdentifier",
"src": "2617:18:14"
},
"nodeType": "YulFunctionCall",
"src": "2617:29:14"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2607:6:14"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "2655:45:14",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2685:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2696:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2681:3:14"
},
"nodeType": "YulFunctionCall",
"src": "2681:18:14"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "2668:12:14"
},
"nodeType": "YulFunctionCall",
"src": "2668:32:14"
},
"variables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "2659:5:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "2753:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "2762:6:14"
},
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "2770:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2755:6:14"
},
"nodeType": "YulFunctionCall",
"src": "2755:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "2755:22:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2722:5:14"
},
{
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2743:5:14"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "2736:6:14"
},
"nodeType": "YulFunctionCall",
"src": "2736:13:14"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "2729:6:14"
},
"nodeType": "YulFunctionCall",
"src": "2729:21:14"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "2719:2:14"
},
"nodeType": "YulFunctionCall",
"src": "2719:32:14"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "2712:6:14"
},
"nodeType": "YulFunctionCall",
"src": "2712:40:14"
},
"nodeType": "YulIf",
"src": "2709:2:14"
},
{
"nodeType": "YulAssignment",
"src": "2788:15:14",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "2798:5:14"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "2788:6:14"
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_bool",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "2484:9:14",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "2495:7:14",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "2507:6:14",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "2515:6:14",
"type": ""
}
],
"src": "2442:367:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2901:177:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2947:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2956:6:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2964:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2949:6:14"
},
"nodeType": "YulFunctionCall",
"src": "2949:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "2949:22:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2922:7:14"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2931:9:14"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "2918:3:14"
},
"nodeType": "YulFunctionCall",
"src": "2918:23:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2943:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "2914:3:14"
},
"nodeType": "YulFunctionCall",
"src": "2914:32:14"
},
"nodeType": "YulIf",
"src": "2911:2:14"
},
{
"nodeType": "YulAssignment",
"src": "2982:39:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3011:9:14"
}
],
"functionName": {
"name": "abi_decode_address",
"nodeType": "YulIdentifier",
"src": "2992:18:14"
},
"nodeType": "YulFunctionCall",
"src": "2992:29:14"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2982:6:14"
}
]
},
{
"nodeType": "YulAssignment",
"src": "3030:42:14",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3057:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3068:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3053:3:14"
},
"nodeType": "YulFunctionCall",
"src": "3053:18:14"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "3040:12:14"
},
"nodeType": "YulFunctionCall",
"src": "3040:32:14"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "3030:6:14"
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "2859:9:14",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "2870:7:14",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "2882:6:14",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "2890:6:14",
"type": ""
}
],
"src": "2814:264:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3188:560:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "3234:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3243:6:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3251:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "3236:6:14"
},
"nodeType": "YulFunctionCall",
"src": "3236:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "3236:22:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "3209:7:14"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3218:9:14"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "3205:3:14"
},
"nodeType": "YulFunctionCall",
"src": "3205:23:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3230:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "3201:3:14"
},
"nodeType": "YulFunctionCall",
"src": "3201:32:14"
},
"nodeType": "YulIf",
"src": "3198:2:14"
},
{
"nodeType": "YulVariableDeclaration",
"src": "3269:37:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3296:9:14"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "3283:12:14"
},
"nodeType": "YulFunctionCall",
"src": "3283:23:14"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "3273:6:14",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "3315:28:14",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "3325:18:14",
"type": "",
"value": "0xffffffffffffffff"
},
"variables": [
{
"name": "_1",
"nodeType": "YulTypedName",
"src": "3319:2:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "3370:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3379:6:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3387:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "3372:6:14"
},
"nodeType": "YulFunctionCall",
"src": "3372:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "3372:22:14"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "3358:6:14"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "3366:2:14"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "3355:2:14"
},
"nodeType": "YulFunctionCall",
"src": "3355:14:14"
},
"nodeType": "YulIf",
"src": "3352:2:14"
},
{
"nodeType": "YulVariableDeclaration",
"src": "3405:32:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3419:9:14"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "3430:6:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3415:3:14"
},
"nodeType": "YulFunctionCall",
"src": "3415:22:14"
},
"variables": [
{
"name": "_2",
"nodeType": "YulTypedName",
"src": "3409:2:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "3485:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3494:6:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3502:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "3487:6:14"
},
"nodeType": "YulFunctionCall",
"src": "3487:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "3487:22:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "3464:2:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3468:4:14",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3460:3:14"
},
"nodeType": "YulFunctionCall",
"src": "3460:13:14"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "3475:7:14"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "3456:3:14"
},
"nodeType": "YulFunctionCall",
"src": "3456:27:14"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "3449:6:14"
},
"nodeType": "YulFunctionCall",
"src": "3449:35:14"
},
"nodeType": "YulIf",
"src": "3446:2:14"
},
{
"nodeType": "YulVariableDeclaration",
"src": "3520:30:14",
"value": {
"arguments": [
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "3547:2:14"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "3534:12:14"
},
"nodeType": "YulFunctionCall",
"src": "3534:16:14"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "3524:6:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "3577:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3586:6:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3594:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "3579:6:14"
},
"nodeType": "YulFunctionCall",
"src": "3579:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "3579:22:14"
}
]
},
"condition": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "3565:6:14"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "3573:2:14"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "3562:2:14"
},
"nodeType": "YulFunctionCall",
"src": "3562:14:14"
},
"nodeType": "YulIf",
"src": "3559:2:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3661:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3670:6:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3678:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "3663:6:14"
},
"nodeType": "YulFunctionCall",
"src": "3663:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "3663:22:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "3626:2:14"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3634:1:14",
"type": "",
"value": "5"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "3637:6:14"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "3630:3:14"
},
"nodeType": "YulFunctionCall",
"src": "3630:14:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3622:3:14"
},
"nodeType": "YulFunctionCall",
"src": "3622:23:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3647:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3618:3:14"
},
"nodeType": "YulFunctionCall",
"src": "3618:32:14"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "3652:7:14"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "3615:2:14"
},
"nodeType": "YulFunctionCall",
"src": "3615:45:14"
},
"nodeType": "YulIf",
"src": "3612:2:14"
},
{
"nodeType": "YulAssignment",
"src": "3696:21:14",
"value": {
"arguments": [
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "3710:2:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3714:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3706:3:14"
},
"nodeType": "YulFunctionCall",
"src": "3706:11:14"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3696:6:14"
}
]
},
{
"nodeType": "YulAssignment",
"src": "3726:16:14",
"value": {
"name": "length",
"nodeType": "YulIdentifier",
"src": "3736:6:14"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "3726:6:14"
}
]
}
]
},
"name": "abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "3146:9:14",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "3157:7:14",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "3169:6:14",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "3177:6:14",
"type": ""
}
],
"src": "3083:665:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3893:706:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "3940:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3949:6:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3957:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "3942:6:14"
},
"nodeType": "YulFunctionCall",
"src": "3942:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "3942:22:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "3914:7:14"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3923:9:14"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "3910:3:14"
},
"nodeType": "YulFunctionCall",
"src": "3910:23:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3935:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "3906:3:14"
},
"nodeType": "YulFunctionCall",
"src": "3906:33:14"
},
"nodeType": "YulIf",
"src": "3903:2:14"
},
{
"nodeType": "YulAssignment",
"src": "3975:33:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3998:9:14"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "3985:12:14"
},
"nodeType": "YulFunctionCall",
"src": "3985:23:14"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3975:6:14"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "4017:46:14",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4048:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4059:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4044:3:14"
},
"nodeType": "YulFunctionCall",
"src": "4044:18:14"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "4031:12:14"
},
"nodeType": "YulFunctionCall",
"src": "4031:32:14"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "4021:6:14",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "4072:28:14",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "4082:18:14",
"type": "",
"value": "0xffffffffffffffff"
},
"variables": [
{
"name": "_1",
"nodeType": "YulTypedName",
"src": "4076:2:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "4127:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "4136:6:14"
},
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "4144:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "4129:6:14"
},
"nodeType": "YulFunctionCall",
"src": "4129:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "4129:22:14"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "4115:6:14"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "4123:2:14"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "4112:2:14"
},
"nodeType": "YulFunctionCall",
"src": "4112:14:14"
},
"nodeType": "YulIf",
"src": "4109:2:14"
},
{
"nodeType": "YulAssignment",
"src": "4162:59:14",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4193:9:14"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "4204:6:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4189:3:14"
},
"nodeType": "YulFunctionCall",
"src": "4189:22:14"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "4213:7:14"
}
],
"functionName": {
"name": "abi_decode_bytes",
"nodeType": "YulIdentifier",
"src": "4172:16:14"
},
"nodeType": "YulFunctionCall",
"src": "4172:49:14"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "4162:6:14"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "4230:48:14",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4263:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4274:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4259:3:14"
},
"nodeType": "YulFunctionCall",
"src": "4259:18:14"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "4246:12:14"
},
"nodeType": "YulFunctionCall",
"src": "4246:32:14"
},
"variables": [
{
"name": "offset_1",
"nodeType": "YulTypedName",
"src": "4234:8:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "4307:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "4316:6:14"
},
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "4324:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "4309:6:14"
},
"nodeType": "YulFunctionCall",
"src": "4309:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "4309:22:14"
}
]
},
"condition": {
"arguments": [
{
"name": "offset_1",
"nodeType": "YulIdentifier",
"src": "4293:8:14"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "4303:2:14"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "4290:2:14"
},
"nodeType": "YulFunctionCall",
"src": "4290:16:14"
},
"nodeType": "YulIf",
"src": "4287:2:14"
},
{
"nodeType": "YulVariableDeclaration",
"src": "4342:34:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4356:9:14"
},
{
"name": "offset_1",
"nodeType": "YulIdentifier",
"src": "4367:8:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4352:3:14"
},
"nodeType": "YulFunctionCall",
"src": "4352:24:14"
},
"variables": [
{
"name": "_2",
"nodeType": "YulTypedName",
"src": "4346:2:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "4424:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "4433:6:14"
},
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "4441:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "4426:6:14"
},
"nodeType": "YulFunctionCall",
"src": "4426:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "4426:22:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "4403:2:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4407:4:14",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4399:3:14"
},
"nodeType": "YulFunctionCall",
"src": "4399:13:14"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "4414:7:14"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "4395:3:14"
},
"nodeType": "YulFunctionCall",
"src": "4395:27:14"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "4388:6:14"
},
"nodeType": "YulFunctionCall",
"src": "4388:35:14"
},
"nodeType": "YulIf",
"src": "4385:2:14"
},
{
"nodeType": "YulAssignment",
"src": "4459:83:14",
"value": {
"arguments": [
{
"arguments": [
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "4507:2:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4511:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4503:3:14"
},
"nodeType": "YulFunctionCall",
"src": "4503:11:14"
},
{
"arguments": [
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "4529:2:14"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "4516:12:14"
},
"nodeType": "YulFunctionCall",
"src": "4516:16:14"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "4534:7:14"
}
],
"functionName": {
"name": "abi_decode_available_length_bytes",
"nodeType": "YulIdentifier",
"src": "4469:33:14"
},
"nodeType": "YulFunctionCall",
"src": "4469:73:14"
},
"variableNames": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "4459:6:14"
}
]
},
{
"nodeType": "YulAssignment",
"src": "4551:42:14",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4578:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4589:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4574:3:14"
},
"nodeType": "YulFunctionCall",
"src": "4574:18:14"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "4561:12:14"
},
"nodeType": "YulFunctionCall",
"src": "4561:32:14"
},
"variableNames": [
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "4551:6:14"
}
]
}
]
},
"name": "abi_decode_tuple_t_bytes32t_bytes_memory_ptrt_string_memory_ptrt_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "3835:9:14",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "3846:7:14",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "3858:6:14",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "3866:6:14",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "3874:6:14",
"type": ""
},
{
"name": "value3",
"nodeType": "YulTypedName",
"src": "3882:6:14",
"type": ""
}
],
"src": "3753:846:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4673:186:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "4719:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "4728:6:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "4736:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "4721:6:14"
},
"nodeType": "YulFunctionCall",
"src": "4721:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "4721:22:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "4694:7:14"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4703:9:14"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "4690:3:14"
},
"nodeType": "YulFunctionCall",
"src": "4690:23:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4715:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "4686:3:14"
},
"nodeType": "YulFunctionCall",
"src": "4686:32:14"
},
"nodeType": "YulIf",
"src": "4683:2:14"
},
{
"nodeType": "YulVariableDeclaration",
"src": "4754:36:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4780:9:14"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "4767:12:14"
},
"nodeType": "YulFunctionCall",
"src": "4767:23:14"
},
"variables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "4758:5:14",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "4823:5:14"
}
],
"functionName": {
"name": "validator_revert_bytes4",
"nodeType": "YulIdentifier",
"src": "4799:23:14"
},
"nodeType": "YulFunctionCall",
"src": "4799:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "4799:30:14"
},
{
"nodeType": "YulAssignment",
"src": "4838:15:14",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "4848:5:14"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "4838:6:14"
}
]
}
]
},
"name": "abi_decode_tuple_t_bytes4",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "4639:9:14",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "4650:7:14",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "4662:6:14",
"type": ""
}
],
"src": "4604:255:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4944:179:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "4990:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "4999:6:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5007:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "4992:6:14"
},
"nodeType": "YulFunctionCall",
"src": "4992:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "4992:22:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "4965:7:14"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4974:9:14"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "4961:3:14"
},
"nodeType": "YulFunctionCall",
"src": "4961:23:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4986:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "4957:3:14"
},
"nodeType": "YulFunctionCall",
"src": "4957:32:14"
},
"nodeType": "YulIf",
"src": "4954:2:14"
},
{
"nodeType": "YulVariableDeclaration",
"src": "5025:29:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5044:9:14"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "5038:5:14"
},
"nodeType": "YulFunctionCall",
"src": "5038:16:14"
},
"variables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "5029:5:14",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "5087:5:14"
}
],
"functionName": {
"name": "validator_revert_bytes4",
"nodeType": "YulIdentifier",
"src": "5063:23:14"
},
"nodeType": "YulFunctionCall",
"src": "5063:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "5063:30:14"
},
{
"nodeType": "YulAssignment",
"src": "5102:15:14",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "5112:5:14"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5102:6:14"
}
]
}
]
},
"name": "abi_decode_tuple_t_bytes4_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "4910:9:14",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "4921:7:14",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "4933:6:14",
"type": ""
}
],
"src": "4864:259:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5218:552:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "5264:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5273:6:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5281:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "5266:6:14"
},
"nodeType": "YulFunctionCall",
"src": "5266:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "5266:22:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "5239:7:14"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5248:9:14"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "5235:3:14"
},
"nodeType": "YulFunctionCall",
"src": "5235:23:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5260:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "5231:3:14"
},
"nodeType": "YulFunctionCall",
"src": "5231:32:14"
},
"nodeType": "YulIf",
"src": "5228:2:14"
},
{
"nodeType": "YulVariableDeclaration",
"src": "5299:37:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5326:9:14"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "5313:12:14"
},
"nodeType": "YulFunctionCall",
"src": "5313:23:14"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "5303:6:14",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "5345:28:14",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "5355:18:14",
"type": "",
"value": "0xffffffffffffffff"
},
"variables": [
{
"name": "_1",
"nodeType": "YulTypedName",
"src": "5349:2:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "5400:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5409:6:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5417:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "5402:6:14"
},
"nodeType": "YulFunctionCall",
"src": "5402:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "5402:22:14"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "5388:6:14"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "5396:2:14"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "5385:2:14"
},
"nodeType": "YulFunctionCall",
"src": "5385:14:14"
},
"nodeType": "YulIf",
"src": "5382:2:14"
},
{
"nodeType": "YulVariableDeclaration",
"src": "5435:32:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5449:9:14"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "5460:6:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5445:3:14"
},
"nodeType": "YulFunctionCall",
"src": "5445:22:14"
},
"variables": [
{
"name": "_2",
"nodeType": "YulTypedName",
"src": "5439:2:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "5515:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5524:6:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5532:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "5517:6:14"
},
"nodeType": "YulFunctionCall",
"src": "5517:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "5517:22:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "5494:2:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5498:4:14",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5490:3:14"
},
"nodeType": "YulFunctionCall",
"src": "5490:13:14"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "5505:7:14"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "5486:3:14"
},
"nodeType": "YulFunctionCall",
"src": "5486:27:14"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "5479:6:14"
},
"nodeType": "YulFunctionCall",
"src": "5479:35:14"
},
"nodeType": "YulIf",
"src": "5476:2:14"
},
{
"nodeType": "YulVariableDeclaration",
"src": "5550:30:14",
"value": {
"arguments": [
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "5577:2:14"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "5564:12:14"
},
"nodeType": "YulFunctionCall",
"src": "5564:16:14"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "5554:6:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "5607:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5616:6:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5624:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "5609:6:14"
},
"nodeType": "YulFunctionCall",
"src": "5609:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "5609:22:14"
}
]
},
"condition": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "5595:6:14"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "5603:2:14"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "5592:2:14"
},
"nodeType": "YulFunctionCall",
"src": "5592:14:14"
},
"nodeType": "YulIf",
"src": "5589:2:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5683:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5692:6:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5700:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "5685:6:14"
},
"nodeType": "YulFunctionCall",
"src": "5685:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "5685:22:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "5656:2:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "5660:6:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5652:3:14"
},
"nodeType": "YulFunctionCall",
"src": "5652:15:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5669:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5648:3:14"
},
"nodeType": "YulFunctionCall",
"src": "5648:24:14"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "5674:7:14"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "5645:2:14"
},
"nodeType": "YulFunctionCall",
"src": "5645:37:14"
},
"nodeType": "YulIf",
"src": "5642:2:14"
},
{
"nodeType": "YulAssignment",
"src": "5718:21:14",
"value": {
"arguments": [
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "5732:2:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5736:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5728:3:14"
},
"nodeType": "YulFunctionCall",
"src": "5728:11:14"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5718:6:14"
}
]
},
{
"nodeType": "YulAssignment",
"src": "5748:16:14",
"value": {
"name": "length",
"nodeType": "YulIdentifier",
"src": "5758:6:14"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "5748:6:14"
}
]
}
]
},
"name": "abi_decode_tuple_t_string_calldata_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "5176:9:14",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "5187:7:14",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "5199:6:14",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "5207:6:14",
"type": ""
}
],
"src": "5128:642:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5845:120:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "5891:26:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5900:6:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5908:6:14"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "5893:6:14"
},
"nodeType": "YulFunctionCall",
"src": "5893:22:14"
},
"nodeType": "YulExpressionStatement",
"src": "5893:22:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "5866:7:14"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5875:9:14"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "5862:3:14"
},
"nodeType": "YulFunctionCall",
"src": "5862:23:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5887:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "5858:3:14"
},
"nodeType": "YulFunctionCall",
"src": "5858:32:14"
},
"nodeType": "YulIf",
"src": "5855:2:14"
},
{
"nodeType": "YulAssignment",
"src": "5926:33:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5949:9:14"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "5936:12:14"
},
"nodeType": "YulFunctionCall",
"src": "5936:23:14"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5926:6:14"
}
]
}
]
},
"name": "abi_decode_tuple_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "5811:9:14",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "5822:7:14",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "5834:6:14",
"type": ""
}
],
"src": "5775:190:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6019:208:14",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "6029:26:14",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "6049:5:14"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "6043:5:14"
},
"nodeType": "YulFunctionCall",
"src": "6043:12:14"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "6033:6:14",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "6071:3:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6076:6:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "6064:6:14"
},
"nodeType": "YulFunctionCall",
"src": "6064:19:14"
},
"nodeType": "YulExpressionStatement",
"src": "6064:19:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "6118:5:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6125:4:14",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6114:3:14"
},
"nodeType": "YulFunctionCall",
"src": "6114:16:14"
},
{
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "6136:3:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6141:4:14",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6132:3:14"
},
"nodeType": "YulFunctionCall",
"src": "6132:14:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6148:6:14"
}
],
"functionName": {
"name": "copy_memory_to_memory",
"nodeType": "YulIdentifier",
"src": "6092:21:14"
},
"nodeType": "YulFunctionCall",
"src": "6092:63:14"
},
"nodeType": "YulExpressionStatement",
"src": "6092:63:14"
},
{
"nodeType": "YulAssignment",
"src": "6164:57:14",
"value": {
"arguments": [
{
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "6179:3:14"
},
{
"arguments": [
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6192:6:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6200:2:14",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6188:3:14"
},
"nodeType": "YulFunctionCall",
"src": "6188:15:14"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6209:2:14",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "6205:3:14"
},
"nodeType": "YulFunctionCall",
"src": "6205:7:14"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "6184:3:14"
},
"nodeType": "YulFunctionCall",
"src": "6184:29:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6175:3:14"
},
"nodeType": "YulFunctionCall",
"src": "6175:39:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6216:4:14",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6171:3:14"
},
"nodeType": "YulFunctionCall",
"src": "6171:50:14"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "6164:3:14"
}
]
}
]
},
"name": "abi_encode_bytes",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "5996:5:14",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "6003:3:14",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "6011:3:14",
"type": ""
}
],
"src": "5970:257:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6282:135:14",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "6292:26:14",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "6312:5:14"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "6306:5:14"
},
"nodeType": "YulFunctionCall",
"src": "6306:12:14"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "6296:6:14",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "6353:5:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6360:4:14",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6349:3:14"
},
"nodeType": "YulFunctionCall",
"src": "6349:16:14"
},
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "6367:3:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6372:6:14"
}
],
"functionName": {
"name": "copy_memory_to_memory",
"nodeType": "YulIdentifier",
"src": "6327:21:14"
},
"nodeType": "YulFunctionCall",
"src": "6327:52:14"
},
"nodeType": "YulExpressionStatement",
"src": "6327:52:14"
},
{
"nodeType": "YulAssignment",
"src": "6388:23:14",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "6399:3:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6404:6:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6395:3:14"
},
"nodeType": "YulFunctionCall",
"src": "6395:16:14"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "6388:3:14"
}
]
}
]
},
"name": "abi_encode_string",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "6259:5:14",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "6266:3:14",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "6274:3:14",
"type": ""
}
],
"src": "6232:185:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6617:267:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "6634:3:14"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6647:2:14",
"type": "",
"value": "96"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "6651:6:14"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "6643:3:14"
},
"nodeType": "YulFunctionCall",
"src": "6643:15:14"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6664:26:14",
"type": "",
"value": "0xffffffffffffffffffffffff"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "6660:3:14"
},
"nodeType": "YulFunctionCall",
"src": "6660:31:14"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "6639:3:14"
},
"nodeType": "YulFunctionCall",
"src": "6639:53:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "6627:6:14"
},
"nodeType": "YulFunctionCall",
"src": "6627:66:14"
},
"nodeType": "YulExpressionStatement",
"src": "6627:66:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "6713:3:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6718:2:14",
"type": "",
"value": "20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6709:3:14"
},
"nodeType": "YulFunctionCall",
"src": "6709:12:14"
},
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "6723:6:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "6702:6:14"
},
"nodeType": "YulFunctionCall",
"src": "6702:28:14"
},
"nodeType": "YulExpressionStatement",
"src": "6702:28:14"
},
{
"nodeType": "YulVariableDeclaration",
"src": "6739:27:14",
"value": {
"arguments": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "6759:6:14"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "6753:5:14"
},
"nodeType": "YulFunctionCall",
"src": "6753:13:14"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "6743:6:14",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "6801:6:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6809:4:14",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6797:3:14"
},
"nodeType": "YulFunctionCall",
"src": "6797:17:14"
},
{
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "6820:3:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6825:2:14",
"type": "",
"value": "52"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6816:3:14"
},
"nodeType": "YulFunctionCall",
"src": "6816:12:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6830:6:14"
}
],
"functionName": {
"name": "copy_memory_to_memory",
"nodeType": "YulIdentifier",
"src": "6775:21:14"
},
"nodeType": "YulFunctionCall",
"src": "6775:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "6775:62:14"
},
{
"nodeType": "YulAssignment",
"src": "6846:32:14",
"value": {
"arguments": [
{
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "6861:3:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6866:6:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6857:3:14"
},
"nodeType": "YulFunctionCall",
"src": "6857:16:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6875:2:14",
"type": "",
"value": "52"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6853:3:14"
},
"nodeType": "YulFunctionCall",
"src": "6853:25:14"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "6846:3:14"
}
]
}
]
},
"name": "abi_encode_tuple_packed_t_address_t_uint256_t_string_memory_ptr__to_t_address_t_uint256_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "6577:3:14",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "6582:6:14",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "6590:6:14",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "6598:6:14",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "6609:3:14",
"type": ""
}
],
"src": "6422:462:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "7028:137:14",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "7038:27:14",
"value": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "7058:6:14"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "7052:5:14"
},
"nodeType": "YulFunctionCall",
"src": "7052:13:14"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "7042:6:14",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "7100:6:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7108:4:14",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7096:3:14"
},
"nodeType": "YulFunctionCall",
"src": "7096:17:14"
},
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "7115:3:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "7120:6:14"
}
],
"functionName": {
"name": "copy_memory_to_memory",
"nodeType": "YulIdentifier",
"src": "7074:21:14"
},
"nodeType": "YulFunctionCall",
"src": "7074:53:14"
},
"nodeType": "YulExpressionStatement",
"src": "7074:53:14"
},
{
"nodeType": "YulAssignment",
"src": "7136:23:14",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "7147:3:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "7152:6:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7143:3:14"
},
"nodeType": "YulFunctionCall",
"src": "7143:16:14"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "7136:3:14"
}
]
}
]
},
"name": "abi_encode_tuple_packed_t_string_memory_ptr__to_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "7004:3:14",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "7009:6:14",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "7020:3:14",
"type": ""
}
],
"src": "6889:276:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "7354:994:14",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "7364:14:14",
"value": {
"name": "end",
"nodeType": "YulIdentifier",
"src": "7375:3:14"
},
"variables": [
{
"name": "ret",
"nodeType": "YulTypedName",
"src": "7368:3:14",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "7387:30:14",
"value": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "7410:6:14"
}
],
"functionName": {
"name": "sload",
"nodeType": "YulIdentifier",
"src": "7404:5:14"
},
"nodeType": "YulFunctionCall",
"src": "7404:13:14"
},
"variables": [
{
"name": "slotValue",
"nodeType": "YulTypedName",
"src": "7391:9:14",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "7426:17:14",
"value": {
"name": "end",
"nodeType": "YulIdentifier",
"src": "7440:3:14"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "7430:6:14",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "7452:11:14",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "7462:1:14",
"type": "",
"value": "1"
},
"variables": [
{
"name": "_1",
"nodeType": "YulTypedName",
"src": "7456:2:14",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "7472:28:14",
"value": {
"arguments": [
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "7486:2:14"
},
{
"name": "slotValue",
"nodeType": "YulIdentifier",
"src": "7490:9:14"
}
],
"functionName": {
"name": "shr",
"nodeType": "YulIdentifier",
"src": "7482:3:14"
},
"nodeType": "YulFunctionCall",
"src": "7482:18:14"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "7472:6:14"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "7509:44:14",
"value": {
"arguments": [
{
"name": "slotValue",
"nodeType": "YulIdentifier",
"src": "7539:9:14"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "7550:2:14"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "7535:3:14"
},
"nodeType": "YulFunctionCall",
"src": "7535:18:14"
},
"variables": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulTypedName",
"src": "7513:18:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "7592:31:14",
"statements": [
{
"nodeType": "YulAssignment",
"src": "7594:27:14",
"value": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "7608:6:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7616:4:14",
"type": "",
"value": "0x7f"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "7604:3:14"
},
"nodeType": "YulFunctionCall",
"src": "7604:17:14"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "7594:6:14"
}
]
}
]
},
"condition": {
"arguments": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulIdentifier",
"src": "7572:18:14"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "7565:6:14"
},
"nodeType": "YulFunctionCall",
"src": "7565:26:14"
},
"nodeType": "YulIf",
"src": "7562:2:14"
},
{
"nodeType": "YulVariableDeclaration",
"src": "7632:12:14",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "7642:2:14",
"type": "",
"value": "32"
},
"variables": [
{
"name": "_2",
"nodeType": "YulTypedName",
"src": "7636:2:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "7703:115:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "7724:3:14"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7733:3:14",
"type": "",
"value": "224"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7738:10:14",
"type": "",
"value": "0x4e487b71"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "7729:3:14"
},
"nodeType": "YulFunctionCall",
"src": "7729:20:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "7717:6:14"
},
"nodeType": "YulFunctionCall",
"src": "7717:33:14"
},
"nodeType": "YulExpressionStatement",
"src": "7717:33:14"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7770:1:14",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7773:4:14",
"type": "",
"value": "0x22"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "7763:6:14"
},
"nodeType": "YulFunctionCall",
"src": "7763:15:14"
},
"nodeType": "YulExpressionStatement",
"src": "7763:15:14"
},
{
"expression": {
"arguments": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "7798:3:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7803:4:14",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "7791:6:14"
},
"nodeType": "YulFunctionCall",
"src": "7791:17:14"
},
"nodeType": "YulExpressionStatement",
"src": "7791:17:14"
}
]
},
"condition": {
"arguments": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulIdentifier",
"src": "7659:18:14"
},
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "7682:6:14"
},
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "7690:2:14"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "7679:2:14"
},
"nodeType": "YulFunctionCall",
"src": "7679:14:14"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "7656:2:14"
},
"nodeType": "YulFunctionCall",
"src": "7656:38:14"
},
"nodeType": "YulIf",
"src": "7653:2:14"
},
{
"cases": [
{
"body": {
"nodeType": "YulBlock",
"src": "7868:97:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "7889:3:14"
},
{
"arguments": [
{
"name": "slotValue",
"nodeType": "YulIdentifier",
"src": "7898:9:14"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7913:3:14",
"type": "",
"value": "255"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "7909:3:14"
},
"nodeType": "YulFunctionCall",
"src": "7909:8:14"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "7894:3:14"
},
"nodeType": "YulFunctionCall",
"src": "7894:24:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "7882:6:14"
},
"nodeType": "YulFunctionCall",
"src": "7882:37:14"
},
"nodeType": "YulExpressionStatement",
"src": "7882:37:14"
},
{
"nodeType": "YulAssignment",
"src": "7932:23:14",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "7943:3:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "7948:6:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7939:3:14"
},
"nodeType": "YulFunctionCall",
"src": "7939:16:14"
},
"variableNames": [
{
"name": "ret",
"nodeType": "YulIdentifier",
"src": "7932:3:14"
}
]
}
]
},
"nodeType": "YulCase",
"src": "7861:104:14",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "7866:1:14",
"type": "",
"value": "0"
}
},
{
"body": {
"nodeType": "YulBlock",
"src": "7981:315:14",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "7995:52:14",
"value": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "8040:6:14"
}
],
"functionName": {
"name": "array_dataslot_string_storage",
"nodeType": "YulIdentifier",
"src": "8010:29:14"
},
"nodeType": "YulFunctionCall",
"src": "8010:37:14"
},
"variables": [
{
"name": "dataPos",
"nodeType": "YulTypedName",
"src": "7999:7:14",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "8060:12:14",
"value": {
"name": "end",
"nodeType": "YulIdentifier",
"src": "8069:3:14"
},
"variables": [
{
"name": "i",
"nodeType": "YulTypedName",
"src": "8064:1:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "8139:111:14",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "8168:3:14"
},
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "8173:1:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8164:3:14"
},
"nodeType": "YulFunctionCall",
"src": "8164:11:14"
},
{
"arguments": [
{
"name": "dataPos",
"nodeType": "YulIdentifier",
"src": "8183:7:14"
}
],
"functionName": {
"name": "sload",
"nodeType": "YulIdentifier",
"src": "8177:5:14"
},
"nodeType": "YulFunctionCall",
"src": "8177:14:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8157:6:14"
},
"nodeType": "YulFunctionCall",
"src": "8157:35:14"
},
"nodeType": "YulExpressionStatement",
"src": "8157:35:14"
},
{
"nodeType": "YulAssignment",
"src": "8209:27:14",
"value": {
"arguments": [
{
"name": "dataPos",
"nodeType": "YulIdentifier",
"src": "8224:7:14"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "8233:2:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8220:3:14"
},
"nodeType": "YulFunctionCall",
"src": "8220:16:14"
},
"variableNames": [
{
"name": "dataPos",
"nodeType": "YulIdentifier",
"src": "8209:7:14"
}
]
}
]
},
"condition": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "8096:1:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "8099:6:14"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "8093:2:14"
},
"nodeType": "YulFunctionCall",
"src": "8093:13:14"
},
"nodeType": "YulForLoop",
"post": {
"nodeType": "YulBlock",
"src": "8107:19:14",
"statements": [
{
"nodeType": "YulAssignment",
"src": "8109:15:14",
"value": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "8118:1:14"
},
{
"name": "_2",
"nodeType": "YulIdentifier",
"src": "8121:2:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8114:3:14"
},
"nodeType": "YulFunctionCall",
"src": "8114:10:14"
},
"variableNames": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "8109:1:14"
}
]
}
]
},
"pre": {
"nodeType": "YulBlock",
"src": "8089:3:14",
"statements": []
},
"src": "8085:165:14"
},
{
"nodeType": "YulAssignment",
"src": "8263:23:14",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "8274:3:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "8279:6:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8270:3:14"
},
"nodeType": "YulFunctionCall",
"src": "8270:16:14"
},
"variableNames": [
{
"name": "ret",
"nodeType": "YulIdentifier",
"src": "8263:3:14"
}
]
}
]
},
"nodeType": "YulCase",
"src": "7974:322:14",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "7979:1:14",
"type": "",
"value": "1"
}
}
],
"expression": {
"name": "outOfPlaceEncoding",
"nodeType": "YulIdentifier",
"src": "7834:18:14"
},
"nodeType": "YulSwitch",
"src": "7827:469:14"
},
{
"nodeType": "YulAssignment",
"src": "8305:37:14",
"value": {
"arguments": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "8330:6:14"
},
{
"name": "ret",
"nodeType": "YulIdentifier",
"src": "8338:3:14"
}
],
"functionName": {
"name": "abi_encode_string",
"nodeType": "YulIdentifier",
"src": "8312:17:14"
},
"nodeType": "YulFunctionCall",
"src": "8312:30:14"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "8305:3:14"
}
]
}
]
},
"name": "abi_encode_tuple_packed_t_string_storage_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "7322:3:14",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "7327:6:14",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "7335:6:14",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "7346:3:14",
"type": ""
}
],
"src": "7170:1178:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "8573:160:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "8590:3:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8595:66:14",
"type": "",
"value": "0x19457468657265756d205369676e6564204d6573736167653a0a333200000000"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8583:6:14"
},
"nodeType": "YulFunctionCall",
"src": "8583:79:14"
},
"nodeType": "YulExpressionStatement",
"src": "8583:79:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "8682:3:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8687:2:14",
"type": "",
"value": "28"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8678:3:14"
},
"nodeType": "YulFunctionCall",
"src": "8678:12:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "8692:6:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8671:6:14"
},
"nodeType": "YulFunctionCall",
"src": "8671:28:14"
},
"nodeType": "YulExpressionStatement",
"src": "8671:28:14"
},
{
"nodeType": "YulAssignment",
"src": "8708:19:14",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "8719:3:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8724:2:14",
"type": "",
"value": "60"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8715:3:14"
},
"nodeType": "YulFunctionCall",
"src": "8715:12:14"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "8708:3:14"
}
]
}
]
},
"name": "abi_encode_tuple_packed_t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73_t_bytes32__to_t_string_memory_ptr_t_bytes32__nonPadded_inplace_fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "8549:3:14",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "8554:6:14",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "8565:3:14",
"type": ""
}
],
"src": "8353:380:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "8839:102:14",
"statements": [
{
"nodeType": "YulAssignment",
"src": "8849:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8861:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8872:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8857:3:14"
},
"nodeType": "YulFunctionCall",
"src": "8857:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "8849:4:14"
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8891:9:14"
},
{
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "8906:6:14"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8922:3:14",
"type": "",
"value": "160"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8927:1:14",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "8918:3:14"
},
"nodeType": "YulFunctionCall",
"src": "8918:11:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8931:1:14",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "8914:3:14"
},
"nodeType": "YulFunctionCall",
"src": "8914:19:14"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "8902:3:14"
},
"nodeType": "YulFunctionCall",
"src": "8902:32:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8884:6:14"
},
"nodeType": "YulFunctionCall",
"src": "8884:51:14"
},
"nodeType": "YulExpressionStatement",
"src": "8884:51:14"
}
]
},
"name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "8808:9:14",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "8819:6:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "8830:4:14",
"type": ""
}
],
"src": "8738:203:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "9149:285:14",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "9159:29:14",
"value": {
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9177:3:14",
"type": "",
"value": "160"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9182:1:14",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "9173:3:14"
},
"nodeType": "YulFunctionCall",
"src": "9173:11:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9186:1:14",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "9169:3:14"
},
"nodeType": "YulFunctionCall",
"src": "9169:19:14"
},
"variables": [
{
"name": "_1",
"nodeType": "YulTypedName",
"src": "9163:2:14",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9204:9:14"
},
{
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "9219:6:14"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "9227:2:14"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "9215:3:14"
},
"nodeType": "YulFunctionCall",
"src": "9215:15:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9197:6:14"
},
"nodeType": "YulFunctionCall",
"src": "9197:34:14"
},
"nodeType": "YulExpressionStatement",
"src": "9197:34:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9251:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9262:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9247:3:14"
},
"nodeType": "YulFunctionCall",
"src": "9247:18:14"
},
{
"arguments": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "9271:6:14"
},
{
"name": "_1",
"nodeType": "YulIdentifier",
"src": "9279:2:14"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "9267:3:14"
},
"nodeType": "YulFunctionCall",
"src": "9267:15:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9240:6:14"
},
"nodeType": "YulFunctionCall",
"src": "9240:43:14"
},
"nodeType": "YulExpressionStatement",
"src": "9240:43:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9303:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9314:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9299:3:14"
},
"nodeType": "YulFunctionCall",
"src": "9299:18:14"
},
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "9319:6:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9292:6:14"
},
"nodeType": "YulFunctionCall",
"src": "9292:34:14"
},
"nodeType": "YulExpressionStatement",
"src": "9292:34:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9346:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9357:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9342:3:14"
},
"nodeType": "YulFunctionCall",
"src": "9342:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9362:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9335:6:14"
},
"nodeType": "YulFunctionCall",
"src": "9335:31:14"
},
"nodeType": "YulExpressionStatement",
"src": "9335:31:14"
},
{
"nodeType": "YulAssignment",
"src": "9375:53:14",
"value": {
"arguments": [
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "9400:6:14"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9412:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9423:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9408:3:14"
},
"nodeType": "YulFunctionCall",
"src": "9408:19:14"
}
],
"functionName": {
"name": "abi_encode_bytes",
"nodeType": "YulIdentifier",
"src": "9383:16:14"
},
"nodeType": "YulFunctionCall",
"src": "9383:45:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "9375:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "9094:9:14",
"type": ""
},
{
"name": "value3",
"nodeType": "YulTypedName",
"src": "9105:6:14",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "9113:6:14",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "9121:6:14",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "9129:6:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "9140:4:14",
"type": ""
}
],
"src": "8946:488:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "9534:92:14",
"statements": [
{
"nodeType": "YulAssignment",
"src": "9544:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9556:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9567:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9552:3:14"
},
"nodeType": "YulFunctionCall",
"src": "9552:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "9544:4:14"
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9586:9:14"
},
{
"arguments": [
{
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "9611:6:14"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "9604:6:14"
},
"nodeType": "YulFunctionCall",
"src": "9604:14:14"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "9597:6:14"
},
"nodeType": "YulFunctionCall",
"src": "9597:22:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9579:6:14"
},
"nodeType": "YulFunctionCall",
"src": "9579:41:14"
},
"nodeType": "YulExpressionStatement",
"src": "9579:41:14"
}
]
},
"name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "9503:9:14",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "9514:6:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "9525:4:14",
"type": ""
}
],
"src": "9439:187:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "9812:217:14",
"statements": [
{
"nodeType": "YulAssignment",
"src": "9822:27:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9834:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9845:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9830:3:14"
},
"nodeType": "YulFunctionCall",
"src": "9830:19:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "9822:4:14"
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9865:9:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "9876:6:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9858:6:14"
},
"nodeType": "YulFunctionCall",
"src": "9858:25:14"
},
"nodeType": "YulExpressionStatement",
"src": "9858:25:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9903:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9914:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9899:3:14"
},
"nodeType": "YulFunctionCall",
"src": "9899:18:14"
},
{
"arguments": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "9923:6:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9931:4:14",
"type": "",
"value": "0xff"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "9919:3:14"
},
"nodeType": "YulFunctionCall",
"src": "9919:17:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9892:6:14"
},
"nodeType": "YulFunctionCall",
"src": "9892:45:14"
},
"nodeType": "YulExpressionStatement",
"src": "9892:45:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9957:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9968:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9953:3:14"
},
"nodeType": "YulFunctionCall",
"src": "9953:18:14"
},
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "9973:6:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9946:6:14"
},
"nodeType": "YulFunctionCall",
"src": "9946:34:14"
},
"nodeType": "YulExpressionStatement",
"src": "9946:34:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10000:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10011:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9996:3:14"
},
"nodeType": "YulFunctionCall",
"src": "9996:18:14"
},
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "10016:6:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9989:6:14"
},
"nodeType": "YulFunctionCall",
"src": "9989:34:14"
},
"nodeType": "YulExpressionStatement",
"src": "9989:34:14"
}
]
},
"name": "abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "9757:9:14",
"type": ""
},
{
"name": "value3",
"nodeType": "YulTypedName",
"src": "9768:6:14",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "9776:6:14",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "9784:6:14",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "9792:6:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "9803:4:14",
"type": ""
}
],
"src": "9631:398:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "10155:98:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10172:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10183:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10165:6:14"
},
"nodeType": "YulFunctionCall",
"src": "10165:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "10165:21:14"
},
{
"nodeType": "YulAssignment",
"src": "10195:52:14",
"value": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "10220:6:14"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10232:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10243:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10228:3:14"
},
"nodeType": "YulFunctionCall",
"src": "10228:18:14"
}
],
"functionName": {
"name": "abi_encode_bytes",
"nodeType": "YulIdentifier",
"src": "10203:16:14"
},
"nodeType": "YulFunctionCall",
"src": "10203:44:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "10195:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "10124:9:14",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "10135:6:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "10146:4:14",
"type": ""
}
],
"src": "10034:219:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "10432:174:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10449:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10460:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10442:6:14"
},
"nodeType": "YulFunctionCall",
"src": "10442:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "10442:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10483:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10494:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10479:3:14"
},
"nodeType": "YulFunctionCall",
"src": "10479:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10499:2:14",
"type": "",
"value": "24"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10472:6:14"
},
"nodeType": "YulFunctionCall",
"src": "10472:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "10472:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10522:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10533:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10518:3:14"
},
"nodeType": "YulFunctionCall",
"src": "10518:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "10538:26:14",
"type": "",
"value": "ECDSA: invalid signature"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10511:6:14"
},
"nodeType": "YulFunctionCall",
"src": "10511:54:14"
},
"nodeType": "YulExpressionStatement",
"src": "10511:54:14"
},
{
"nodeType": "YulAssignment",
"src": "10574:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10586:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10597:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10582:3:14"
},
"nodeType": "YulFunctionCall",
"src": "10582:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "10574:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "10409:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "10423:4:14",
"type": ""
}
],
"src": "10258:348:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "10785:181:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10802:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10813:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10795:6:14"
},
"nodeType": "YulFunctionCall",
"src": "10795:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "10795:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10836:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10847:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10832:3:14"
},
"nodeType": "YulFunctionCall",
"src": "10832:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10852:2:14",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10825:6:14"
},
"nodeType": "YulFunctionCall",
"src": "10825:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "10825:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10875:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10886:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10871:3:14"
},
"nodeType": "YulFunctionCall",
"src": "10871:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "10891:33:14",
"type": "",
"value": "ECDSA: invalid signature length"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10864:6:14"
},
"nodeType": "YulFunctionCall",
"src": "10864:61:14"
},
"nodeType": "YulExpressionStatement",
"src": "10864:61:14"
},
{
"nodeType": "YulAssignment",
"src": "10934:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10946:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10957:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10942:3:14"
},
"nodeType": "YulFunctionCall",
"src": "10942:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "10934:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "10762:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "10776:4:14",
"type": ""
}
],
"src": "10611:355:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "11145:166:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "11162:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11173:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "11155:6:14"
},
"nodeType": "YulFunctionCall",
"src": "11155:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "11155:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "11196:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11207:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "11192:3:14"
},
"nodeType": "YulFunctionCall",
"src": "11192:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11212:2:14",
"type": "",
"value": "16"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "11185:6:14"
},
"nodeType": "YulFunctionCall",
"src": "11185:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "11185:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "11235:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11246:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "11231:3:14"
},
"nodeType": "YulFunctionCall",
"src": "11231:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "11251:18:14",
"type": "",
"value": "Not enough ether"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "11224:6:14"
},
"nodeType": "YulFunctionCall",
"src": "11224:46:14"
},
"nodeType": "YulExpressionStatement",
"src": "11224:46:14"
},
{
"nodeType": "YulAssignment",
"src": "11279:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "11291:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11302:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "11287:3:14"
},
"nodeType": "YulFunctionCall",
"src": "11287:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "11279:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_16d59be81b7a8951797c3c168116b0901a08a2d4ed98e9b44f53b2431963ec10__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "11122:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "11136:4:14",
"type": ""
}
],
"src": "10971:340:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "11490:160:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "11507:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11518:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "11500:6:14"
},
"nodeType": "YulFunctionCall",
"src": "11500:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "11500:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "11541:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11552:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "11537:3:14"
},
"nodeType": "YulFunctionCall",
"src": "11537:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11557:2:14",
"type": "",
"value": "10"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "11530:6:14"
},
"nodeType": "YulFunctionCall",
"src": "11530:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "11530:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "11580:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11591:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "11576:3:14"
},
"nodeType": "YulFunctionCall",
"src": "11576:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "11596:12:14",
"type": "",
"value": "Can't mint"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "11569:6:14"
},
"nodeType": "YulFunctionCall",
"src": "11569:40:14"
},
"nodeType": "YulExpressionStatement",
"src": "11569:40:14"
},
{
"nodeType": "YulAssignment",
"src": "11618:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "11630:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11641:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "11626:3:14"
},
"nodeType": "YulFunctionCall",
"src": "11626:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "11618:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_18134e0a8f86c12b8000072d008b6f7f7e26a70b5472308fc8ebc36f960a45c8__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "11467:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "11481:4:14",
"type": ""
}
],
"src": "11316:334:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "11829:233:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "11846:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11857:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "11839:6:14"
},
"nodeType": "YulFunctionCall",
"src": "11839:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "11839:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "11880:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11891:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "11876:3:14"
},
"nodeType": "YulFunctionCall",
"src": "11876:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11896:2:14",
"type": "",
"value": "43"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "11869:6:14"
},
"nodeType": "YulFunctionCall",
"src": "11869:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "11869:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "11919:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11930:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "11915:3:14"
},
"nodeType": "YulFunctionCall",
"src": "11915:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "11935:34:14",
"type": "",
"value": "ERC721Enumerable: owner index ou"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "11908:6:14"
},
"nodeType": "YulFunctionCall",
"src": "11908:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "11908:62:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "11990:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12001:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "11986:3:14"
},
"nodeType": "YulFunctionCall",
"src": "11986:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "12006:13:14",
"type": "",
"value": "t of bounds"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "11979:6:14"
},
"nodeType": "YulFunctionCall",
"src": "11979:41:14"
},
"nodeType": "YulExpressionStatement",
"src": "11979:41:14"
},
{
"nodeType": "YulAssignment",
"src": "12029:27:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12041:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12052:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "12037:3:14"
},
"nodeType": "YulFunctionCall",
"src": "12037:19:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "12029:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_1d7f5dcf03a65f41ee49b0ab593e3851cfbe3fd7da53b6cf4eddd83c7df5734c__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "11806:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "11820:4:14",
"type": ""
}
],
"src": "11655:407:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "12241:240:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12258:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12269:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "12251:6:14"
},
"nodeType": "YulFunctionCall",
"src": "12251:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "12251:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12292:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12303:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "12288:3:14"
},
"nodeType": "YulFunctionCall",
"src": "12288:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12308:2:14",
"type": "",
"value": "50"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "12281:6:14"
},
"nodeType": "YulFunctionCall",
"src": "12281:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "12281:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12331:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12342:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "12327:3:14"
},
"nodeType": "YulFunctionCall",
"src": "12327:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "12347:34:14",
"type": "",
"value": "ERC721: transfer to non ERC721Re"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "12320:6:14"
},
"nodeType": "YulFunctionCall",
"src": "12320:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "12320:62:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12402:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12413:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "12398:3:14"
},
"nodeType": "YulFunctionCall",
"src": "12398:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "12418:20:14",
"type": "",
"value": "ceiver implementer"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "12391:6:14"
},
"nodeType": "YulFunctionCall",
"src": "12391:48:14"
},
"nodeType": "YulExpressionStatement",
"src": "12391:48:14"
},
{
"nodeType": "YulAssignment",
"src": "12448:27:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12460:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12471:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "12456:3:14"
},
"nodeType": "YulFunctionCall",
"src": "12456:19:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "12448:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "12218:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "12232:4:14",
"type": ""
}
],
"src": "12067:414:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "12660:228:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12677:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12688:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "12670:6:14"
},
"nodeType": "YulFunctionCall",
"src": "12670:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "12670:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12711:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12722:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "12707:3:14"
},
"nodeType": "YulFunctionCall",
"src": "12707:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12727:2:14",
"type": "",
"value": "38"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "12700:6:14"
},
"nodeType": "YulFunctionCall",
"src": "12700:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "12700:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12750:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12761:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "12746:3:14"
},
"nodeType": "YulFunctionCall",
"src": "12746:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "12766:34:14",
"type": "",
"value": "Ownable: new owner is the zero a"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "12739:6:14"
},
"nodeType": "YulFunctionCall",
"src": "12739:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "12739:62:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12821:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12832:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "12817:3:14"
},
"nodeType": "YulFunctionCall",
"src": "12817:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "12837:8:14",
"type": "",
"value": "ddress"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "12810:6:14"
},
"nodeType": "YulFunctionCall",
"src": "12810:36:14"
},
"nodeType": "YulExpressionStatement",
"src": "12810:36:14"
},
{
"nodeType": "YulAssignment",
"src": "12855:27:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12867:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12878:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "12863:3:14"
},
"nodeType": "YulFunctionCall",
"src": "12863:19:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "12855:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "12637:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "12651:4:14",
"type": ""
}
],
"src": "12486:402:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "13067:178:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "13084:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13095:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "13077:6:14"
},
"nodeType": "YulFunctionCall",
"src": "13077:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "13077:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "13118:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13129:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "13114:3:14"
},
"nodeType": "YulFunctionCall",
"src": "13114:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13134:2:14",
"type": "",
"value": "28"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "13107:6:14"
},
"nodeType": "YulFunctionCall",
"src": "13107:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "13107:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "13157:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13168:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "13153:3:14"
},
"nodeType": "YulFunctionCall",
"src": "13153:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "13173:30:14",
"type": "",
"value": "ERC721: token already minted"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "13146:6:14"
},
"nodeType": "YulFunctionCall",
"src": "13146:58:14"
},
"nodeType": "YulExpressionStatement",
"src": "13146:58:14"
},
{
"nodeType": "YulAssignment",
"src": "13213:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "13225:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13236:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "13221:3:14"
},
"nodeType": "YulFunctionCall",
"src": "13221:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "13213:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "13044:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "13058:4:14",
"type": ""
}
],
"src": "12893:352:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "13424:167:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "13441:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13452:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "13434:6:14"
},
"nodeType": "YulFunctionCall",
"src": "13434:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "13434:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "13475:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13486:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "13471:3:14"
},
"nodeType": "YulFunctionCall",
"src": "13471:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13491:2:14",
"type": "",
"value": "17"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "13464:6:14"
},
"nodeType": "YulFunctionCall",
"src": "13464:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "13464:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "13514:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13525:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "13510:3:14"
},
"nodeType": "YulFunctionCall",
"src": "13510:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "13530:19:14",
"type": "",
"value": "Presale is closed"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "13503:6:14"
},
"nodeType": "YulFunctionCall",
"src": "13503:47:14"
},
"nodeType": "YulExpressionStatement",
"src": "13503:47:14"
},
{
"nodeType": "YulAssignment",
"src": "13559:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "13571:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13582:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "13567:3:14"
},
"nodeType": "YulFunctionCall",
"src": "13567:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "13559:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_316cb0365a1fe034f1a5f6976eed8e89e7960f92d9c5a685aec4eb552af65325__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "13401:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "13415:4:14",
"type": ""
}
],
"src": "13250:341:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "13770:226:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "13787:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13798:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "13780:6:14"
},
"nodeType": "YulFunctionCall",
"src": "13780:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "13780:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "13821:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13832:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "13817:3:14"
},
"nodeType": "YulFunctionCall",
"src": "13817:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13837:2:14",
"type": "",
"value": "36"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "13810:6:14"
},
"nodeType": "YulFunctionCall",
"src": "13810:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "13810:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "13860:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13871:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "13856:3:14"
},
"nodeType": "YulFunctionCall",
"src": "13856:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "13876:34:14",
"type": "",
"value": "ERC721: transfer to the zero add"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "13849:6:14"
},
"nodeType": "YulFunctionCall",
"src": "13849:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "13849:62:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "13931:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13942:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "13927:3:14"
},
"nodeType": "YulFunctionCall",
"src": "13927:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "13947:6:14",
"type": "",
"value": "ress"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "13920:6:14"
},
"nodeType": "YulFunctionCall",
"src": "13920:34:14"
},
"nodeType": "YulExpressionStatement",
"src": "13920:34:14"
},
{
"nodeType": "YulAssignment",
"src": "13963:27:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "13975:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13986:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "13971:3:14"
},
"nodeType": "YulFunctionCall",
"src": "13971:19:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "13963:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "13747:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "13761:4:14",
"type": ""
}
],
"src": "13596:400:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "14175:175:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "14192:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14203:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "14185:6:14"
},
"nodeType": "YulFunctionCall",
"src": "14185:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "14185:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "14226:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14237:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "14222:3:14"
},
"nodeType": "YulFunctionCall",
"src": "14222:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14242:2:14",
"type": "",
"value": "25"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "14215:6:14"
},
"nodeType": "YulFunctionCall",
"src": "14215:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "14215:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "14265:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14276:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "14261:3:14"
},
"nodeType": "YulFunctionCall",
"src": "14261:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "14281:27:14",
"type": "",
"value": "ERC721: approve to caller"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "14254:6:14"
},
"nodeType": "YulFunctionCall",
"src": "14254:55:14"
},
"nodeType": "YulExpressionStatement",
"src": "14254:55:14"
},
{
"nodeType": "YulAssignment",
"src": "14318:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "14330:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14341:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "14326:3:14"
},
"nodeType": "YulFunctionCall",
"src": "14326:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "14318:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "14152:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "14166:4:14",
"type": ""
}
],
"src": "14001:349:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "14529:177:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "14546:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14557:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "14539:6:14"
},
"nodeType": "YulFunctionCall",
"src": "14539:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "14539:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "14580:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14591:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "14576:3:14"
},
"nodeType": "YulFunctionCall",
"src": "14576:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14596:2:14",
"type": "",
"value": "27"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "14569:6:14"
},
"nodeType": "YulFunctionCall",
"src": "14569:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "14569:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "14619:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14630:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "14615:3:14"
},
"nodeType": "YulFunctionCall",
"src": "14615:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "14635:29:14",
"type": "",
"value": "Private sale limit exceeded"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "14608:6:14"
},
"nodeType": "YulFunctionCall",
"src": "14608:57:14"
},
"nodeType": "YulExpressionStatement",
"src": "14608:57:14"
},
{
"nodeType": "YulAssignment",
"src": "14674:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "14686:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14697:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "14682:3:14"
},
"nodeType": "YulFunctionCall",
"src": "14682:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "14674:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_4c14a485e49b75f14088653223d749d8e592bdafc754eb3836267f9682927808__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "14506:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "14520:4:14",
"type": ""
}
],
"src": "14355:351:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "14885:224:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "14902:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14913:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "14895:6:14"
},
"nodeType": "YulFunctionCall",
"src": "14895:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "14895:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "14936:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14947:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "14932:3:14"
},
"nodeType": "YulFunctionCall",
"src": "14932:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14952:2:14",
"type": "",
"value": "34"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "14925:6:14"
},
"nodeType": "YulFunctionCall",
"src": "14925:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "14925:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "14975:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14986:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "14971:3:14"
},
"nodeType": "YulFunctionCall",
"src": "14971:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "14991:34:14",
"type": "",
"value": "ECDSA: invalid signature 's' val"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "14964:6:14"
},
"nodeType": "YulFunctionCall",
"src": "14964:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "14964:62:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "15046:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15057:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "15042:3:14"
},
"nodeType": "YulFunctionCall",
"src": "15042:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "15062:4:14",
"type": "",
"value": "ue"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "15035:6:14"
},
"nodeType": "YulFunctionCall",
"src": "15035:32:14"
},
"nodeType": "YulExpressionStatement",
"src": "15035:32:14"
},
{
"nodeType": "YulAssignment",
"src": "15076:27:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "15088:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15099:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "15084:3:14"
},
"nodeType": "YulFunctionCall",
"src": "15084:19:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "15076:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "14862:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "14876:4:14",
"type": ""
}
],
"src": "14711:398:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "15288:234:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "15305:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15316:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "15298:6:14"
},
"nodeType": "YulFunctionCall",
"src": "15298:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "15298:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "15339:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15350:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "15335:3:14"
},
"nodeType": "YulFunctionCall",
"src": "15335:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15355:2:14",
"type": "",
"value": "44"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "15328:6:14"
},
"nodeType": "YulFunctionCall",
"src": "15328:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "15328:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "15378:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15389:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "15374:3:14"
},
"nodeType": "YulFunctionCall",
"src": "15374:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "15394:34:14",
"type": "",
"value": "ERC721: operator query for nonex"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "15367:6:14"
},
"nodeType": "YulFunctionCall",
"src": "15367:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "15367:62:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "15449:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15460:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "15445:3:14"
},
"nodeType": "YulFunctionCall",
"src": "15445:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "15465:14:14",
"type": "",
"value": "istent token"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "15438:6:14"
},
"nodeType": "YulFunctionCall",
"src": "15438:42:14"
},
"nodeType": "YulExpressionStatement",
"src": "15438:42:14"
},
{
"nodeType": "YulAssignment",
"src": "15489:27:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "15501:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15512:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "15497:3:14"
},
"nodeType": "YulFunctionCall",
"src": "15497:19:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "15489:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "15265:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "15279:4:14",
"type": ""
}
],
"src": "15114:408:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "15701:162:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "15718:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15729:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "15711:6:14"
},
"nodeType": "YulFunctionCall",
"src": "15711:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "15711:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "15752:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15763:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "15748:3:14"
},
"nodeType": "YulFunctionCall",
"src": "15748:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15768:2:14",
"type": "",
"value": "12"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "15741:6:14"
},
"nodeType": "YulFunctionCall",
"src": "15741:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "15741:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "15791:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15802:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "15787:3:14"
},
"nodeType": "YulFunctionCall",
"src": "15787:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "15807:14:14",
"type": "",
"value": "Out of stock"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "15780:6:14"
},
"nodeType": "YulFunctionCall",
"src": "15780:42:14"
},
"nodeType": "YulExpressionStatement",
"src": "15780:42:14"
},
{
"nodeType": "YulAssignment",
"src": "15831:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "15843:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15854:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "15839:3:14"
},
"nodeType": "YulFunctionCall",
"src": "15839:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "15831:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_58c3ae04f356ce3103bd79765ef69532940dca6ffe0a035901bcc1dfcdbd5b37__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "15678:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "15692:4:14",
"type": ""
}
],
"src": "15527:336:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "16042:173:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "16059:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16070:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "16052:6:14"
},
"nodeType": "YulFunctionCall",
"src": "16052:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "16052:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "16093:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16104:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "16089:3:14"
},
"nodeType": "YulFunctionCall",
"src": "16089:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16109:2:14",
"type": "",
"value": "23"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "16082:6:14"
},
"nodeType": "YulFunctionCall",
"src": "16082:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "16082:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "16132:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16143:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "16128:3:14"
},
"nodeType": "YulFunctionCall",
"src": "16128:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "16148:25:14",
"type": "",
"value": "Not on the presale list"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "16121:6:14"
},
"nodeType": "YulFunctionCall",
"src": "16121:53:14"
},
"nodeType": "YulExpressionStatement",
"src": "16121:53:14"
},
{
"nodeType": "YulAssignment",
"src": "16183:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "16195:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16206:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "16191:3:14"
},
"nodeType": "YulFunctionCall",
"src": "16191:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "16183:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_694d31729c0b7d5965082fcc23fd37b797ca086831af0eb28184b0f01328eabc__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "16019:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "16033:4:14",
"type": ""
}
],
"src": "15868:347:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "16394:246:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "16411:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16422:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "16404:6:14"
},
"nodeType": "YulFunctionCall",
"src": "16404:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "16404:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "16445:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16456:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "16441:3:14"
},
"nodeType": "YulFunctionCall",
"src": "16441:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16461:2:14",
"type": "",
"value": "56"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "16434:6:14"
},
"nodeType": "YulFunctionCall",
"src": "16434:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "16434:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "16484:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16495:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "16480:3:14"
},
"nodeType": "YulFunctionCall",
"src": "16480:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "16500:34:14",
"type": "",
"value": "ERC721: approve caller is not ow"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "16473:6:14"
},
"nodeType": "YulFunctionCall",
"src": "16473:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "16473:62:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "16555:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16566:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "16551:3:14"
},
"nodeType": "YulFunctionCall",
"src": "16551:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "16571:26:14",
"type": "",
"value": "ner nor approved for all"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "16544:6:14"
},
"nodeType": "YulFunctionCall",
"src": "16544:54:14"
},
"nodeType": "YulExpressionStatement",
"src": "16544:54:14"
},
{
"nodeType": "YulAssignment",
"src": "16607:27:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "16619:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16630:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "16615:3:14"
},
"nodeType": "YulFunctionCall",
"src": "16615:19:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "16607:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "16371:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "16385:4:14",
"type": ""
}
],
"src": "16220:420:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "16819:232:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "16836:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16847:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "16829:6:14"
},
"nodeType": "YulFunctionCall",
"src": "16829:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "16829:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "16870:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16881:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "16866:3:14"
},
"nodeType": "YulFunctionCall",
"src": "16866:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16886:2:14",
"type": "",
"value": "42"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "16859:6:14"
},
"nodeType": "YulFunctionCall",
"src": "16859:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "16859:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "16909:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16920:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "16905:3:14"
},
"nodeType": "YulFunctionCall",
"src": "16905:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "16925:34:14",
"type": "",
"value": "ERC721: balance query for the ze"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "16898:6:14"
},
"nodeType": "YulFunctionCall",
"src": "16898:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "16898:62:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "16980:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16991:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "16976:3:14"
},
"nodeType": "YulFunctionCall",
"src": "16976:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "16996:12:14",
"type": "",
"value": "ro address"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "16969:6:14"
},
"nodeType": "YulFunctionCall",
"src": "16969:40:14"
},
"nodeType": "YulExpressionStatement",
"src": "16969:40:14"
},
{
"nodeType": "YulAssignment",
"src": "17018:27:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "17030:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "17041:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "17026:3:14"
},
"nodeType": "YulFunctionCall",
"src": "17026:19:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "17018:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "16796:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "16810:4:14",
"type": ""
}
],
"src": "16645:406:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "17230:231:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "17247:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "17258:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "17240:6:14"
},
"nodeType": "YulFunctionCall",
"src": "17240:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "17240:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "17281:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "17292:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "17277:3:14"
},
"nodeType": "YulFunctionCall",
"src": "17277:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "17297:2:14",
"type": "",
"value": "41"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "17270:6:14"
},
"nodeType": "YulFunctionCall",
"src": "17270:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "17270:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "17320:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "17331:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "17316:3:14"
},
"nodeType": "YulFunctionCall",
"src": "17316:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "17336:34:14",
"type": "",
"value": "ERC721: owner query for nonexist"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "17309:6:14"
},
"nodeType": "YulFunctionCall",
"src": "17309:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "17309:62:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "17391:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "17402:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "17387:3:14"
},
"nodeType": "YulFunctionCall",
"src": "17387:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "17407:11:14",
"type": "",
"value": "ent token"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "17380:6:14"
},
"nodeType": "YulFunctionCall",
"src": "17380:39:14"
},
"nodeType": "YulExpressionStatement",
"src": "17380:39:14"
},
{
"nodeType": "YulAssignment",
"src": "17428:27:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "17440:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "17451:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "17436:3:14"
},
"nodeType": "YulFunctionCall",
"src": "17436:19:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "17428:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "17207:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "17221:4:14",
"type": ""
}
],
"src": "17056:405:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "17640:182:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "17657:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "17668:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "17650:6:14"
},
"nodeType": "YulFunctionCall",
"src": "17650:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "17650:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "17691:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "17702:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "17687:3:14"
},
"nodeType": "YulFunctionCall",
"src": "17687:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "17707:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "17680:6:14"
},
"nodeType": "YulFunctionCall",
"src": "17680:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "17680:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "17730:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "17741:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "17726:3:14"
},
"nodeType": "YulFunctionCall",
"src": "17726:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "17746:34:14",
"type": "",
"value": "Token quantity per mint exceeded"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "17719:6:14"
},
"nodeType": "YulFunctionCall",
"src": "17719:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "17719:62:14"
},
{
"nodeType": "YulAssignment",
"src": "17790:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "17802:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "17813:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "17798:3:14"
},
"nodeType": "YulFunctionCall",
"src": "17798:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "17790:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_8460650e0961a3e74dfb739c90e04f3f23f3185f870a2007ff0d8ffe98385aa1__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "17617:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "17631:4:14",
"type": ""
}
],
"src": "17466:356:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "18001:224:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "18018:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18029:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "18011:6:14"
},
"nodeType": "YulFunctionCall",
"src": "18011:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "18011:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "18052:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18063:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "18048:3:14"
},
"nodeType": "YulFunctionCall",
"src": "18048:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18068:2:14",
"type": "",
"value": "34"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "18041:6:14"
},
"nodeType": "YulFunctionCall",
"src": "18041:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "18041:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "18091:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18102:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "18087:3:14"
},
"nodeType": "YulFunctionCall",
"src": "18087:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "18107:34:14",
"type": "",
"value": "ECDSA: invalid signature 'v' val"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "18080:6:14"
},
"nodeType": "YulFunctionCall",
"src": "18080:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "18080:62:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "18162:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18173:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "18158:3:14"
},
"nodeType": "YulFunctionCall",
"src": "18158:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "18178:4:14",
"type": "",
"value": "ue"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "18151:6:14"
},
"nodeType": "YulFunctionCall",
"src": "18151:32:14"
},
"nodeType": "YulExpressionStatement",
"src": "18151:32:14"
},
{
"nodeType": "YulAssignment",
"src": "18192:27:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "18204:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18215:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "18200:3:14"
},
"nodeType": "YulFunctionCall",
"src": "18200:19:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "18192:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "17978:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "17992:4:14",
"type": ""
}
],
"src": "17827:398:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "18404:176:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "18421:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18432:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "18414:6:14"
},
"nodeType": "YulFunctionCall",
"src": "18414:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "18414:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "18455:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18466:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "18451:3:14"
},
"nodeType": "YulFunctionCall",
"src": "18451:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18471:2:14",
"type": "",
"value": "26"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "18444:6:14"
},
"nodeType": "YulFunctionCall",
"src": "18444:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "18444:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "18494:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18505:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "18490:3:14"
},
"nodeType": "YulFunctionCall",
"src": "18490:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "18510:28:14",
"type": "",
"value": "Public sale limit exceeded"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "18483:6:14"
},
"nodeType": "YulFunctionCall",
"src": "18483:56:14"
},
"nodeType": "YulExpressionStatement",
"src": "18483:56:14"
},
{
"nodeType": "YulAssignment",
"src": "18548:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "18560:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18571:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "18556:3:14"
},
"nodeType": "YulFunctionCall",
"src": "18556:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "18548:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_85f94a0e024d00ce3dc9949f95379b0ac008b3049ddbcee0734120a08b652b6b__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "18381:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "18395:4:14",
"type": ""
}
],
"src": "18230:350:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "18759:182:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "18776:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18787:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "18769:6:14"
},
"nodeType": "YulFunctionCall",
"src": "18769:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "18769:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "18810:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18821:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "18806:3:14"
},
"nodeType": "YulFunctionCall",
"src": "18806:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18826:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "18799:6:14"
},
"nodeType": "YulFunctionCall",
"src": "18799:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "18799:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "18849:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18860:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "18845:3:14"
},
"nodeType": "YulFunctionCall",
"src": "18845:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "18865:34:14",
"type": "",
"value": "ERC721: mint to the zero address"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "18838:6:14"
},
"nodeType": "YulFunctionCall",
"src": "18838:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "18838:62:14"
},
{
"nodeType": "YulAssignment",
"src": "18909:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "18921:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18932:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "18917:3:14"
},
"nodeType": "YulFunctionCall",
"src": "18917:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "18909:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "18736:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "18750:4:14",
"type": ""
}
],
"src": "18585:356:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "19120:234:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "19137:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19148:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "19130:6:14"
},
"nodeType": "YulFunctionCall",
"src": "19130:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "19130:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "19171:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19182:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "19167:3:14"
},
"nodeType": "YulFunctionCall",
"src": "19167:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19187:2:14",
"type": "",
"value": "44"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "19160:6:14"
},
"nodeType": "YulFunctionCall",
"src": "19160:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "19160:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "19210:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19221:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "19206:3:14"
},
"nodeType": "YulFunctionCall",
"src": "19206:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "19226:34:14",
"type": "",
"value": "ERC721: approved query for nonex"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "19199:6:14"
},
"nodeType": "YulFunctionCall",
"src": "19199:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "19199:62:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "19281:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19292:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "19277:3:14"
},
"nodeType": "YulFunctionCall",
"src": "19277:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "19297:14:14",
"type": "",
"value": "istent token"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "19270:6:14"
},
"nodeType": "YulFunctionCall",
"src": "19270:42:14"
},
"nodeType": "YulExpressionStatement",
"src": "19270:42:14"
},
{
"nodeType": "YulAssignment",
"src": "19321:27:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "19333:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19344:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "19329:3:14"
},
"nodeType": "YulFunctionCall",
"src": "19329:19:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "19321:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "19097:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "19111:4:14",
"type": ""
}
],
"src": "18946:408:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "19533:165:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "19550:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19561:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "19543:6:14"
},
"nodeType": "YulFunctionCall",
"src": "19543:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "19543:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "19584:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19595:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "19580:3:14"
},
"nodeType": "YulFunctionCall",
"src": "19580:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19600:2:14",
"type": "",
"value": "15"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "19573:6:14"
},
"nodeType": "YulFunctionCall",
"src": "19573:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "19573:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "19623:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19634:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "19619:3:14"
},
"nodeType": "YulFunctionCall",
"src": "19619:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "19639:17:14",
"type": "",
"value": "Presale is live"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "19612:6:14"
},
"nodeType": "YulFunctionCall",
"src": "19612:45:14"
},
"nodeType": "YulExpressionStatement",
"src": "19612:45:14"
},
{
"nodeType": "YulAssignment",
"src": "19666:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "19678:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19689:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "19674:3:14"
},
"nodeType": "YulFunctionCall",
"src": "19674:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "19666:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_94b838897a063161d3afc40d527c8abf13c1098d26862f9af203d01b4380c8a8__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "19510:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "19524:4:14",
"type": ""
}
],
"src": "19359:339:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "19877:182:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "19894:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19905:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "19887:6:14"
},
"nodeType": "YulFunctionCall",
"src": "19887:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "19887:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "19928:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19939:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "19924:3:14"
},
"nodeType": "YulFunctionCall",
"src": "19924:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19944:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "19917:6:14"
},
"nodeType": "YulFunctionCall",
"src": "19917:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "19917:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "19967:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19978:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "19963:3:14"
},
"nodeType": "YulFunctionCall",
"src": "19963:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "19983:34:14",
"type": "",
"value": "Ownable: caller is not the owner"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "19956:6:14"
},
"nodeType": "YulFunctionCall",
"src": "19956:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "19956:62:14"
},
{
"nodeType": "YulAssignment",
"src": "20027:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "20039:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "20050:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "20035:3:14"
},
"nodeType": "YulFunctionCall",
"src": "20035:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "20027:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "19854:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "19868:4:14",
"type": ""
}
],
"src": "19703:356:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "20238:162:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "20255:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "20266:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "20248:6:14"
},
"nodeType": "YulFunctionCall",
"src": "20248:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "20248:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "20289:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "20300:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "20285:3:14"
},
"nodeType": "YulFunctionCall",
"src": "20285:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "20305:2:14",
"type": "",
"value": "12"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "20278:6:14"
},
"nodeType": "YulFunctionCall",
"src": "20278:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "20278:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "20328:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "20339:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "20324:3:14"
},
"nodeType": "YulFunctionCall",
"src": "20324:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "20344:14:14",
"type": "",
"value": "Zero Address"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "20317:6:14"
},
"nodeType": "YulFunctionCall",
"src": "20317:42:14"
},
"nodeType": "YulExpressionStatement",
"src": "20317:42:14"
},
{
"nodeType": "YulAssignment",
"src": "20368:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "20380:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "20391:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "20376:3:14"
},
"nodeType": "YulFunctionCall",
"src": "20376:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "20368:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_9ef4df38e17efa233f86f31ba1f777c86e862585794386894c50f894317da6be__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "20215:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "20229:4:14",
"type": ""
}
],
"src": "20064:336:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "20579:231:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "20596:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "20607:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "20589:6:14"
},
"nodeType": "YulFunctionCall",
"src": "20589:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "20589:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "20630:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "20641:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "20626:3:14"
},
"nodeType": "YulFunctionCall",
"src": "20626:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "20646:2:14",
"type": "",
"value": "41"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "20619:6:14"
},
"nodeType": "YulFunctionCall",
"src": "20619:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "20619:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "20669:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "20680:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "20665:3:14"
},
"nodeType": "YulFunctionCall",
"src": "20665:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "20685:34:14",
"type": "",
"value": "ERC721: transfer of token that i"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "20658:6:14"
},
"nodeType": "YulFunctionCall",
"src": "20658:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "20658:62:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "20740:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "20751:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "20736:3:14"
},
"nodeType": "YulFunctionCall",
"src": "20736:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "20756:11:14",
"type": "",
"value": "s not own"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "20729:6:14"
},
"nodeType": "YulFunctionCall",
"src": "20729:39:14"
},
"nodeType": "YulExpressionStatement",
"src": "20729:39:14"
},
{
"nodeType": "YulAssignment",
"src": "20777:27:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "20789:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "20800:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "20785:3:14"
},
"nodeType": "YulFunctionCall",
"src": "20785:19:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "20777:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "20556:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "20570:4:14",
"type": ""
}
],
"src": "20405:405:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "20989:167:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "21006:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "21017:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "20999:6:14"
},
"nodeType": "YulFunctionCall",
"src": "20999:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "20999:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "21040:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "21051:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "21036:3:14"
},
"nodeType": "YulFunctionCall",
"src": "21036:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "21056:2:14",
"type": "",
"value": "17"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "21029:6:14"
},
"nodeType": "YulFunctionCall",
"src": "21029:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "21029:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "21079:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "21090:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "21075:3:14"
},
"nodeType": "YulFunctionCall",
"src": "21075:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "21095:19:14",
"type": "",
"value": "Hash already used"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "21068:6:14"
},
"nodeType": "YulFunctionCall",
"src": "21068:47:14"
},
"nodeType": "YulExpressionStatement",
"src": "21068:47:14"
},
{
"nodeType": "YulAssignment",
"src": "21124:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "21136:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "21147:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "21132:3:14"
},
"nodeType": "YulFunctionCall",
"src": "21132:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "21124:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_a4953b2c749465601319695b1216e2052335617db132e6d19f5ebe8e5131f63f__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "20966:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "20980:4:14",
"type": ""
}
],
"src": "20815:341:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "21335:181:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "21352:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "21363:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "21345:6:14"
},
"nodeType": "YulFunctionCall",
"src": "21345:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "21345:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "21386:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "21397:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "21382:3:14"
},
"nodeType": "YulFunctionCall",
"src": "21382:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "21402:2:14",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "21375:6:14"
},
"nodeType": "YulFunctionCall",
"src": "21375:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "21375:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "21425:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "21436:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "21421:3:14"
},
"nodeType": "YulFunctionCall",
"src": "21421:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "21441:33:14",
"type": "",
"value": "Cannot query non-existent token"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "21414:6:14"
},
"nodeType": "YulFunctionCall",
"src": "21414:61:14"
},
"nodeType": "YulExpressionStatement",
"src": "21414:61:14"
},
{
"nodeType": "YulAssignment",
"src": "21484:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "21496:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "21507:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "21492:3:14"
},
"nodeType": "YulFunctionCall",
"src": "21492:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "21484:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_ad2ed0f1c219e272387a87a6f1fd274a065a60747c238e63118e48218ce64894__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "21312:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "21326:4:14",
"type": ""
}
],
"src": "21161:355:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "21695:223:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "21712:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "21723:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "21705:6:14"
},
"nodeType": "YulFunctionCall",
"src": "21705:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "21705:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "21746:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "21757:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "21742:3:14"
},
"nodeType": "YulFunctionCall",
"src": "21742:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "21762:2:14",
"type": "",
"value": "33"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "21735:6:14"
},
"nodeType": "YulFunctionCall",
"src": "21735:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "21735:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "21785:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "21796:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "21781:3:14"
},
"nodeType": "YulFunctionCall",
"src": "21781:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "21801:34:14",
"type": "",
"value": "ERC721: approval to current owne"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "21774:6:14"
},
"nodeType": "YulFunctionCall",
"src": "21774:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "21774:62:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "21856:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "21867:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "21852:3:14"
},
"nodeType": "YulFunctionCall",
"src": "21852:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "21872:3:14",
"type": "",
"value": "r"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "21845:6:14"
},
"nodeType": "YulFunctionCall",
"src": "21845:31:14"
},
"nodeType": "YulExpressionStatement",
"src": "21845:31:14"
},
{
"nodeType": "YulAssignment",
"src": "21885:27:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "21897:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "21908:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "21893:3:14"
},
"nodeType": "YulFunctionCall",
"src": "21893:19:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "21885:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "21672:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "21686:4:14",
"type": ""
}
],
"src": "21521:397:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "22097:234:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "22114:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "22125:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "22107:6:14"
},
"nodeType": "YulFunctionCall",
"src": "22107:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "22107:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "22148:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "22159:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "22144:3:14"
},
"nodeType": "YulFunctionCall",
"src": "22144:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "22164:2:14",
"type": "",
"value": "44"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "22137:6:14"
},
"nodeType": "YulFunctionCall",
"src": "22137:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "22137:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "22187:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "22198:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "22183:3:14"
},
"nodeType": "YulFunctionCall",
"src": "22183:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "22203:34:14",
"type": "",
"value": "Contract metadata methods are lo"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "22176:6:14"
},
"nodeType": "YulFunctionCall",
"src": "22176:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "22176:62:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "22258:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "22269:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "22254:3:14"
},
"nodeType": "YulFunctionCall",
"src": "22254:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "22274:14:14",
"type": "",
"value": "cked forever"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "22247:6:14"
},
"nodeType": "YulFunctionCall",
"src": "22247:42:14"
},
"nodeType": "YulExpressionStatement",
"src": "22247:42:14"
},
{
"nodeType": "YulAssignment",
"src": "22298:27:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "22310:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "22321:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "22306:3:14"
},
"nodeType": "YulFunctionCall",
"src": "22306:19:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "22298:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_bcb5a618131567c8937c7e1baae353208504506a8f1bdf51a784f257b6a0ba85__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "22074:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "22088:4:14",
"type": ""
}
],
"src": "21923:408:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "22510:161:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "22527:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "22538:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "22520:6:14"
},
"nodeType": "YulFunctionCall",
"src": "22520:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "22520:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "22561:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "22572:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "22557:3:14"
},
"nodeType": "YulFunctionCall",
"src": "22557:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "22577:2:14",
"type": "",
"value": "11"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "22550:6:14"
},
"nodeType": "YulFunctionCall",
"src": "22550:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "22550:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "22600:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "22611:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "22596:3:14"
},
"nodeType": "YulFunctionCall",
"src": "22596:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "22616:13:14",
"type": "",
"value": "Hash failed"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "22589:6:14"
},
"nodeType": "YulFunctionCall",
"src": "22589:41:14"
},
"nodeType": "YulExpressionStatement",
"src": "22589:41:14"
},
{
"nodeType": "YulAssignment",
"src": "22639:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "22651:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "22662:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "22647:3:14"
},
"nodeType": "YulFunctionCall",
"src": "22647:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "22639:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_c14425d9602751a2202053b5b571a0a7f17a82ac33fef1d425e6897f642c7a14__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "22487:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "22501:4:14",
"type": ""
}
],
"src": "22336:335:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "22850:181:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "22867:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "22878:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "22860:6:14"
},
"nodeType": "YulFunctionCall",
"src": "22860:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "22860:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "22901:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "22912:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "22897:3:14"
},
"nodeType": "YulFunctionCall",
"src": "22897:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "22917:2:14",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "22890:6:14"
},
"nodeType": "YulFunctionCall",
"src": "22890:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "22890:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "22940:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "22951:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "22936:3:14"
},
"nodeType": "YulFunctionCall",
"src": "22936:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "22956:33:14",
"type": "",
"value": "An entry is already on the list"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "22929:6:14"
},
"nodeType": "YulFunctionCall",
"src": "22929:61:14"
},
"nodeType": "YulExpressionStatement",
"src": "22929:61:14"
},
{
"nodeType": "YulAssignment",
"src": "22999:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "23011:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "23022:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "23007:3:14"
},
"nodeType": "YulFunctionCall",
"src": "23007:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "22999:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_c1eb3c0527e44f487b05e7a4139b132929e0cd21fc94441a07371cc9b8b03035__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "22827:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "22841:4:14",
"type": ""
}
],
"src": "22676:355:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "23210:239:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "23227:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "23238:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "23220:6:14"
},
"nodeType": "YulFunctionCall",
"src": "23220:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "23220:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "23261:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "23272:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "23257:3:14"
},
"nodeType": "YulFunctionCall",
"src": "23257:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "23277:2:14",
"type": "",
"value": "49"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "23250:6:14"
},
"nodeType": "YulFunctionCall",
"src": "23250:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "23250:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "23300:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "23311:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "23296:3:14"
},
"nodeType": "YulFunctionCall",
"src": "23296:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "23316:34:14",
"type": "",
"value": "ERC721: transfer caller is not o"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "23289:6:14"
},
"nodeType": "YulFunctionCall",
"src": "23289:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "23289:62:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "23371:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "23382:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "23367:3:14"
},
"nodeType": "YulFunctionCall",
"src": "23367:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "23387:19:14",
"type": "",
"value": "wner nor approved"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "23360:6:14"
},
"nodeType": "YulFunctionCall",
"src": "23360:47:14"
},
"nodeType": "YulExpressionStatement",
"src": "23360:47:14"
},
{
"nodeType": "YulAssignment",
"src": "23416:27:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "23428:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "23439:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "23424:3:14"
},
"nodeType": "YulFunctionCall",
"src": "23424:19:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "23416:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "23187:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "23201:4:14",
"type": ""
}
],
"src": "23036:413:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "23628:234:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "23645:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "23656:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "23638:6:14"
},
"nodeType": "YulFunctionCall",
"src": "23638:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "23638:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "23679:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "23690:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "23675:3:14"
},
"nodeType": "YulFunctionCall",
"src": "23675:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "23695:2:14",
"type": "",
"value": "44"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "23668:6:14"
},
"nodeType": "YulFunctionCall",
"src": "23668:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "23668:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "23718:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "23729:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "23714:3:14"
},
"nodeType": "YulFunctionCall",
"src": "23714:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "23734:34:14",
"type": "",
"value": "ERC721Enumerable: global index o"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "23707:6:14"
},
"nodeType": "YulFunctionCall",
"src": "23707:62:14"
},
"nodeType": "YulExpressionStatement",
"src": "23707:62:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "23789:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "23800:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "23785:3:14"
},
"nodeType": "YulFunctionCall",
"src": "23785:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "23805:14:14",
"type": "",
"value": "ut of bounds"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "23778:6:14"
},
"nodeType": "YulFunctionCall",
"src": "23778:42:14"
},
"nodeType": "YulExpressionStatement",
"src": "23778:42:14"
},
{
"nodeType": "YulAssignment",
"src": "23829:27:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "23841:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "23852:3:14",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "23837:3:14"
},
"nodeType": "YulFunctionCall",
"src": "23837:19:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "23829:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_d269a4e9f5820dcdb69ea21f528512eb9b927c8d846d48aa51c9219f461d4dcc__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "23605:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "23619:4:14",
"type": ""
}
],
"src": "23454:408:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "24041:166:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "24058:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "24069:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "24051:6:14"
},
"nodeType": "YulFunctionCall",
"src": "24051:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "24051:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "24092:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "24103:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "24088:3:14"
},
"nodeType": "YulFunctionCall",
"src": "24088:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "24108:2:14",
"type": "",
"value": "16"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "24081:6:14"
},
"nodeType": "YulFunctionCall",
"src": "24081:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "24081:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "24131:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "24142:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "24127:3:14"
},
"nodeType": "YulFunctionCall",
"src": "24127:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "24147:18:14",
"type": "",
"value": "Sale is not live"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "24120:6:14"
},
"nodeType": "YulFunctionCall",
"src": "24120:46:14"
},
"nodeType": "YulExpressionStatement",
"src": "24120:46:14"
},
{
"nodeType": "YulAssignment",
"src": "24175:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "24187:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "24198:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "24183:3:14"
},
"nodeType": "YulFunctionCall",
"src": "24183:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "24175:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_e02572104a0d8969e182b4567aef4b56d571f10897c6894b54ae652a06022bca__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "24018:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "24032:4:14",
"type": ""
}
],
"src": "23867:340:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "24386:163:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "24403:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "24414:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "24396:6:14"
},
"nodeType": "YulFunctionCall",
"src": "24396:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "24396:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "24437:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "24448:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "24433:3:14"
},
"nodeType": "YulFunctionCall",
"src": "24433:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "24453:2:14",
"type": "",
"value": "13"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "24426:6:14"
},
"nodeType": "YulFunctionCall",
"src": "24426:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "24426:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "24476:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "24487:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "24472:3:14"
},
"nodeType": "YulFunctionCall",
"src": "24472:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "24492:15:14",
"type": "",
"value": "No more gifts"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "24465:6:14"
},
"nodeType": "YulFunctionCall",
"src": "24465:43:14"
},
"nodeType": "YulExpressionStatement",
"src": "24465:43:14"
},
{
"nodeType": "YulAssignment",
"src": "24517:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "24529:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "24540:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "24525:3:14"
},
"nodeType": "YulFunctionCall",
"src": "24525:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "24517:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_fa62350885db45baa442e070ed1e2e85127f3fd286bba01ca5f280cb1a7938a5__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "24363:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "24377:4:14",
"type": ""
}
],
"src": "24212:337:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "24728:175:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "24745:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "24756:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "24738:6:14"
},
"nodeType": "YulFunctionCall",
"src": "24738:21:14"
},
"nodeType": "YulExpressionStatement",
"src": "24738:21:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "24779:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "24790:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "24775:3:14"
},
"nodeType": "YulFunctionCall",
"src": "24775:18:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "24795:2:14",
"type": "",
"value": "25"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "24768:6:14"
},
"nodeType": "YulFunctionCall",
"src": "24768:30:14"
},
"nodeType": "YulExpressionStatement",
"src": "24768:30:14"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "24818:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "24829:2:14",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "24814:3:14"
},
"nodeType": "YulFunctionCall",
"src": "24814:18:14"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "24834:27:14",
"type": "",
"value": "Token allocation exceeded"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "24807:6:14"
},
"nodeType": "YulFunctionCall",
"src": "24807:55:14"
},
"nodeType": "YulExpressionStatement",
"src": "24807:55:14"
},
{
"nodeType": "YulAssignment",
"src": "24871:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "24883:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "24894:2:14",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "24879:3:14"
},
"nodeType": "YulFunctionCall",
"src": "24879:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "24871:4:14"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_ffd930d98ae5b2616baa9d245e1b6b284cf25d276d58809e6445a1580bb65d78__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "24705:9:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "24719:4:14",
"type": ""
}
],
"src": "24554:349:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "25009:76:14",
"statements": [
{
"nodeType": "YulAssignment",
"src": "25019:26:14",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "25031:9:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "25042:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "25027:3:14"
},
"nodeType": "YulFunctionCall",
"src": "25027:18:14"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "25019:4:14"
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "25061:9:14"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "25072:6:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "25054:6:14"
},
"nodeType": "YulFunctionCall",
"src": "25054:25:14"
},
"nodeType": "YulExpressionStatement",
"src": "25054:25:14"
}
]
},
"name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "24978:9:14",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "24989:6:14",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "25000:4:14",
"type": ""
}
],
"src": "24908:177:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "25146:71:14",
"statements": [
{
"expression": {
"arguments": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "25163:4:14"
},
{
"name": "ptr",
"nodeType": "YulIdentifier",
"src": "25169:3:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "25156:6:14"
},
"nodeType": "YulFunctionCall",
"src": "25156:17:14"
},
"nodeType": "YulExpressionStatement",
"src": "25156:17:14"
},
{
"nodeType": "YulAssignment",
"src": "25182:29:14",
"value": {
"arguments": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "25200:4:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "25206:4:14",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "keccak256",
"nodeType": "YulIdentifier",
"src": "25190:9:14"
},
"nodeType": "YulFunctionCall",
"src": "25190:21:14"
},
"variableNames": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "25182:4:14"
}
]
}
]
},
"name": "array_dataslot_string_storage",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "ptr",
"nodeType": "YulTypedName",
"src": "25129:3:14",
"type": ""
}
],
"returnVariables": [
{
"name": "data",
"nodeType": "YulTypedName",
"src": "25137:4:14",
"type": ""
}
],
"src": "25090:127:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "25270:80:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "25297:22:14",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nodeType": "YulIdentifier",
"src": "25299:16:14"
},
"nodeType": "YulFunctionCall",
"src": "25299:18:14"
},
"nodeType": "YulExpressionStatement",
"src": "25299:18:14"
}
]
},
"condition": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "25286:1:14"
},
{
"arguments": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "25293:1:14"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "25289:3:14"
},
"nodeType": "YulFunctionCall",
"src": "25289:6:14"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "25283:2:14"
},
"nodeType": "YulFunctionCall",
"src": "25283:13:14"
},
"nodeType": "YulIf",
"src": "25280:2:14"
},
{
"nodeType": "YulAssignment",
"src": "25328:16:14",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "25339:1:14"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "25342:1:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "25335:3:14"
},
"nodeType": "YulFunctionCall",
"src": "25335:9:14"
},
"variableNames": [
{
"name": "sum",
"nodeType": "YulIdentifier",
"src": "25328:3:14"
}
]
}
]
},
"name": "checked_add_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nodeType": "YulTypedName",
"src": "25253:1:14",
"type": ""
},
{
"name": "y",
"nodeType": "YulTypedName",
"src": "25256:1:14",
"type": ""
}
],
"returnVariables": [
{
"name": "sum",
"nodeType": "YulTypedName",
"src": "25262:3:14",
"type": ""
}
],
"src": "25222:128:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "25401:74:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "25424:22:14",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x12",
"nodeType": "YulIdentifier",
"src": "25426:16:14"
},
"nodeType": "YulFunctionCall",
"src": "25426:18:14"
},
"nodeType": "YulExpressionStatement",
"src": "25426:18:14"
}
]
},
"condition": {
"arguments": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "25421:1:14"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "25414:6:14"
},
"nodeType": "YulFunctionCall",
"src": "25414:9:14"
},
"nodeType": "YulIf",
"src": "25411:2:14"
},
{
"nodeType": "YulAssignment",
"src": "25455:14:14",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "25464:1:14"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "25467:1:14"
}
],
"functionName": {
"name": "div",
"nodeType": "YulIdentifier",
"src": "25460:3:14"
},
"nodeType": "YulFunctionCall",
"src": "25460:9:14"
},
"variableNames": [
{
"name": "r",
"nodeType": "YulIdentifier",
"src": "25455:1:14"
}
]
}
]
},
"name": "checked_div_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nodeType": "YulTypedName",
"src": "25386:1:14",
"type": ""
},
{
"name": "y",
"nodeType": "YulTypedName",
"src": "25389:1:14",
"type": ""
}
],
"returnVariables": [
{
"name": "r",
"nodeType": "YulTypedName",
"src": "25395:1:14",
"type": ""
}
],
"src": "25355:120:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "25532:116:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "25591:22:14",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nodeType": "YulIdentifier",
"src": "25593:16:14"
},
"nodeType": "YulFunctionCall",
"src": "25593:18:14"
},
"nodeType": "YulExpressionStatement",
"src": "25593:18:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "25563:1:14"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "25556:6:14"
},
"nodeType": "YulFunctionCall",
"src": "25556:9:14"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "25549:6:14"
},
"nodeType": "YulFunctionCall",
"src": "25549:17:14"
},
{
"arguments": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "25571:1:14"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "25582:1:14",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "25578:3:14"
},
"nodeType": "YulFunctionCall",
"src": "25578:6:14"
},
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "25586:1:14"
}
],
"functionName": {
"name": "div",
"nodeType": "YulIdentifier",
"src": "25574:3:14"
},
"nodeType": "YulFunctionCall",
"src": "25574:14:14"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "25568:2:14"
},
"nodeType": "YulFunctionCall",
"src": "25568:21:14"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "25545:3:14"
},
"nodeType": "YulFunctionCall",
"src": "25545:45:14"
},
"nodeType": "YulIf",
"src": "25542:2:14"
},
{
"nodeType": "YulAssignment",
"src": "25622:20:14",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "25637:1:14"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "25640:1:14"
}
],
"functionName": {
"name": "mul",
"nodeType": "YulIdentifier",
"src": "25633:3:14"
},
"nodeType": "YulFunctionCall",
"src": "25633:9:14"
},
"variableNames": [
{
"name": "product",
"nodeType": "YulIdentifier",
"src": "25622:7:14"
}
]
}
]
},
"name": "checked_mul_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nodeType": "YulTypedName",
"src": "25511:1:14",
"type": ""
},
{
"name": "y",
"nodeType": "YulTypedName",
"src": "25514:1:14",
"type": ""
}
],
"returnVariables": [
{
"name": "product",
"nodeType": "YulTypedName",
"src": "25520:7:14",
"type": ""
}
],
"src": "25480:168:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "25702:76:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "25724:22:14",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nodeType": "YulIdentifier",
"src": "25726:16:14"
},
"nodeType": "YulFunctionCall",
"src": "25726:18:14"
},
"nodeType": "YulExpressionStatement",
"src": "25726:18:14"
}
]
},
"condition": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "25718:1:14"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "25721:1:14"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "25715:2:14"
},
"nodeType": "YulFunctionCall",
"src": "25715:8:14"
},
"nodeType": "YulIf",
"src": "25712:2:14"
},
{
"nodeType": "YulAssignment",
"src": "25755:17:14",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "25767:1:14"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "25770:1:14"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "25763:3:14"
},
"nodeType": "YulFunctionCall",
"src": "25763:9:14"
},
"variableNames": [
{
"name": "diff",
"nodeType": "YulIdentifier",
"src": "25755:4:14"
}
]
}
]
},
"name": "checked_sub_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nodeType": "YulTypedName",
"src": "25684:1:14",
"type": ""
},
{
"name": "y",
"nodeType": "YulTypedName",
"src": "25687:1:14",
"type": ""
}
],
"returnVariables": [
{
"name": "diff",
"nodeType": "YulTypedName",
"src": "25693:4:14",
"type": ""
}
],
"src": "25653:125:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "25836:205:14",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "25846:10:14",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "25855:1:14",
"type": "",
"value": "0"
},
"variables": [
{
"name": "i",
"nodeType": "YulTypedName",
"src": "25850:1:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "25915:63:14",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "25940:3:14"
},
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "25945:1:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "25936:3:14"
},
"nodeType": "YulFunctionCall",
"src": "25936:11:14"
},
{
"arguments": [
{
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "25959:3:14"
},
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "25964:1:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "25955:3:14"
},
"nodeType": "YulFunctionCall",
"src": "25955:11:14"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "25949:5:14"
},
"nodeType": "YulFunctionCall",
"src": "25949:18:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "25929:6:14"
},
"nodeType": "YulFunctionCall",
"src": "25929:39:14"
},
"nodeType": "YulExpressionStatement",
"src": "25929:39:14"
}
]
},
"condition": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "25876:1:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "25879:6:14"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "25873:2:14"
},
"nodeType": "YulFunctionCall",
"src": "25873:13:14"
},
"nodeType": "YulForLoop",
"post": {
"nodeType": "YulBlock",
"src": "25887:19:14",
"statements": [
{
"nodeType": "YulAssignment",
"src": "25889:15:14",
"value": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "25898:1:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "25901:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "25894:3:14"
},
"nodeType": "YulFunctionCall",
"src": "25894:10:14"
},
"variableNames": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "25889:1:14"
}
]
}
]
},
"pre": {
"nodeType": "YulBlock",
"src": "25869:3:14",
"statements": []
},
"src": "25865:113:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "26004:31:14",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "26017:3:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "26022:6:14"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "26013:3:14"
},
"nodeType": "YulFunctionCall",
"src": "26013:16:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26031:1:14",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "26006:6:14"
},
"nodeType": "YulFunctionCall",
"src": "26006:27:14"
},
"nodeType": "YulExpressionStatement",
"src": "26006:27:14"
}
]
},
"condition": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "25993:1:14"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "25996:6:14"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "25990:2:14"
},
"nodeType": "YulFunctionCall",
"src": "25990:13:14"
},
"nodeType": "YulIf",
"src": "25987:2:14"
}
]
},
"name": "copy_memory_to_memory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "src",
"nodeType": "YulTypedName",
"src": "25814:3:14",
"type": ""
},
{
"name": "dst",
"nodeType": "YulTypedName",
"src": "25819:3:14",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "25824:6:14",
"type": ""
}
],
"src": "25783:258:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "26101:325:14",
"statements": [
{
"nodeType": "YulAssignment",
"src": "26111:22:14",
"value": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26125:1:14",
"type": "",
"value": "1"
},
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "26128:4:14"
}
],
"functionName": {
"name": "shr",
"nodeType": "YulIdentifier",
"src": "26121:3:14"
},
"nodeType": "YulFunctionCall",
"src": "26121:12:14"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "26111:6:14"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "26142:38:14",
"value": {
"arguments": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "26172:4:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26178:1:14",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "26168:3:14"
},
"nodeType": "YulFunctionCall",
"src": "26168:12:14"
},
"variables": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulTypedName",
"src": "26146:18:14",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "26219:31:14",
"statements": [
{
"nodeType": "YulAssignment",
"src": "26221:27:14",
"value": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "26235:6:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26243:4:14",
"type": "",
"value": "0x7f"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "26231:3:14"
},
"nodeType": "YulFunctionCall",
"src": "26231:17:14"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "26221:6:14"
}
]
}
]
},
"condition": {
"arguments": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulIdentifier",
"src": "26199:18:14"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "26192:6:14"
},
"nodeType": "YulFunctionCall",
"src": "26192:26:14"
},
"nodeType": "YulIf",
"src": "26189:2:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "26309:111:14",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26330:1:14",
"type": "",
"value": "0"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26337:3:14",
"type": "",
"value": "224"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26342:10:14",
"type": "",
"value": "0x4e487b71"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "26333:3:14"
},
"nodeType": "YulFunctionCall",
"src": "26333:20:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "26323:6:14"
},
"nodeType": "YulFunctionCall",
"src": "26323:31:14"
},
"nodeType": "YulExpressionStatement",
"src": "26323:31:14"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26374:1:14",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26377:4:14",
"type": "",
"value": "0x22"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "26367:6:14"
},
"nodeType": "YulFunctionCall",
"src": "26367:15:14"
},
"nodeType": "YulExpressionStatement",
"src": "26367:15:14"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26402:1:14",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26405:4:14",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "26395:6:14"
},
"nodeType": "YulFunctionCall",
"src": "26395:15:14"
},
"nodeType": "YulExpressionStatement",
"src": "26395:15:14"
}
]
},
"condition": {
"arguments": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulIdentifier",
"src": "26265:18:14"
},
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "26288:6:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26296:2:14",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "26285:2:14"
},
"nodeType": "YulFunctionCall",
"src": "26285:14:14"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "26262:2:14"
},
"nodeType": "YulFunctionCall",
"src": "26262:38:14"
},
"nodeType": "YulIf",
"src": "26259:2:14"
}
]
},
"name": "extract_byte_array_length",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "data",
"nodeType": "YulTypedName",
"src": "26081:4:14",
"type": ""
}
],
"returnVariables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "26090:6:14",
"type": ""
}
],
"src": "26046:380:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "26478:88:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "26509:22:14",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nodeType": "YulIdentifier",
"src": "26511:16:14"
},
"nodeType": "YulFunctionCall",
"src": "26511:18:14"
},
"nodeType": "YulExpressionStatement",
"src": "26511:18:14"
}
]
},
"condition": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "26494:5:14"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26505:1:14",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "26501:3:14"
},
"nodeType": "YulFunctionCall",
"src": "26501:6:14"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "26491:2:14"
},
"nodeType": "YulFunctionCall",
"src": "26491:17:14"
},
"nodeType": "YulIf",
"src": "26488:2:14"
},
{
"nodeType": "YulAssignment",
"src": "26540:20:14",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "26551:5:14"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26558:1:14",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "26547:3:14"
},
"nodeType": "YulFunctionCall",
"src": "26547:13:14"
},
"variableNames": [
{
"name": "ret",
"nodeType": "YulIdentifier",
"src": "26540:3:14"
}
]
}
]
},
"name": "increment_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "26460:5:14",
"type": ""
}
],
"returnVariables": [
{
"name": "ret",
"nodeType": "YulTypedName",
"src": "26470:3:14",
"type": ""
}
],
"src": "26431:135:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "26609:74:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "26632:22:14",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x12",
"nodeType": "YulIdentifier",
"src": "26634:16:14"
},
"nodeType": "YulFunctionCall",
"src": "26634:18:14"
},
"nodeType": "YulExpressionStatement",
"src": "26634:18:14"
}
]
},
"condition": {
"arguments": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "26629:1:14"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "26622:6:14"
},
"nodeType": "YulFunctionCall",
"src": "26622:9:14"
},
"nodeType": "YulIf",
"src": "26619:2:14"
},
{
"nodeType": "YulAssignment",
"src": "26663:14:14",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "26672:1:14"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "26675:1:14"
}
],
"functionName": {
"name": "mod",
"nodeType": "YulIdentifier",
"src": "26668:3:14"
},
"nodeType": "YulFunctionCall",
"src": "26668:9:14"
},
"variableNames": [
{
"name": "r",
"nodeType": "YulIdentifier",
"src": "26663:1:14"
}
]
}
]
},
"name": "mod_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nodeType": "YulTypedName",
"src": "26594:1:14",
"type": ""
},
{
"name": "y",
"nodeType": "YulTypedName",
"src": "26597:1:14",
"type": ""
}
],
"returnVariables": [
{
"name": "r",
"nodeType": "YulTypedName",
"src": "26603:1:14",
"type": ""
}
],
"src": "26571:112:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "26720:95:14",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26737:1:14",
"type": "",
"value": "0"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26744:3:14",
"type": "",
"value": "224"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26749:10:14",
"type": "",
"value": "0x4e487b71"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "26740:3:14"
},
"nodeType": "YulFunctionCall",
"src": "26740:20:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "26730:6:14"
},
"nodeType": "YulFunctionCall",
"src": "26730:31:14"
},
"nodeType": "YulExpressionStatement",
"src": "26730:31:14"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26777:1:14",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26780:4:14",
"type": "",
"value": "0x11"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "26770:6:14"
},
"nodeType": "YulFunctionCall",
"src": "26770:15:14"
},
"nodeType": "YulExpressionStatement",
"src": "26770:15:14"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26801:1:14",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26804:4:14",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "26794:6:14"
},
"nodeType": "YulFunctionCall",
"src": "26794:15:14"
},
"nodeType": "YulExpressionStatement",
"src": "26794:15:14"
}
]
},
"name": "panic_error_0x11",
"nodeType": "YulFunctionDefinition",
"src": "26688:127:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "26852:95:14",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26869:1:14",
"type": "",
"value": "0"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26876:3:14",
"type": "",
"value": "224"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26881:10:14",
"type": "",
"value": "0x4e487b71"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "26872:3:14"
},
"nodeType": "YulFunctionCall",
"src": "26872:20:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "26862:6:14"
},
"nodeType": "YulFunctionCall",
"src": "26862:31:14"
},
"nodeType": "YulExpressionStatement",
"src": "26862:31:14"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26909:1:14",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26912:4:14",
"type": "",
"value": "0x12"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "26902:6:14"
},
"nodeType": "YulFunctionCall",
"src": "26902:15:14"
},
"nodeType": "YulExpressionStatement",
"src": "26902:15:14"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26933:1:14",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "26936:4:14",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "26926:6:14"
},
"nodeType": "YulFunctionCall",
"src": "26926:15:14"
},
"nodeType": "YulExpressionStatement",
"src": "26926:15:14"
}
]
},
"name": "panic_error_0x12",
"nodeType": "YulFunctionDefinition",
"src": "26820:127:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "26984:95:14",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "27001:1:14",
"type": "",
"value": "0"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "27008:3:14",
"type": "",
"value": "224"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "27013:10:14",
"type": "",
"value": "0x4e487b71"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "27004:3:14"
},
"nodeType": "YulFunctionCall",
"src": "27004:20:14"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "26994:6:14"
},
"nodeType": "YulFunctionCall",
"src": "26994:31:14"
},
"nodeType": "YulExpressionStatement",
"src": "26994:31:14"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "27041:1:14",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "27044:4:14",
"type": "",
"value": "0x41"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "27034:6:14"
},
"nodeType": "YulFunctionCall",
"src": "27034:15:14"
},
"nodeType": "YulExpressionStatement",
"src": "27034:15:14"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "27065:1:14",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "27068:4:14",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "27058:6:14"
},
"nodeType": "YulFunctionCall",
"src": "27058:15:14"
},
"nodeType": "YulExpressionStatement",
"src": "27058:15:14"
}
]
},
"name": "panic_error_0x41",
"nodeType": "YulFunctionDefinition",
"src": "26952:127:14"
},
{
"body": {
"nodeType": "YulBlock",
"src": "27128:87:14",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "27193:16:14",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "27202:1:14",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "27205:1:14",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "27195:6:14"
},
"nodeType": "YulFunctionCall",
"src": "27195:12:14"
},
"nodeType": "YulExpressionStatement",
"src": "27195:12:14"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "27151:5:14"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "27162:5:14"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "27173:3:14",
"type": "",
"value": "224"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "27178:10:14",
"type": "",
"value": "0xffffffff"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "27169:3:14"
},
"nodeType": "YulFunctionCall",
"src": "27169:20:14"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "27158:3:14"
},
"nodeType": "YulFunctionCall",
"src": "27158:32:14"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "27148:2:14"
},
"nodeType": "YulFunctionCall",
"src": "27148:43:14"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "27141:6:14"
},
"nodeType": "YulFunctionCall",
"src": "27141:51:14"
},
"nodeType": "YulIf",
"src": "27138:2:14"
}
]
},
"name": "validator_revert_bytes4",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "27117:5:14",
"type": ""
}
],
"src": "27084:131:14"
}
]
},
"contents": "{\n { }\n function abi_decode_available_length_bytes(src, length, end) -> array\n {\n let _1 := 0xffffffffffffffff\n if gt(length, _1) { panic_error_0x41() }\n let _2 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(length, 31), _2), 63), _2))\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n array := memPtr\n mstore(memPtr, length)\n if gt(add(src, length), end) { revert(0, 0) }\n calldatacopy(add(memPtr, 0x20), src, length)\n mstore(add(add(memPtr, length), 0x20), 0)\n }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_bytes(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n array := abi_decode_available_length_bytes(add(offset, 0x20), calldataload(offset), end)\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n value0 := abi_decode_address(headStart)\n }\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(value1, value1) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n }\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n value2 := calldataload(add(headStart, 64))\n }\n function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(value3, value3) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n value2 := calldataload(add(headStart, 64))\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert(value3, value3) }\n value3 := abi_decode_bytes(add(headStart, offset), dataEnd)\n }\n function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n value0 := abi_decode_address(headStart)\n let value := calldataload(add(headStart, 32))\n if iszero(eq(value, iszero(iszero(value)))) { revert(value1, value1) }\n value1 := value\n }\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n value0 := abi_decode_address(headStart)\n value1 := calldataload(add(headStart, 32))\n }\n function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value0, value0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value0, value0) }\n let length := calldataload(_2)\n if gt(length, _1) { revert(value0, value0) }\n if gt(add(add(_2, shl(5, length)), 32), dataEnd) { revert(value0, value0) }\n value0 := add(_2, 32)\n value1 := length\n }\n function abi_decode_tuple_t_bytes32t_bytes_memory_ptrt_string_memory_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(value0, value0) }\n value0 := calldataload(headStart)\n let offset := calldataload(add(headStart, 32))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value1, value1) }\n value1 := abi_decode_bytes(add(headStart, offset), dataEnd)\n let offset_1 := calldataload(add(headStart, 64))\n if gt(offset_1, _1) { revert(value2, value2) }\n let _2 := add(headStart, offset_1)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value2, value2) }\n value2 := abi_decode_available_length_bytes(add(_2, 32), calldataload(_2), dataEnd)\n value3 := calldataload(add(headStart, 96))\n }\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let value := calldataload(headStart)\n validator_revert_bytes4(value)\n value0 := value\n }\n function abi_decode_tuple_t_bytes4_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let value := mload(headStart)\n validator_revert_bytes4(value)\n value0 := value\n }\n function abi_decode_tuple_t_string_calldata_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value0, value0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value0, value0) }\n let length := calldataload(_2)\n if gt(length, _1) { revert(value0, value0) }\n if gt(add(add(_2, length), 32), dataEnd) { revert(value0, value0) }\n value0 := add(_2, 32)\n value1 := length\n }\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n value0 := calldataload(headStart)\n }\n function abi_encode_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_string(value, pos) -> end\n {\n let length := mload(value)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_packed_t_address_t_uint256_t_string_memory_ptr__to_t_address_t_uint256_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n {\n mstore(pos, and(shl(96, value0), not(0xffffffffffffffffffffffff)))\n mstore(add(pos, 20), value1)\n let length := mload(value2)\n copy_memory_to_memory(add(value2, 0x20), add(pos, 52), length)\n end := add(add(pos, length), 52)\n }\n function abi_encode_tuple_packed_t_string_memory_ptr__to_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_packed_t_string_storage_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n {\n let ret := end\n let slotValue := sload(value0)\n let length := end\n let _1 := 1\n length := shr(_1, slotValue)\n let outOfPlaceEncoding := and(slotValue, _1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n let _2 := 32\n if eq(outOfPlaceEncoding, lt(length, _2))\n {\n mstore(end, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(end, 0x24)\n }\n switch outOfPlaceEncoding\n case 0 {\n mstore(pos, and(slotValue, not(255)))\n ret := add(pos, length)\n }\n case 1 {\n let dataPos := array_dataslot_string_storage(value0)\n let i := end\n for { } lt(i, length) { i := add(i, _2) }\n {\n mstore(add(pos, i), sload(dataPos))\n dataPos := add(dataPos, _1)\n }\n ret := add(pos, length)\n }\n end := abi_encode_string(value1, ret)\n }\n function abi_encode_tuple_packed_t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73_t_bytes32__to_t_string_memory_ptr_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n mstore(pos, 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000)\n mstore(add(pos, 28), value0)\n end := add(pos, 60)\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), 128)\n tail := abi_encode_bytes(value3, add(headStart, 128))\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, 0xff))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_bytes(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 24)\n mstore(add(headStart, 64), \"ECDSA: invalid signature\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 31)\n mstore(add(headStart, 64), \"ECDSA: invalid signature length\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_16d59be81b7a8951797c3c168116b0901a08a2d4ed98e9b44f53b2431963ec10__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 16)\n mstore(add(headStart, 64), \"Not enough ether\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_18134e0a8f86c12b8000072d008b6f7f7e26a70b5472308fc8ebc36f960a45c8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 10)\n mstore(add(headStart, 64), \"Can't mint\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_1d7f5dcf03a65f41ee49b0ab593e3851cfbe3fd7da53b6cf4eddd83c7df5734c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 43)\n mstore(add(headStart, 64), \"ERC721Enumerable: owner index ou\")\n mstore(add(headStart, 96), \"t of bounds\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 50)\n mstore(add(headStart, 64), \"ERC721: transfer to non ERC721Re\")\n mstore(add(headStart, 96), \"ceiver implementer\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n mstore(add(headStart, 96), \"ddress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 28)\n mstore(add(headStart, 64), \"ERC721: token already minted\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_316cb0365a1fe034f1a5f6976eed8e89e7960f92d9c5a685aec4eb552af65325__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 17)\n mstore(add(headStart, 64), \"Presale is closed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 36)\n mstore(add(headStart, 64), \"ERC721: transfer to the zero add\")\n mstore(add(headStart, 96), \"ress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 25)\n mstore(add(headStart, 64), \"ERC721: approve to caller\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_4c14a485e49b75f14088653223d749d8e592bdafc754eb3836267f9682927808__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 27)\n mstore(add(headStart, 64), \"Private sale limit exceeded\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 34)\n mstore(add(headStart, 64), \"ECDSA: invalid signature 's' val\")\n mstore(add(headStart, 96), \"ue\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 44)\n mstore(add(headStart, 64), \"ERC721: operator query for nonex\")\n mstore(add(headStart, 96), \"istent token\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_58c3ae04f356ce3103bd79765ef69532940dca6ffe0a035901bcc1dfcdbd5b37__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 12)\n mstore(add(headStart, 64), \"Out of stock\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_694d31729c0b7d5965082fcc23fd37b797ca086831af0eb28184b0f01328eabc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 23)\n mstore(add(headStart, 64), \"Not on the presale list\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 56)\n mstore(add(headStart, 64), \"ERC721: approve caller is not ow\")\n mstore(add(headStart, 96), \"ner nor approved for all\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 42)\n mstore(add(headStart, 64), \"ERC721: balance query for the ze\")\n mstore(add(headStart, 96), \"ro address\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 41)\n mstore(add(headStart, 64), \"ERC721: owner query for nonexist\")\n mstore(add(headStart, 96), \"ent token\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_8460650e0961a3e74dfb739c90e04f3f23f3185f870a2007ff0d8ffe98385aa1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Token quantity per mint exceeded\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 34)\n mstore(add(headStart, 64), \"ECDSA: invalid signature 'v' val\")\n mstore(add(headStart, 96), \"ue\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_85f94a0e024d00ce3dc9949f95379b0ac008b3049ddbcee0734120a08b652b6b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 26)\n mstore(add(headStart, 64), \"Public sale limit exceeded\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"ERC721: mint to the zero address\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 44)\n mstore(add(headStart, 64), \"ERC721: approved query for nonex\")\n mstore(add(headStart, 96), \"istent token\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_94b838897a063161d3afc40d527c8abf13c1098d26862f9af203d01b4380c8a8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 15)\n mstore(add(headStart, 64), \"Presale is live\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_9ef4df38e17efa233f86f31ba1f777c86e862585794386894c50f894317da6be__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 12)\n mstore(add(headStart, 64), \"Zero Address\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 41)\n mstore(add(headStart, 64), \"ERC721: transfer of token that i\")\n mstore(add(headStart, 96), \"s not own\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_a4953b2c749465601319695b1216e2052335617db132e6d19f5ebe8e5131f63f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 17)\n mstore(add(headStart, 64), \"Hash already used\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_ad2ed0f1c219e272387a87a6f1fd274a065a60747c238e63118e48218ce64894__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 31)\n mstore(add(headStart, 64), \"Cannot query non-existent token\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 33)\n mstore(add(headStart, 64), \"ERC721: approval to current owne\")\n mstore(add(headStart, 96), \"r\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_bcb5a618131567c8937c7e1baae353208504506a8f1bdf51a784f257b6a0ba85__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 44)\n mstore(add(headStart, 64), \"Contract metadata methods are lo\")\n mstore(add(headStart, 96), \"cked forever\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_c14425d9602751a2202053b5b571a0a7f17a82ac33fef1d425e6897f642c7a14__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 11)\n mstore(add(headStart, 64), \"Hash failed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_c1eb3c0527e44f487b05e7a4139b132929e0cd21fc94441a07371cc9b8b03035__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 31)\n mstore(add(headStart, 64), \"An entry is already on the list\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 49)\n mstore(add(headStart, 64), \"ERC721: transfer caller is not o\")\n mstore(add(headStart, 96), \"wner nor approved\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_d269a4e9f5820dcdb69ea21f528512eb9b927c8d846d48aa51c9219f461d4dcc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 44)\n mstore(add(headStart, 64), \"ERC721Enumerable: global index o\")\n mstore(add(headStart, 96), \"ut of bounds\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_e02572104a0d8969e182b4567aef4b56d571f10897c6894b54ae652a06022bca__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 16)\n mstore(add(headStart, 64), \"Sale is not live\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_fa62350885db45baa442e070ed1e2e85127f3fd286bba01ca5f280cb1a7938a5__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 13)\n mstore(add(headStart, 64), \"No more gifts\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_ffd930d98ae5b2616baa9d245e1b6b284cf25d276d58809e6445a1580bb65d78__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 25)\n mstore(add(headStart, 64), \"Token allocation exceeded\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function array_dataslot_string_storage(ptr) -> data\n {\n mstore(data, ptr)\n data := keccak256(data, 0x20)\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n if gt(x, not(y)) { panic_error_0x11() }\n sum := add(x, y)\n }\n function checked_div_t_uint256(x, y) -> r\n {\n if iszero(y) { panic_error_0x12() }\n r := div(x, y)\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n product := mul(x, y)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n if lt(x, y) { panic_error_0x11() }\n diff := sub(x, y)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function extract_byte_array_length(data) -> length\n {\n length := shr(1, data)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, not(0)) { panic_error_0x11() }\n ret := add(value, 1)\n }\n function mod_t_uint256(x, y) -> r\n {\n if iszero(y) { panic_error_0x12() }\n r := mod(x, y)\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function panic_error_0x12()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function validator_revert_bytes4(value)\n {\n if iszero(eq(value, and(value, shl(224, 0xffffffff)))) { revert(0, 0) }\n }\n}",
"id": 14,
"language": "Yul",
"name": "#utility.yul"
}
],
"immutableReferences": {},
"linkReferences": {},
"object": "6080604052600436106102e45760003560e01c8063815f7bbd11610190578063a22cb465116100dc578063e081b78111610095578063eafc7f371161006f578063eafc7f37146108b2578063f2fde38b146108c7578063f4743070146108e7578063faf924cf146108fd57600080fd5b8063e081b78114610835578063e8a3d48514610854578063e985e9c51461086957600080fd5b8063a22cb4651461077f578063b179e0601461079f578063b88d4fde146107bf578063c87b56dd146107df578063cf309012146107ff578063daffe4201461081f57600080fd5b8063940f1ada116101495780639bf80316116101235780639bf80316146106d65780639cf2e8d6146107035780639e273b2f146107335780639ec70f191461076c57600080fd5b8063940f1ada1461069657806395d89b41146106ac578063989bdbb6146106c157600080fd5b8063815f7bbd1461060157806383a9e0491461061457806389c3b5ba1461062e5780638da5cb5b146106435780638dddb20c14610661578063938e3d7b1461067657600080fd5b8063356423d81161024f5780635ce7af1f1161020857806370a08231116101e257806370a0823114610597578063715018a6146105b75780637204a3c9146105cc5780637bffb4ce146105ec57600080fd5b80635ce7af1f146105255780636352211e1461055b5780636a33bb451461057b57600080fd5b8063356423d8146104845780633ccfd60b1461049a57806342842e0e146104af5780634f6ccce7146104cf57806355f804b3146104ef57806359a12ad51461050f57600080fd5b806310969523116102a157806310969523146103cf578063163e1e61146103ef57806318160ddd1461040f5780631b57190e1461042e57806323b872dd146104445780632f745c591461046457600080fd5b806301ffc9a7146102e9578063046dc1661461031e578063049c5c491461034057806306fdde0314610355578063081812fc14610377578063095ea7b3146103af575b600080fd5b3480156102f557600080fd5b50610309610304366004612f1d565b610912565b60405190151581526020015b60405180910390f35b34801561032a57600080fd5b5061033e610339366004612cd8565b61093d565b005b34801561034c57600080fd5b5061033e610992565b34801561036157600080fd5b5061036a6109d9565b604051610315919061314e565b34801561038357600080fd5b50610397610392366004612fb0565b610a6b565b6040516001600160a01b039091168152602001610315565b3480156103bb57600080fd5b5061033e6103ca366004612dff565b610b00565b3480156103db57600080fd5b5061033e6103ea366004612f55565b610c16565b3480156103fb57600080fd5b5061033e61040a366004612e28565b610c75565b34801561041b57600080fd5b506008545b604051908152602001610315565b34801561043a57600080fd5b5061042060135481565b34801561045057600080fd5b5061033e61045f366004612d24565b610db8565b34801561047057600080fd5b5061042061047f366004612dff565b610de9565b34801561049057600080fd5b50610420610bb881565b3480156104a657600080fd5b5061033e610e7f565b3480156104bb57600080fd5b5061033e6104ca366004612d24565b610f1b565b3480156104db57600080fd5b506104206104ea366004612fb0565b610f36565b3480156104fb57600080fd5b5061033e61050a366004612f55565b610fd7565b34801561051b57600080fd5b5061042060155481565b34801561053157600080fd5b50610420610540366004612cd8565b6001600160a01b03166000908152600c602052604090205490565b34801561056757600080fd5b50610397610576366004612fb0565b611036565b34801561058757600080fd5b506104206701140bbd030c400081565b3480156105a357600080fd5b506104206105b2366004612cd8565b6110ad565b3480156105c357600080fd5b5061033e611134565b3480156105d857600080fd5b5061033e6105e7366004612e28565b61116a565b3480156105f857600080fd5b5061033e6112ba565b61033e61060f366004612fb0565b6112f8565b34801561062057600080fd5b506017546103099060ff1681565b34801561063a57600080fd5b50610420600781565b34801561064f57600080fd5b50600a546001600160a01b0316610397565b34801561066d57600080fd5b5061042061156d565b34801561068257600080fd5b5061033e610691366004612f55565b61158a565b3480156106a257600080fd5b5061042060145481565b3480156106b857600080fd5b5061036a6115e9565b3480156106cd57600080fd5b5061033e6115f8565b3480156106e257600080fd5b506104206106f1366004612cd8565b600c6020526000908152604090205481565b34801561070f57600080fd5b5061030961071e366004612cd8565b600b6020526000908152604090205460ff1681565b34801561073f57600080fd5b5061030961074e366004612cd8565b6001600160a01b03166000908152600b602052604090205460ff1690565b61033e61077a366004612e98565b611635565b34801561078b57600080fd5b5061033e61079a366004612dc5565b611968565b3480156107ab57600080fd5b5061033e6107ba366004612e28565b611a2d565b3480156107cb57600080fd5b5061033e6107da366004612d5f565b611b11565b3480156107eb57600080fd5b5061036a6107fa366004612fb0565b611b49565b34801561080b57600080fd5b506017546103099062010000900460ff1681565b34801561082b57600080fd5b5061042061196481565b34801561084157600080fd5b5060175461030990610100900460ff1681565b34801561086057600080fd5b5061036a611be2565b34801561087557600080fd5b50610309610884366004612cf2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156108be57600080fd5b50610420600a81565b3480156108d357600080fd5b5061033e6108e2366004612cd8565b611bf1565b3480156108f357600080fd5b5061042060165481565b34801561090957600080fd5b5061036a611c89565b60006001600160e01b0319821663780e9d6360e01b1480610937575061093782611d17565b92915050565b600a546001600160a01b031633146109705760405162461bcd60e51b8152600401610967906131d9565b60405180910390fd5b601180546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031633146109bc5760405162461bcd60e51b8152600401610967906131d9565b6017805461ff001981166101009182900460ff1615909102179055565b6060600080546109e890613339565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1490613339565b8015610a615780601f10610a3657610100808354040283529160200191610a61565b820191906000526020600020905b815481529060010190602001808311610a4457829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610ae45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610967565b506000908152600460205260409020546001600160a01b031690565b6000610b0b82611036565b9050806001600160a01b0316836001600160a01b03161415610b795760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610967565b336001600160a01b0382161480610b955750610b958133610884565b610c075760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610967565b610c118383611d67565b505050565b600a546001600160a01b03163314610c405760405162461bcd60e51b8152600401610967906131d9565b60175462010000900460ff1615610c695760405162461bcd60e51b81526004016109679061320e565b610c1160128383612b87565b600a546001600160a01b03163314610c9f5760405162461bcd60e51b8152600401610967906131d9565b611964610caf610bb8600a6132ab565b610cb991906132ab565b81610cc360085490565b610ccd91906132ab565b1115610ceb5760405162461bcd60e51b8152600401610967906131b3565b601354600a90610cfc9083906132ab565b1115610d3a5760405162461bcd60e51b815260206004820152600d60248201526c4e6f206d6f726520676966747360981b6044820152606401610967565b60005b81811015610c115760138054906000610d5583613374565b9190505550610da6838383818110610d7d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610d929190612cd8565b6008545b610da19060016132ab565b611dd5565b80610db081613374565b915050610d3d565b610dc23382611def565b610dde5760405162461bcd60e51b81526004016109679061325a565b610c11838383611ee6565b6000610df4836110ad565b8210610e565760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610967565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610ea95760405162461bcd60e51b8152600401610967906131d9565b6010546001600160a01b03166108fc610ec3600a476132c3565b6040518115909202916000818181858888f19350505050158015610eeb573d6000803e3d6000fd5b5060405133904780156108fc02916000818181858888f19350505050158015610f18573d6000803e3d6000fd5b50565b610c1183838360405180602001604052806000815250611b11565b6000610f4160085490565b8210610fa45760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610967565b60088281548110610fc557634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b600a546001600160a01b031633146110015760405162461bcd60e51b8152600401610967906131d9565b60175462010000900460ff161561102a5760405162461bcd60e51b81526004016109679061320e565b610c11600f8383612b87565b6000818152600260205260408120546001600160a01b0316806109375760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610967565b60006001600160a01b0382166111185760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610967565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b0316331461115e5760405162461bcd60e51b8152600401610967906131d9565b6111686000612091565b565b600a546001600160a01b031633146111945760405162461bcd60e51b8152600401610967906131d9565b60005b81811015610c115760008383838181106111c157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906111d69190612cd8565b90506001600160a01b03811661121d5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610967565b6001600160a01b0381166000908152600b602052604090205460ff16156112865760405162461bcd60e51b815260206004820152601f60248201527f416e20656e74727920697320616c7265616479206f6e20746865206c697374006044820152606401610967565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055806112b281613374565b915050611197565b600a546001600160a01b031633146112e45760405162461bcd60e51b8152600401610967906131d9565b6017805460ff19811660ff90911615179055565b601754610100900460ff16158015611312575060175460ff165b6113525760405162461bcd60e51b8152602060048201526011602482015270141c995cd85b19481a5cc818db1bdcd959607a1b6044820152606401610967565b336000908152600b602052604090205460ff166113b15760405162461bcd60e51b815260206004820152601760248201527f4e6f74206f6e207468652070726573616c65206c6973740000000000000000006044820152606401610967565b6119646113c1610bb8600a6132ab565b6113cb91906132ab565b600854106113eb5760405162461bcd60e51b8152600401610967906131b3565b610bb8816015546113fc91906132ab565b111561144a5760405162461bcd60e51b815260206004820152601b60248201527f507269766174652073616c65206c696d697420657863656564656400000000006044820152606401610967565b601654336000908152600c60205260409020546114689083906132ab565b11156114b65760405162461bcd60e51b815260206004820152601960248201527f546f6b656e20616c6c6f636174696f6e206578636565646564000000000000006044820152606401610967565b346114c9826701140bbd030c40006132d7565b111561150a5760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b41032ba3432b960811b6044820152606401610967565b60005b81811015611569576015805490600061152583613374565b9091555050336000908152600c6020526040812080549161154583613374565b919050555061155733610d9660085490565b8061156181613374565b91505061150d565b5050565b61196461157d610bb8600a6132ab565b61158791906132ab565b81565b600a546001600160a01b031633146115b45760405162461bcd60e51b8152600401610967906131d9565b60175462010000900460ff16156115dd5760405162461bcd60e51b81526004016109679061320e565b610c11600e8383612b87565b6060600180546109e890613339565b600a546001600160a01b031633146116225760405162461bcd60e51b8152600401610967906131d9565b6017805462ff0000191662010000179055565b601754610100900460ff1661167f5760405162461bcd60e51b815260206004820152601060248201526f53616c65206973206e6f74206c69766560801b6044820152606401610967565b60175460ff16156116c45760405162461bcd60e51b815260206004820152600f60248201526e50726573616c65206973206c69766560881b6044820152606401610967565b6116ce84846120e3565b6117075760405162461bcd60e51b815260206004820152600a60248201526910d85b89dd081b5a5b9d60b21b6044820152606401610967565b600d82604051611717919061304f565b9081526040519081900360200190205460ff161561176b5760405162461bcd60e51b815260206004820152601160248201527012185cda08185b1c9958591e481d5cd959607a1b6044820152606401610967565b83611777338385612107565b146117b25760405162461bcd60e51b815260206004820152600b60248201526a12185cda0819985a5b195960aa1b6044820152606401610967565b6119646117c2610bb8600a6132ab565b6117cc91906132ab565b600854106117ec5760405162461bcd60e51b8152600401610967906131b3565b611964816014546117fd91906132ab565b111561184b5760405162461bcd60e51b815260206004820152601a60248201527f5075626c69632073616c65206c696d69742065786365656465640000000000006044820152606401610967565b600781111561189c5760405162461bcd60e51b815260206004820181905260248201527f546f6b656e207175616e7469747920706572206d696e742065786365656465646044820152606401610967565b346118af826701140bbd030c40006132d7565b11156118f05760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b41032ba3432b960811b6044820152606401610967565b60005b8181101561192f576014805490600061190b83613374565b919050555061191d33610d9660085490565b8061192781613374565b9150506118f3565b506001600d83604051611942919061304f565b908152604051908190036020019020805491151560ff1990921691909117905550505050565b6001600160a01b0382163314156119c15760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610967565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b03163314611a575760405162461bcd60e51b8152600401610967906131d9565b60005b81811015610c11576000838383818110611a8457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a999190612cd8565b90506001600160a01b038116611ae05760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610967565b6001600160a01b03166000908152600b60205260409020805460ff1916905580611b0981613374565b915050611a5a565b611b1b3383611def565b611b375760405162461bcd60e51b81526004016109679061325a565b611b4384848484612189565b50505050565b6000818152600260205260409020546060906001600160a01b0316611bb05760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e006044820152606401610967565b600f611bbb836121bc565b604051602001611bcc92919061306b565b6040516020818303038152906040529050919050565b6060600e80546109e890613339565b600a546001600160a01b03163314611c1b5760405162461bcd60e51b8152600401610967906131d9565b6001600160a01b038116611c805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610967565b610f1881612091565b60128054611c9690613339565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc290613339565b8015611d0f5780601f10611ce457610100808354040283529160200191611d0f565b820191906000526020600020905b815481529060010190602001808311611cf257829003601f168201915b505050505081565b60006001600160e01b031982166380ac58cd60e01b1480611d4857506001600160e01b03198216635b5e139f60e01b145b8061093757506301ffc9a760e01b6001600160e01b0319831614610937565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d9c82611036565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6115698282604051806020016040528060008152506122d6565b6000818152600260205260408120546001600160a01b0316611e685760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610967565b6000611e7383611036565b9050806001600160a01b0316846001600160a01b03161480611eae5750836001600160a01b0316611ea384610a6b565b6001600160a01b0316145b80611ede57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611ef982611036565b6001600160a01b031614611f615760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610967565b6001600160a01b038216611fc35760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610967565b611fce838383612309565b611fd9600082611d67565b6001600160a01b03831660009081526003602052604081208054600192906120029084906132f6565b90915550506001600160a01b03821660009081526003602052604081208054600192906120309084906132ab565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006120ef83836123c1565b6011546001600160a01b039182169116149392505050565b60008084848460405160200161211f93929190613010565b60408051601f198184030181529082905280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000091830191909152603c820152605c0160408051808303601f19018152919052805160209091012095945050505050565b612194848484611ee6565b6121a0848484846123e5565b611b435760405162461bcd60e51b815260040161096790613161565b6060816121e05750506040805180820190915260018152600360fc1b602082015290565b8160005b811561220a57806121f481613374565b91506122039050600a836132c3565b91506121e4565b60008167ffffffffffffffff81111561223357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561225d576020820181803683370190505b5090505b8415611ede576122726001836132f6565b915061227f600a8661338f565b61228a9060306132ab565b60f81b8183815181106122ad57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506122cf600a866132c3565b9450612261565b6122e083836124f2565b6122ed60008484846123e5565b610c115760405162461bcd60e51b815260040161096790613161565b6001600160a01b0383166123645761235f81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612387565b816001600160a01b0316836001600160a01b031614612387576123878382612640565b6001600160a01b03821661239e57610c11816126dd565b826001600160a01b0316826001600160a01b031614610c1157610c1182826127b6565b60008060006123d085856127fa565b915091506123dd8161286a565b509392505050565b60006001600160a01b0384163b156124e757604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612429903390899088908890600401613111565b602060405180830381600087803b15801561244357600080fd5b505af1925050508015612473575060408051601f3d908101601f1916820190925261247091810190612f39565b60015b6124cd573d8080156124a1576040519150601f19603f3d011682016040523d82523d6000602084013e6124a6565b606091505b5080516124c55760405162461bcd60e51b815260040161096790613161565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611ede565b506001949350505050565b6001600160a01b0382166125485760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610967565b6000818152600260205260409020546001600160a01b0316156125ad5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610967565b6125b960008383612309565b6001600160a01b03821660009081526003602052604081208054600192906125e29084906132ab565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000600161264d846110ad565b61265791906132f6565b6000838152600760205260409020549091508082146126aa576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906126ef906001906132f6565b6000838152600960205260408120546008805493945090928490811061272557634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806008838154811061275457634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061279a57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006127c1836110ad565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6000808251604114156128315760208301516040840151606085015160001a61282587828585612a6b565b94509450505050612863565b82516040141561285b5760208301516040840151612850868383612b58565b935093505050612863565b506000905060025b9250929050565b600081600481111561288c57634e487b7160e01b600052602160045260246000fd5b14156128955750565b60018160048111156128b757634e487b7160e01b600052602160045260246000fd5b14156129055760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610967565b600281600481111561292757634e487b7160e01b600052602160045260246000fd5b14156129755760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610967565b600381600481111561299757634e487b7160e01b600052602160045260246000fd5b14156129f05760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610967565b6004816004811115612a1257634e487b7160e01b600052602160045260246000fd5b1415610f185760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610967565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612aa25750600090506003612b4f565b8460ff16601b14158015612aba57508460ff16601c14155b15612acb5750600090506004612b4f565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612b1f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612b4857600060019250925050612b4f565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01612b7987828885612a6b565b935093505050935093915050565b828054612b9390613339565b90600052602060002090601f016020900481019282612bb55760008555612bfb565b82601f10612bce5782800160ff19823516178555612bfb565b82800160010185558215612bfb579182015b82811115612bfb578235825591602001919060010190612be0565b50612c07929150612c0b565b5090565b5b80821115612c075760008155600101612c0c565b600067ffffffffffffffff80841115612c3b57612c3b6133cf565b604051601f8501601f19908116603f01168101908282118183101715612c6357612c636133cf565b81604052809350858152868686011115612c7c57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612cad57600080fd5b919050565b600082601f830112612cc2578081fd5b612cd183833560208501612c20565b9392505050565b600060208284031215612ce9578081fd5b612cd182612c96565b60008060408385031215612d04578081fd5b612d0d83612c96565b9150612d1b60208401612c96565b90509250929050565b600080600060608486031215612d38578081fd5b612d4184612c96565b9250612d4f60208501612c96565b9150604084013590509250925092565b60008060008060808587031215612d74578081fd5b612d7d85612c96565b9350612d8b60208601612c96565b925060408501359150606085013567ffffffffffffffff811115612dad578182fd5b612db987828801612cb2565b91505092959194509250565b60008060408385031215612dd7578182fd5b612de083612c96565b915060208301358015158114612df4578182fd5b809150509250929050565b60008060408385031215612e11578182fd5b612e1a83612c96565b946020939093013593505050565b60008060208385031215612e3a578182fd5b823567ffffffffffffffff80821115612e51578384fd5b818501915085601f830112612e64578384fd5b813581811115612e72578485fd5b8660208260051b8501011115612e86578485fd5b60209290920196919550909350505050565b60008060008060808587031215612ead578384fd5b84359350602085013567ffffffffffffffff80821115612ecb578485fd5b612ed788838901612cb2565b94506040870135915080821115612eec578384fd5b508501601f81018713612efd578283fd5b612f0c87823560208401612c20565b949793965093946060013593505050565b600060208284031215612f2e578081fd5b8135612cd1816133e5565b600060208284031215612f4a578081fd5b8151612cd1816133e5565b60008060208385031215612f67578182fd5b823567ffffffffffffffff80821115612f7e578384fd5b818501915085601f830112612f91578384fd5b813581811115612f9f578485fd5b866020828501011115612e86578485fd5b600060208284031215612fc1578081fd5b5035919050565b60008151808452612fe081602086016020860161330d565b601f01601f19169290920160200192915050565b6000815161300681856020860161330d565b9290920192915050565b6bffffffffffffffffffffffff198460601b1681528260148201526000825161304081603485016020870161330d565b91909101603401949350505050565b6000825161306181846020870161330d565b9190910192915050565b600080845482600182811c91508083168061308757607f831692505b60208084108214156130a757634e487b7160e01b87526022600452602487fd5b8180156130bb57600181146130cc576130f8565b60ff198616895284890196506130f8565b60008b815260209020885b868110156130f05781548b8201529085019083016130d7565b505084890196505b5050505050506131088185612ff4565b95945050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061314490830184612fc8565b9695505050505050565b602081526000612cd16020830184612fc8565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252600c908201526b4f7574206f662073746f636b60a01b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602c908201527f436f6e7472616374206d65746164617461206d6574686f647320617265206c6f60408201526b31b5b2b2103337b932bb32b960a11b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156132be576132be6133a3565b500190565b6000826132d2576132d26133b9565b500490565b60008160001904831182151516156132f1576132f16133a3565b500290565b600082821015613308576133086133a3565b500390565b60005b83811015613328578181015183820152602001613310565b83811115611b435750506000910152565b600181811c9082168061334d57607f821691505b6020821081141561336e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613388576133886133a3565b5060010190565b60008261339e5761339e6133b9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610f1857600080fdfea2646970667358221220728c04d1a0b578d0c1da5f0ff806b04d67a56254876b37bd652d62f534d2b7f364736f6c63430008040033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2E4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x815F7BBD GT PUSH2 0x190 JUMPI DUP1 PUSH4 0xA22CB465 GT PUSH2 0xDC JUMPI DUP1 PUSH4 0xE081B781 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xEAFC7F37 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xEAFC7F37 EQ PUSH2 0x8B2 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x8C7 JUMPI DUP1 PUSH4 0xF4743070 EQ PUSH2 0x8E7 JUMPI DUP1 PUSH4 0xFAF924CF EQ PUSH2 0x8FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE081B781 EQ PUSH2 0x835 JUMPI DUP1 PUSH4 0xE8A3D485 EQ PUSH2 0x854 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x869 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x77F JUMPI DUP1 PUSH4 0xB179E060 EQ PUSH2 0x79F JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x7BF JUMPI DUP1 PUSH4 0xC87B56DD EQ PUSH2 0x7DF JUMPI DUP1 PUSH4 0xCF309012 EQ PUSH2 0x7FF JUMPI DUP1 PUSH4 0xDAFFE420 EQ PUSH2 0x81F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x940F1ADA GT PUSH2 0x149 JUMPI DUP1 PUSH4 0x9BF80316 GT PUSH2 0x123 JUMPI DUP1 PUSH4 0x9BF80316 EQ PUSH2 0x6D6 JUMPI DUP1 PUSH4 0x9CF2E8D6 EQ PUSH2 0x703 JUMPI DUP1 PUSH4 0x9E273B2F EQ PUSH2 0x733 JUMPI DUP1 PUSH4 0x9EC70F19 EQ PUSH2 0x76C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x940F1ADA EQ PUSH2 0x696 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x6AC JUMPI DUP1 PUSH4 0x989BDBB6 EQ PUSH2 0x6C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x815F7BBD EQ PUSH2 0x601 JUMPI DUP1 PUSH4 0x83A9E049 EQ PUSH2 0x614 JUMPI DUP1 PUSH4 0x89C3B5BA EQ PUSH2 0x62E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x643 JUMPI DUP1 PUSH4 0x8DDDB20C EQ PUSH2 0x661 JUMPI DUP1 PUSH4 0x938E3D7B EQ PUSH2 0x676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x356423D8 GT PUSH2 0x24F JUMPI DUP1 PUSH4 0x5CE7AF1F GT PUSH2 0x208 JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x1E2 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x597 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x5B7 JUMPI DUP1 PUSH4 0x7204A3C9 EQ PUSH2 0x5CC JUMPI DUP1 PUSH4 0x7BFFB4CE EQ PUSH2 0x5EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5CE7AF1F EQ PUSH2 0x525 JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x55B JUMPI DUP1 PUSH4 0x6A33BB45 EQ PUSH2 0x57B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x356423D8 EQ PUSH2 0x484 JUMPI DUP1 PUSH4 0x3CCFD60B EQ PUSH2 0x49A JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x4AF JUMPI DUP1 PUSH4 0x4F6CCCE7 EQ PUSH2 0x4CF JUMPI DUP1 PUSH4 0x55F804B3 EQ PUSH2 0x4EF JUMPI DUP1 PUSH4 0x59A12AD5 EQ PUSH2 0x50F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x10969523 GT PUSH2 0x2A1 JUMPI DUP1 PUSH4 0x10969523 EQ PUSH2 0x3CF JUMPI DUP1 PUSH4 0x163E1E61 EQ PUSH2 0x3EF JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x40F JUMPI DUP1 PUSH4 0x1B57190E EQ PUSH2 0x42E JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x444 JUMPI DUP1 PUSH4 0x2F745C59 EQ PUSH2 0x464 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x2E9 JUMPI DUP1 PUSH4 0x46DC166 EQ PUSH2 0x31E JUMPI DUP1 PUSH4 0x49C5C49 EQ PUSH2 0x340 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x377 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x3AF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x309 PUSH2 0x304 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F1D JUMP JUMPDEST PUSH2 0x912 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x32A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x339 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CD8 JUMP JUMPDEST PUSH2 0x93D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x34C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x992 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x361 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x36A PUSH2 0x9D9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x315 SWAP2 SWAP1 PUSH2 0x314E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x383 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x397 PUSH2 0x392 CALLDATASIZE PUSH1 0x4 PUSH2 0x2FB0 JUMP JUMPDEST PUSH2 0xA6B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x315 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x3CA CALLDATASIZE PUSH1 0x4 PUSH2 0x2DFF JUMP JUMPDEST PUSH2 0xB00 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x3EA CALLDATASIZE PUSH1 0x4 PUSH2 0x2F55 JUMP JUMPDEST PUSH2 0xC16 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x40A CALLDATASIZE PUSH1 0x4 PUSH2 0x2E28 JUMP JUMPDEST PUSH2 0xC75 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x41B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x8 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x315 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x43A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH1 0x13 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x450 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x45F CALLDATASIZE PUSH1 0x4 PUSH2 0x2D24 JUMP JUMPDEST PUSH2 0xDB8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x470 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH2 0x47F CALLDATASIZE PUSH1 0x4 PUSH2 0x2DFF JUMP JUMPDEST PUSH2 0xDE9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x490 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH2 0xBB8 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0xE7F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x4CA CALLDATASIZE PUSH1 0x4 PUSH2 0x2D24 JUMP JUMPDEST PUSH2 0xF1B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH2 0x4EA CALLDATASIZE PUSH1 0x4 PUSH2 0x2FB0 JUMP JUMPDEST PUSH2 0xF36 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x50A CALLDATASIZE PUSH1 0x4 PUSH2 0x2F55 JUMP JUMPDEST PUSH2 0xFD7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH1 0x15 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x531 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH2 0x540 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CD8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x567 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x397 PUSH2 0x576 CALLDATASIZE PUSH1 0x4 PUSH2 0x2FB0 JUMP JUMPDEST PUSH2 0x1036 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x587 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH8 0x1140BBD030C4000 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH2 0x5B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CD8 JUMP JUMPDEST PUSH2 0x10AD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x1134 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x5E7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2E28 JUMP JUMPDEST PUSH2 0x116A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x12BA JUMP JUMPDEST PUSH2 0x33E PUSH2 0x60F CALLDATASIZE PUSH1 0x4 PUSH2 0x2FB0 JUMP JUMPDEST PUSH2 0x12F8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x620 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x17 SLOAD PUSH2 0x309 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH1 0x7 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x64F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x397 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x66D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH2 0x156D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x682 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x691 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F55 JUMP JUMPDEST PUSH2 0x158A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH1 0x14 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x36A PUSH2 0x15E9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x15F8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH2 0x6F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CD8 JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x309 PUSH2 0x71E CALLDATASIZE PUSH1 0x4 PUSH2 0x2CD8 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x73F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x309 PUSH2 0x74E CALLDATASIZE PUSH1 0x4 PUSH2 0x2CD8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x33E PUSH2 0x77A CALLDATASIZE PUSH1 0x4 PUSH2 0x2E98 JUMP JUMPDEST PUSH2 0x1635 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x78B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x79A CALLDATASIZE PUSH1 0x4 PUSH2 0x2DC5 JUMP JUMPDEST PUSH2 0x1968 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x7BA CALLDATASIZE PUSH1 0x4 PUSH2 0x2E28 JUMP JUMPDEST PUSH2 0x1A2D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x7DA CALLDATASIZE PUSH1 0x4 PUSH2 0x2D5F JUMP JUMPDEST PUSH2 0x1B11 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x36A PUSH2 0x7FA CALLDATASIZE PUSH1 0x4 PUSH2 0x2FB0 JUMP JUMPDEST PUSH2 0x1B49 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x80B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x17 SLOAD PUSH2 0x309 SWAP1 PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x82B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH2 0x1964 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x841 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x17 SLOAD PUSH2 0x309 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x860 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x36A PUSH2 0x1BE2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x875 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x309 PUSH2 0x884 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CF2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH1 0xA DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x8E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CD8 JUMP JUMPDEST PUSH2 0x1BF1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x420 PUSH1 0x16 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x909 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x36A PUSH2 0x1C89 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x780E9D63 PUSH1 0xE0 SHL EQ DUP1 PUSH2 0x937 JUMPI POP PUSH2 0x937 DUP3 PUSH2 0x1D17 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x970 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x11 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x17 DUP1 SLOAD PUSH2 0xFF00 NOT DUP2 AND PUSH2 0x100 SWAP2 DUP3 SWAP1 DIV PUSH1 0xFF AND ISZERO SWAP1 SWAP2 MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD PUSH2 0x9E8 SWAP1 PUSH2 0x3339 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xA14 SWAP1 PUSH2 0x3339 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xA61 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xA36 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xA61 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA44 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xAE4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F76656420717565727920666F72206E6F6E6578 PUSH1 0x44 DUP3 ADD MSTORE PUSH12 0x34B9BA32B73A103A37B5B2B7 PUSH1 0xA1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB0B DUP3 PUSH2 0x1036 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xB79 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F76616C20746F2063757272656E74206F776E65 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x39 PUSH1 0xF9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ DUP1 PUSH2 0xB95 JUMPI POP PUSH2 0xB95 DUP2 CALLER PUSH2 0x884 JUMP JUMPDEST PUSH2 0xC07 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x38 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F76652063616C6C6572206973206E6F74206F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E6572206E6F7220617070726F76656420666F7220616C6C0000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST PUSH2 0xC11 DUP4 DUP4 PUSH2 0x1D67 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC40 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xC69 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x320E JUMP JUMPDEST PUSH2 0xC11 PUSH1 0x12 DUP4 DUP4 PUSH2 0x2B87 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC9F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH2 0x1964 PUSH2 0xCAF PUSH2 0xBB8 PUSH1 0xA PUSH2 0x32AB JUMP JUMPDEST PUSH2 0xCB9 SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST DUP2 PUSH2 0xCC3 PUSH1 0x8 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xCCD SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST GT ISZERO PUSH2 0xCEB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31B3 JUMP JUMPDEST PUSH1 0x13 SLOAD PUSH1 0xA SWAP1 PUSH2 0xCFC SWAP1 DUP4 SWAP1 PUSH2 0x32AB JUMP JUMPDEST GT ISZERO PUSH2 0xD3A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x4E6F206D6F7265206769667473 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC11 JUMPI PUSH1 0x13 DUP1 SLOAD SWAP1 PUSH1 0x0 PUSH2 0xD55 DUP4 PUSH2 0x3374 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP PUSH2 0xDA6 DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0xD7D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xD92 SWAP2 SWAP1 PUSH2 0x2CD8 JUMP JUMPDEST PUSH1 0x8 SLOAD JUMPDEST PUSH2 0xDA1 SWAP1 PUSH1 0x1 PUSH2 0x32AB JUMP JUMPDEST PUSH2 0x1DD5 JUMP JUMPDEST DUP1 PUSH2 0xDB0 DUP2 PUSH2 0x3374 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xD3D JUMP JUMPDEST PUSH2 0xDC2 CALLER DUP3 PUSH2 0x1DEF JUMP JUMPDEST PUSH2 0xDDE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x325A JUMP JUMPDEST PUSH2 0xC11 DUP4 DUP4 DUP4 PUSH2 0x1EE6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDF4 DUP4 PUSH2 0x10AD JUMP JUMPDEST DUP3 LT PUSH2 0xE56 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243373231456E756D657261626C653A206F776E657220696E646578206F75 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x74206F6620626F756E6473 PUSH1 0xA8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xEA9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x8FC PUSH2 0xEC3 PUSH1 0xA SELFBALANCE PUSH2 0x32C3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 ISZERO SWAP1 SWAP3 MUL SWAP2 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0xEEB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD CALLER SWAP1 SELFBALANCE DUP1 ISZERO PUSH2 0x8FC MUL SWAP2 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0xF18 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xC11 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x1B11 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF41 PUSH1 0x8 SLOAD SWAP1 JUMP JUMPDEST DUP3 LT PUSH2 0xFA4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243373231456E756D657261626C653A20676C6F62616C20696E646578206F PUSH1 0x44 DUP3 ADD MSTORE PUSH12 0x7574206F6620626F756E6473 PUSH1 0xA0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x8 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xFC5 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1001 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x102A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x320E JUMP JUMPDEST PUSH2 0xC11 PUSH1 0xF DUP4 DUP4 PUSH2 0x2B87 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0x937 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A206F776E657220717565727920666F72206E6F6E6578697374 PUSH1 0x44 DUP3 ADD MSTORE PUSH9 0x32B73A103A37B5B2B7 PUSH1 0xB9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1118 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A2062616C616E636520717565727920666F7220746865207A65 PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x726F2061646472657373 PUSH1 0xB0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x115E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH2 0x1168 PUSH1 0x0 PUSH2 0x2091 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1194 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC11 JUMPI PUSH1 0x0 DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0x11C1 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x11D6 SWAP2 SWAP1 PUSH2 0x2CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x121D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x5A65726F2041646472657373 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1286 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416E20656E74727920697320616C7265616479206F6E20746865206C69737400 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 PUSH2 0x12B2 DUP2 PUSH2 0x3374 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1197 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x12E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x17 DUP1 SLOAD PUSH1 0xFF NOT DUP2 AND PUSH1 0xFF SWAP1 SWAP2 AND ISZERO OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1312 JUMPI POP PUSH1 0x17 SLOAD PUSH1 0xFF AND JUMPDEST PUSH2 0x1352 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x141C995CD85B19481A5CC818DB1BDCD959 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x13B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F74206F6E207468652070726573616C65206C697374000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH2 0x1964 PUSH2 0x13C1 PUSH2 0xBB8 PUSH1 0xA PUSH2 0x32AB JUMP JUMPDEST PUSH2 0x13CB SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST PUSH1 0x8 SLOAD LT PUSH2 0x13EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31B3 JUMP JUMPDEST PUSH2 0xBB8 DUP2 PUSH1 0x15 SLOAD PUSH2 0x13FC SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST GT ISZERO PUSH2 0x144A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x507269766174652073616C65206C696D69742065786365656465640000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x16 SLOAD CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1468 SWAP1 DUP4 SWAP1 PUSH2 0x32AB JUMP JUMPDEST GT ISZERO PUSH2 0x14B6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E20616C6C6F636174696F6E20657863656564656400000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST CALLVALUE PUSH2 0x14C9 DUP3 PUSH8 0x1140BBD030C4000 PUSH2 0x32D7 JUMP JUMPDEST GT ISZERO PUSH2 0x150A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x2737BA1032B737BAB3B41032BA3432B9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1569 JUMPI PUSH1 0x15 DUP1 SLOAD SWAP1 PUSH1 0x0 PUSH2 0x1525 DUP4 PUSH2 0x3374 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 PUSH2 0x1545 DUP4 PUSH2 0x3374 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP PUSH2 0x1557 CALLER PUSH2 0xD96 PUSH1 0x8 SLOAD SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x1561 DUP2 PUSH2 0x3374 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x150D JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1964 PUSH2 0x157D PUSH2 0xBB8 PUSH1 0xA PUSH2 0x32AB JUMP JUMPDEST PUSH2 0x1587 SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x15B4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x15DD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x320E JUMP JUMPDEST PUSH2 0xC11 PUSH1 0xE DUP4 DUP4 PUSH2 0x2B87 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP1 SLOAD PUSH2 0x9E8 SWAP1 PUSH2 0x3339 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1622 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x17 DUP1 SLOAD PUSH3 0xFF0000 NOT AND PUSH3 0x10000 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x167F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x53616C65206973206E6F74206C697665 PUSH1 0x80 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x16C4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x50726573616C65206973206C697665 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH2 0x16CE DUP5 DUP5 PUSH2 0x20E3 JUMP JUMPDEST PUSH2 0x1707 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x10D85B89DD081B5A5B9D PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0xD DUP3 PUSH1 0x40 MLOAD PUSH2 0x1717 SWAP2 SWAP1 PUSH2 0x304F JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x176B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x12185CDA08185B1C9958591E481D5CD959 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST DUP4 PUSH2 0x1777 CALLER DUP4 DUP6 PUSH2 0x2107 JUMP JUMPDEST EQ PUSH2 0x17B2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x12185CDA0819985A5B1959 PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH2 0x1964 PUSH2 0x17C2 PUSH2 0xBB8 PUSH1 0xA PUSH2 0x32AB JUMP JUMPDEST PUSH2 0x17CC SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST PUSH1 0x8 SLOAD LT PUSH2 0x17EC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31B3 JUMP JUMPDEST PUSH2 0x1964 DUP2 PUSH1 0x14 SLOAD PUSH2 0x17FD SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST GT ISZERO PUSH2 0x184B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5075626C69632073616C65206C696D6974206578636565646564000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x7 DUP2 GT ISZERO PUSH2 0x189C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E207175616E7469747920706572206D696E74206578636565646564 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST CALLVALUE PUSH2 0x18AF DUP3 PUSH8 0x1140BBD030C4000 PUSH2 0x32D7 JUMP JUMPDEST GT ISZERO PUSH2 0x18F0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x2737BA1032B737BAB3B41032BA3432B9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x192F JUMPI PUSH1 0x14 DUP1 SLOAD SWAP1 PUSH1 0x0 PUSH2 0x190B DUP4 PUSH2 0x3374 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP PUSH2 0x191D CALLER PUSH2 0xD96 PUSH1 0x8 SLOAD SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x1927 DUP2 PUSH2 0x3374 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x18F3 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0xD DUP4 PUSH1 0x40 MLOAD PUSH2 0x1942 SWAP2 SWAP1 PUSH2 0x304F JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 KECCAK256 DUP1 SLOAD SWAP2 ISZERO ISZERO PUSH1 0xFF NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND CALLER EQ ISZERO PUSH2 0x19C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20617070726F766520746F2063616C6C657200000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1A57 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC11 JUMPI PUSH1 0x0 DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0x1A84 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1A99 SWAP2 SWAP1 PUSH2 0x2CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1AE0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x5A65726F2041646472657373 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP1 PUSH2 0x1B09 DUP2 PUSH2 0x3374 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1A5A JUMP JUMPDEST PUSH2 0x1B1B CALLER DUP4 PUSH2 0x1DEF JUMP JUMPDEST PUSH2 0x1B37 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x325A JUMP JUMPDEST PUSH2 0x1B43 DUP5 DUP5 DUP5 DUP5 PUSH2 0x2189 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x60 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1BB0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F74207175657279206E6F6E2D6578697374656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0xF PUSH2 0x1BBB DUP4 PUSH2 0x21BC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1BCC SWAP3 SWAP2 SWAP1 PUSH2 0x306B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0xE DUP1 SLOAD PUSH2 0x9E8 SWAP1 PUSH2 0x3339 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1C1B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1C80 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST PUSH2 0xF18 DUP2 PUSH2 0x2091 JUMP JUMPDEST PUSH1 0x12 DUP1 SLOAD PUSH2 0x1C96 SWAP1 PUSH2 0x3339 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1CC2 SWAP1 PUSH2 0x3339 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1D0F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1CE4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1D0F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1CF2 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x80AC58CD PUSH1 0xE0 SHL EQ DUP1 PUSH2 0x1D48 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x5B5E139F PUSH1 0xE0 SHL EQ JUMPDEST DUP1 PUSH2 0x937 JUMPI POP PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND EQ PUSH2 0x937 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SWAP1 PUSH2 0x1D9C DUP3 PUSH2 0x1036 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH2 0x1569 DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x22D6 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1E68 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A206F70657261746F7220717565727920666F72206E6F6E6578 PUSH1 0x44 DUP3 ADD MSTORE PUSH12 0x34B9BA32B73A103A37B5B2B7 PUSH1 0xA1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E73 DUP4 PUSH2 0x1036 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x1EAE JUMPI POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1EA3 DUP5 PUSH2 0xA6B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 PUSH2 0x1EDE JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1EF9 DUP3 PUSH2 0x1036 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1F61 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E73666572206F6620746F6B656E20746861742069 PUSH1 0x44 DUP3 ADD MSTORE PUSH9 0x39903737BA1037BBB7 PUSH1 0xB9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1FC3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E7366657220746F20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST PUSH2 0x1FCE DUP4 DUP4 DUP4 PUSH2 0x2309 JUMP JUMPDEST PUSH2 0x1FD9 PUSH1 0x0 DUP3 PUSH2 0x1D67 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP3 SWAP1 PUSH2 0x2002 SWAP1 DUP5 SWAP1 PUSH2 0x32F6 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP3 SWAP1 PUSH2 0x2030 SWAP1 DUP5 SWAP1 PUSH2 0x32AB JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE SWAP2 MLOAD DUP5 SWAP4 SWAP2 DUP8 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x20EF DUP4 DUP4 PUSH2 0x23C1 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x211F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3010 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3C DUP3 ADD MSTORE PUSH1 0x5C ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB PUSH1 0x1F NOT ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2194 DUP5 DUP5 DUP5 PUSH2 0x1EE6 JUMP JUMPDEST PUSH2 0x21A0 DUP5 DUP5 DUP5 DUP5 PUSH2 0x23E5 JUMP JUMPDEST PUSH2 0x1B43 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x3161 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH2 0x21E0 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x3 PUSH1 0xFC SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x0 JUMPDEST DUP2 ISZERO PUSH2 0x220A JUMPI DUP1 PUSH2 0x21F4 DUP2 PUSH2 0x3374 JUMP JUMPDEST SWAP2 POP PUSH2 0x2203 SWAP1 POP PUSH1 0xA DUP4 PUSH2 0x32C3 JUMP JUMPDEST SWAP2 POP PUSH2 0x21E4 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2233 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x225D JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP JUMPDEST DUP5 ISZERO PUSH2 0x1EDE JUMPI PUSH2 0x2272 PUSH1 0x1 DUP4 PUSH2 0x32F6 JUMP JUMPDEST SWAP2 POP PUSH2 0x227F PUSH1 0xA DUP7 PUSH2 0x338F JUMP JUMPDEST PUSH2 0x228A SWAP1 PUSH1 0x30 PUSH2 0x32AB JUMP JUMPDEST PUSH1 0xF8 SHL DUP2 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x22AD JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH2 0x22CF PUSH1 0xA DUP7 PUSH2 0x32C3 JUMP JUMPDEST SWAP5 POP PUSH2 0x2261 JUMP JUMPDEST PUSH2 0x22E0 DUP4 DUP4 PUSH2 0x24F2 JUMP JUMPDEST PUSH2 0x22ED PUSH1 0x0 DUP5 DUP5 DUP5 PUSH2 0x23E5 JUMP JUMPDEST PUSH2 0xC11 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x3161 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x2364 JUMPI PUSH2 0x235F DUP2 PUSH1 0x8 DUP1 SLOAD PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP3 SWAP1 SSTORE PUSH1 0x1 DUP3 ADD DUP4 SSTORE SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xF3F7A9FE364FAAB93B216DA50A3214154F22A0A2B415B23A84C8169E8B636EE3 ADD SSTORE JUMP JUMPDEST PUSH2 0x2387 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x2387 JUMPI PUSH2 0x2387 DUP4 DUP3 PUSH2 0x2640 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x239E JUMPI PUSH2 0xC11 DUP2 PUSH2 0x26DD JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xC11 JUMPI PUSH2 0xC11 DUP3 DUP3 PUSH2 0x27B6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x23D0 DUP6 DUP6 PUSH2 0x27FA JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x23DD DUP2 PUSH2 0x286A JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO PUSH2 0x24E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA85BD01 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x150B7A02 SWAP1 PUSH2 0x2429 SWAP1 CALLER SWAP1 DUP10 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x3111 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2443 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x2473 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x2470 SWAP2 DUP2 ADD SWAP1 PUSH2 0x2F39 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x24CD JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x24A1 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x24A6 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP DUP1 MLOAD PUSH2 0x24C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x967 SWAP1 PUSH2 0x3161 JUMP JUMPDEST DUP1 MLOAD DUP2 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH4 0xA85BD01 PUSH1 0xE1 SHL EQ SWAP1 POP PUSH2 0x1EDE JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2548 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A206D696E7420746F20746865207A65726F2061646472657373 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x25AD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732313A20746F6B656E20616C7265616479206D696E74656400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH2 0x25B9 PUSH1 0x0 DUP4 DUP4 PUSH2 0x2309 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP3 SWAP1 PUSH2 0x25E2 SWAP1 DUP5 SWAP1 PUSH2 0x32AB JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD DUP4 SWAP3 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 DUP3 SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH2 0x264D DUP5 PUSH2 0x10AD JUMP JUMPDEST PUSH2 0x2657 SWAP2 SWAP1 PUSH2 0x32F6 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP1 DUP3 EQ PUSH2 0x26AA JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP5 DUP5 MSTORE DUP2 DUP5 KECCAK256 DUP2 SWAP1 SSTORE DUP4 MSTORE PUSH1 0x7 SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP2 SWAP1 SSTORE JUMPDEST POP PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP5 SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND DUP4 MSTORE PUSH1 0x6 DUP2 MSTORE DUP4 DUP4 KECCAK256 SWAP2 DUP4 MSTORE MSTORE SWAP1 DUP2 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x26EF SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x32F6 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x8 DUP1 SLOAD SWAP4 SWAP5 POP SWAP1 SWAP3 DUP5 SWAP1 DUP2 LT PUSH2 0x2725 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 PUSH1 0x8 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x2754 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE DUP3 DUP2 MSTORE PUSH1 0x9 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE DUP6 DUP3 MSTORE DUP2 KECCAK256 SSTORE PUSH1 0x8 DUP1 SLOAD DUP1 PUSH2 0x279A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27C1 DUP4 PUSH2 0x10AD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE SWAP4 DUP3 MSTORE PUSH1 0x7 SWAP1 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD PUSH1 0x41 EQ ISZERO PUSH2 0x2831 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x0 BYTE PUSH2 0x2825 DUP8 DUP3 DUP6 DUP6 PUSH2 0x2A6B JUMP JUMPDEST SWAP5 POP SWAP5 POP POP POP POP PUSH2 0x2863 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x40 EQ ISZERO PUSH2 0x285B JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x2850 DUP7 DUP4 DUP4 PUSH2 0x2B58 JUMP JUMPDEST SWAP4 POP SWAP4 POP POP POP PUSH2 0x2863 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 POP PUSH1 0x2 JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x288C JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ ISZERO PUSH2 0x2895 JUMPI POP JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x28B7 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ ISZERO PUSH2 0x2905 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x2927 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ ISZERO PUSH2 0x2975 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x2997 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ ISZERO PUSH2 0x29F0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x4 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x2A12 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST EQ ISZERO PUSH2 0xF18 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202776272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP4 GT ISZERO PUSH2 0x2AA2 JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x3 PUSH2 0x2B4F JUMP JUMPDEST DUP5 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0x2ABA JUMPI POP DUP5 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0x2ACB JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x4 PUSH2 0x2B4F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B1F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2B48 JUMPI PUSH1 0x0 PUSH1 0x1 SWAP3 POP SWAP3 POP POP PUSH2 0x2B4F JUMP JUMPDEST SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xFF SHL SUB DUP4 AND PUSH1 0xFF DUP5 SWAP1 SHR PUSH1 0x1B ADD PUSH2 0x2B79 DUP8 DUP3 DUP9 DUP6 PUSH2 0x2A6B JUMP JUMPDEST SWAP4 POP SWAP4 POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x2B93 SWAP1 PUSH2 0x3339 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2BB5 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x2BFB JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2BCE JUMPI DUP3 DUP1 ADD PUSH1 0xFF NOT DUP3 CALLDATALOAD AND OR DUP6 SSTORE PUSH2 0x2BFB JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2BFB JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2BFB JUMPI DUP3 CALLDATALOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2BE0 JUMP JUMPDEST POP PUSH2 0x2C07 SWAP3 SWAP2 POP PUSH2 0x2C0B JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x2C07 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2C0C JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT ISZERO PUSH2 0x2C3B JUMPI PUSH2 0x2C3B PUSH2 0x33CF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP6 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x2C63 JUMPI PUSH2 0x2C63 PUSH2 0x33CF JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP1 SWAP4 POP DUP6 DUP2 MSTORE DUP7 DUP7 DUP7 ADD GT ISZERO PUSH2 0x2C7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP8 DUP4 ADD ADD MSTORE POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2CAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2CC2 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2CD1 DUP4 DUP4 CALLDATALOAD PUSH1 0x20 DUP6 ADD PUSH2 0x2C20 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2CE9 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2CD1 DUP3 PUSH2 0x2C96 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2D04 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2D0D DUP4 PUSH2 0x2C96 JUMP JUMPDEST SWAP2 POP PUSH2 0x2D1B PUSH1 0x20 DUP5 ADD PUSH2 0x2C96 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2D38 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2D41 DUP5 PUSH2 0x2C96 JUMP JUMPDEST SWAP3 POP PUSH2 0x2D4F PUSH1 0x20 DUP6 ADD PUSH2 0x2C96 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2D74 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2D7D DUP6 PUSH2 0x2C96 JUMP JUMPDEST SWAP4 POP PUSH2 0x2D8B PUSH1 0x20 DUP7 ADD PUSH2 0x2C96 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2DAD JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2DB9 DUP8 DUP3 DUP9 ADD PUSH2 0x2CB2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2DD7 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2DE0 DUP4 PUSH2 0x2C96 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2DF4 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2E11 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2E1A DUP4 PUSH2 0x2C96 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2E3A JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2E51 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2E64 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x2E72 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP7 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x2E86 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH1 0x20 SWAP3 SWAP1 SWAP3 ADD SWAP7 SWAP2 SWAP6 POP SWAP1 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2EAD JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2ECB JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2ED7 DUP9 DUP4 DUP10 ADD PUSH2 0x2CB2 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2EEC JUMPI DUP4 DUP5 REVERT JUMPDEST POP DUP6 ADD PUSH1 0x1F DUP2 ADD DUP8 SGT PUSH2 0x2EFD JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x2F0C DUP8 DUP3 CALLDATALOAD PUSH1 0x20 DUP5 ADD PUSH2 0x2C20 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP4 SWAP5 PUSH1 0x60 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2F2E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2CD1 DUP2 PUSH2 0x33E5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2F4A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2CD1 DUP2 PUSH2 0x33E5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2F67 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2F7E JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2F91 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x2F9F JUMPI DUP5 DUP6 REVERT JUMPDEST DUP7 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2E86 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2FC1 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2FE0 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x330D JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH2 0x3006 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x330D JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP5 PUSH1 0x60 SHL AND DUP2 MSTORE DUP3 PUSH1 0x14 DUP3 ADD MSTORE PUSH1 0x0 DUP3 MLOAD PUSH2 0x3040 DUP2 PUSH1 0x34 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x330D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x34 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x3061 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x330D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 SLOAD DUP3 PUSH1 0x1 DUP3 DUP2 SHR SWAP2 POP DUP1 DUP4 AND DUP1 PUSH2 0x3087 JUMPI PUSH1 0x7F DUP4 AND SWAP3 POP JUMPDEST PUSH1 0x20 DUP1 DUP5 LT DUP3 EQ ISZERO PUSH2 0x30A7 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP8 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 DUP8 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x30BB JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x30CC JUMPI PUSH2 0x30F8 JUMP JUMPDEST PUSH1 0xFF NOT DUP7 AND DUP10 MSTORE DUP5 DUP10 ADD SWAP7 POP PUSH2 0x30F8 JUMP JUMPDEST PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 DUP9 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x30F0 JUMPI DUP2 SLOAD DUP12 DUP3 ADD MSTORE SWAP1 DUP6 ADD SWAP1 DUP4 ADD PUSH2 0x30D7 JUMP JUMPDEST POP POP DUP5 DUP10 ADD SWAP7 POP JUMPDEST POP POP POP POP POP POP PUSH2 0x3108 DUP2 DUP6 PUSH2 0x2FF4 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x3144 SWAP1 DUP4 ADD DUP5 PUSH2 0x2FC8 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2CD1 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2FC8 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x32 SWAP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E7366657220746F206E6F6E204552433732315265 PUSH1 0x40 DUP3 ADD MSTORE PUSH18 0x31B2B4BB32B91034B6B83632B6B2B73A32B9 PUSH1 0x71 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xC SWAP1 DUP3 ADD MSTORE PUSH12 0x4F7574206F662073746F636B PUSH1 0xA0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2C SWAP1 DUP3 ADD MSTORE PUSH32 0x436F6E7472616374206D65746164617461206D6574686F647320617265206C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH12 0x31B5B2B2103337B932BB32B9 PUSH1 0xA1 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x31 SWAP1 DUP3 ADD MSTORE PUSH32 0x4552433732313A207472616E736665722063616C6C6572206973206E6F74206F PUSH1 0x40 DUP3 ADD MSTORE PUSH17 0x1DDB995C881B9BDC88185C1C1C9BDD9959 PUSH1 0x7A SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x32BE JUMPI PUSH2 0x32BE PUSH2 0x33A3 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x32D2 JUMPI PUSH2 0x32D2 PUSH2 0x33B9 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x32F1 JUMPI PUSH2 0x32F1 PUSH2 0x33A3 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3308 JUMPI PUSH2 0x3308 PUSH2 0x33A3 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3328 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3310 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1B43 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x334D JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x336E JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x3388 JUMPI PUSH2 0x3388 PUSH2 0x33A3 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x339E JUMPI PUSH2 0x339E PUSH2 0x33B9 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0xF18 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH19 0x8C04D1A0B578D0C1DA5F0FF806B04D67A56254 DUP8 PUSH12 0x37BD652D62F534D2B7F36473 PUSH16 0x6C634300080400330000000000000000 ",
"sourceMap": "531:6351:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;910:222:4;;;;;;;;;;-1:-1:-1;910:222:4;;;;;:::i;:::-;;:::i;:::-;;;9604:14:14;;9597:22;9579:41;;9567:2;9552:18;910:222:4;;;;;;;;5981:97:13;;;;;;;;;;-1:-1:-1;5981:97:13;;;;;:::i;:::-;;:::i;:::-;;5887:84;;;;;;;;;;;;;:::i;2414:98:1:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3925:217::-;;;;;;;;;;-1:-1:-1;3925:217:1;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8902:32:14;;;8884:51;;8872:2;8857:18;3925:217:1;8839:102:14;3463:401:1;;;;;;;;;;-1:-1:-1;3463:401:1;;;;;:::i;:::-;;:::i;6088:107:13:-;;;;;;;;;;-1:-1:-1;6088:107:13;;;;;:::i;:::-;;:::i;4774:387::-;;;;;;;;;;-1:-1:-1;4774:387:13;;;;;:::i;:::-;;:::i;1535:111:4:-;;;;;;;;;;-1:-1:-1;1622:10:4;:17;1535:111;;;25054:25:14;;;25042:2;25027:18;1535:111:4;25009:76:14;1488:27:13;;;;;;;;;;;;;;;;4789:330:1;;;;;;;;;;-1:-1:-1;4789:330:1;;;;;:::i;:::-;;:::i;1211:253:4:-;;;;;;;;;;-1:-1:-1;1211:253:4;;;;;:::i;:::-;;:::i;686:42:13:-;;;;;;;;;;;;724:4;686:42;;5171:174;;;;;;;;;;;;;:::i;5185:179:1:-;;;;;;;;;;-1:-1:-1;5185:179:1;;;;;:::i;:::-;;:::i;1718:230:4:-;;;;;;;;;;-1:-1:-1;1718:230:4;;;;;:::i;:::-;;:::i;6324:106:13:-;;;;;;;;;;-1:-1:-1;6324:106:13;;;;;:::i;:::-;;:::i;1560:34::-;;;;;;;;;;;;;;;;5470:128;;;;;;;;;;-1:-1:-1;5470:128:13;;;;;:::i;:::-;-1:-1:-1;;;;;5564:27:13;5538:7;5564:27;;;:21;:27;;;;;;;5470:128;2117:235:1;;;;;;;;;;-1:-1:-1;2117:235:1;;;;;:::i;:::-;;:::i;856:48:13:-;;;;;;;;;;;;892:12;856:48;;1855:205:1;;;;;;;;;;-1:-1:-1;1855:205:1;;;;;:::i;:::-;;:::i;1605:92:0:-;;;;;;;;;;;;;:::i;1850:364:13:-;;;;;;;;;;-1:-1:-1;1850:364:13;;;;;:::i;:::-;;:::i;5784:93::-;;;;;;;;;;;;;:::i;3996:768::-;;;;;;:::i;:::-;;:::i;1645:23::-;;;;;;;;;;-1:-1:-1;1645:23:13;;;;;;;;910:40;;;;;;;;;;;;949:1;910:40;;973:85:0;;;;;;;;;;-1:-1:-1;1045:6:0;;-1:-1:-1;;;;;1045:6:0;973:85;;781:69:13;;;;;;;;;;;;;:::i;6205:109::-;;;;;;;;;;-1:-1:-1;6205:109:13;;;;;:::i;:::-;;:::i;1521:33::-;;;;;;;;;;;;;;;;2576:102:1;;;;;;;;;;;;;:::i;5701:73:13:-;;;;;;;;;;;;;:::i;1069:56::-;;;;;;;;;;-1:-1:-1;1069:56:13;;;;;:::i;:::-;;;;;;;;;;;;;;1019:44;;;;;;;;;;-1:-1:-1;1019:44:13;;;;;:::i;:::-;;;;;;;;;;;;;;;;5355:105;;;;;;;;;;-1:-1:-1;5355:105:13;;;;;:::i;:::-;-1:-1:-1;;;;;5435:18:13;5412:4;5435:18;;;:12;:18;;;;;;;;;5355:105;3033:953;;;;;;:::i;:::-;;:::i;4209:290:1:-;;;;;;;;;;-1:-1:-1;4209:290:1;;;;;:::i;:::-;;:::i;2224:301:13:-;;;;;;;;;;-1:-1:-1;2224:301:13;;;;;:::i;:::-;;:::i;5430:320:1:-;;;;;;;;;;-1:-1:-1;5430:320:1;;;;;:::i;:::-;;:::i;6625:250:13:-;;;;;;;;;;-1:-1:-1;6625:250:13;;;;;:::i;:::-;;:::i;1700:18::-;;;;;;;;;;-1:-1:-1;1700:18:13;;;;;;;;;;;734:41;;;;;;;;;;;;771:4;734:41;;1674:20;;;;;;;;;;-1:-1:-1;1674:20:13;;;;;;;;;;;6520:95;;;;;;;;;;;;;:::i;4565:162:1:-;;;;;;;;;;-1:-1:-1;4565:162:1;;;;;:::i;:::-;-1:-1:-1;;;;;4685:25:1;;;4662:4;4685:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4565:162;643:37:13;;;;;;;;;;;;678:2;643:37;;1846:189:0;;;;;;;;;;-1:-1:-1;1846:189:0;;;;;:::i;:::-;;:::i;1600:39:13:-;;;;;;;;;;;;;;;;1463:19;;;;;;;;;;;;;:::i;910:222:4:-;1012:4;-1:-1:-1;;;;;;1035:50:4;;-1:-1:-1;;;1035:50:4;;:90;;;1089:36;1113:11;1089:23;:36::i;:::-;1028:97;910:222;-1:-1:-1;;910:222:4:o;5981:97:13:-;1045:6:0;;-1:-1:-1;;;;;1045:6:0;666:10:8;1185:23:0;1177:68;;;;-1:-1:-1;;;1177:68:0;;;;;;;:::i;:::-;;;;;;;;;6050:14:13::1;:21:::0;;-1:-1:-1;;;;;;6050:21:13::1;-1:-1:-1::0;;;;;6050:21:13;;;::::1;::::0;;;::::1;::::0;;5981:97::o;5887:84::-;1045:6:0;;-1:-1:-1;;;;;1045:6:0;666:10:8;1185:23:0;1177:68;;;;-1:-1:-1;;;1177:68:0;;;;;;;:::i;:::-;5956:8:13::1;::::0;;-1:-1:-1;;5944:20:13;::::1;5956:8;::::0;;;::::1;;;5955:9;5944:20:::0;;::::1;;::::0;;5887:84::o;2414:98:1:-;2468:13;2500:5;2493:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2414:98;:::o;3925:217::-;4001:7;7310:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7310:16:1;4020:73;;;;-1:-1:-1;;;4020:73:1;;19148:2:14;4020:73:1;;;19130:21:14;19187:2;19167:18;;;19160:30;19226:34;19206:18;;;19199:62;-1:-1:-1;;;19277:18:14;;;19270:42;19329:19;;4020:73:1;19120:234:14;4020:73:1;-1:-1:-1;4111:24:1;;;;:15;:24;;;;;;-1:-1:-1;;;;;4111:24:1;;3925:217::o;3463:401::-;3543:13;3559:23;3574:7;3559:14;:23::i;:::-;3543:39;;3606:5;-1:-1:-1;;;;;3600:11:1;:2;-1:-1:-1;;;;;3600:11:1;;;3592:57;;;;-1:-1:-1;;;3592:57:1;;21723:2:14;3592:57:1;;;21705:21:14;21762:2;21742:18;;;21735:30;21801:34;21781:18;;;21774:62;-1:-1:-1;;;21852:18:14;;;21845:31;21893:19;;3592:57:1;21695:223:14;3592:57:1;666:10:8;-1:-1:-1;;;;;3681:21:1;;;;:62;;-1:-1:-1;3706:37:1;3723:5;666:10:8;4565:162:1;:::i;3706:37::-;3660:165;;;;-1:-1:-1;;;3660:165:1;;16422:2:14;3660:165:1;;;16404:21:14;16461:2;16441:18;;;16434:30;16500:34;16480:18;;;16473:62;16571:26;16551:18;;;16544:54;16615:19;;3660:165:1;16394:246:14;3660:165:1;3836:21;3845:2;3849:7;3836:8;:21::i;:::-;3463:401;;;:::o;6088:107:13:-;1045:6:0;;-1:-1:-1;;;;;1045:6:0;666:10:8;1185:23:0;1177:68;;;;-1:-1:-1;;;1177:68:0;;;;;;;:::i;:::-;1767:6:13::1;::::0;;;::::1;;;1766:7;1758:64;;;;-1:-1:-1::0;;;1758:64:13::1;;;;;;;:::i;:::-;6176:12:::2;:5;6184:4:::0;;6176:12:::2;:::i;4774:387::-:0;1045:6:0;;-1:-1:-1;;;;;1045:6:0;666:10:8;1185:23:0;1177:68;;;;-1:-1:-1;;;1177:68:0;;;;;;;:::i;:::-;771:4:13::1;815:22;724:4;678:2;815:22;:::i;:::-;:35;;;;:::i;:::-;4871:9:::0;4855:13:::1;1622:10:4::0;:17;;1535:111;4855:13:13::1;:32;;;;:::i;:::-;:43;;4847:68;;;;-1:-1:-1::0;;;4847:68:13::1;;;;;;;:::i;:::-;4933:12;::::0;678:2:::1;::::0;4933:31:::1;::::0;4948:9;;4933:31:::1;:::i;:::-;:43;;4925:69;;;::::0;-1:-1:-1;;;4925:69:13;;24414:2:14;4925:69:13::1;::::0;::::1;24396:21:14::0;24453:2;24433:18;;;24426:30;-1:-1:-1;;;24472:18:14;;;24465:43;24525:18;;4925:69:13::1;24386:163:14::0;4925:69:13::1;5018:9;5013:142;5033:20:::0;;::::1;5013:142;;;5074:12;:14:::0;;;:12:::1;:14;::::0;::::1;:::i;:::-;;;;;;5102:42;5112:9;;5122:1;5112:12;;;;;-1:-1:-1::0;;;5112:12:13::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1622:10:4::0;:17;5126:13:13::1;:17;::::0;5142:1:::1;5126:17;:::i;:::-;5102:9;:42::i;:::-;5055:3:::0;::::1;::::0;::::1;:::i;:::-;;;;5013:142;;4789:330:1::0;4978:41;666:10:8;5011:7:1;4978:18;:41::i;:::-;4970:103;;;;-1:-1:-1;;;4970:103:1;;;;;;;:::i;:::-;5084:28;5094:4;5100:2;5104:7;5084:9;:28::i;1211:253:4:-;1308:7;1343:23;1360:5;1343:16;:23::i;:::-;1335:5;:31;1327:87;;;;-1:-1:-1;;;1327:87:4;;11857:2:14;1327:87:4;;;11839:21:14;11896:2;11876:18;;;11869:30;11935:34;11915:18;;;11908:62;-1:-1:-1;;;11986:18:14;;;11979:41;12037:19;;1327:87:4;11829:233:14;1327:87:4;-1:-1:-1;;;;;;1431:19:4;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;1211:253::o;5171:174:13:-;1045:6:0;;-1:-1:-1;;;;;1045:6:0;666:10:8;1185:23:0;1177:68;;;;-1:-1:-1;;;1177:68:0;;;;;;;:::i;:::-;5228:11:13::1;::::0;-1:-1:-1;;;;;5228:11:13::1;5220:57;5250:26;5274:2;5250:21;:26;:::i;:::-;5220:57;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;5287:51:13::1;::::0;5295:10:::1;::::0;5316:21:::1;5287:51:::0;::::1;;;::::0;::::1;::::0;;;5316:21;5295:10;5287:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;5171:174::o:0;5185:179:1:-;5318:39;5335:4;5341:2;5345:7;5318:39;;;;;;;;;;;;:16;:39::i;1718:230:4:-;1793:7;1828:30;1622:10;:17;;1535:111;1828:30;1820:5;:38;1812:95;;;;-1:-1:-1;;;1812:95:4;;23656:2:14;1812:95:4;;;23638:21:14;23695:2;23675:18;;;23668:30;23734:34;23714:18;;;23707:62;-1:-1:-1;;;23785:18:14;;;23778:42;23837:19;;1812:95:4;23628:234:14;1812:95:4;1924:10;1935:5;1924:17;;;;;;-1:-1:-1;;;1924:17:4;;;;;;;;;;;;;;;;;1917:24;;1718:230;;;:::o;6324:106:13:-;1045:6:0;;-1:-1:-1;;;;;1045:6:0;666:10:8;1185:23:0;1177:68;;;;-1:-1:-1;;;1177:68:0;;;;;;;:::i;:::-;1767:6:13::1;::::0;;;::::1;;;1766:7;1758:64;;;;-1:-1:-1::0;;;1758:64:13::1;;;;;;;:::i;:::-;6404:19:::2;:13;6420:3:::0;;6404:19:::2;:::i;2117:235:1:-:0;2189:7;2224:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2224:16:1;2258:19;2250:73;;;;-1:-1:-1;;;2250:73:1;;17258:2:14;2250:73:1;;;17240:21:14;17297:2;17277:18;;;17270:30;17336:34;17316:18;;;17309:62;-1:-1:-1;;;17387:18:14;;;17380:39;17436:19;;2250:73:1;17230:231:14;1855:205:1;1927:7;-1:-1:-1;;;;;1954:19:1;;1946:74;;;;-1:-1:-1;;;1946:74:1;;16847:2:14;1946:74:1;;;16829:21:14;16886:2;16866:18;;;16859:30;16925:34;16905:18;;;16898:62;-1:-1:-1;;;16976:18:14;;;16969:40;17026:19;;1946:74:1;16819:232:14;1946:74:1;-1:-1:-1;;;;;;2037:16:1;;;;;:9;:16;;;;;;;1855:205::o;1605:92:0:-;1045:6;;-1:-1:-1;;;;;1045:6:0;666:10:8;1185:23:0;1177:68;;;;-1:-1:-1;;;1177:68:0;;;;;;;:::i;:::-;1669:21:::1;1687:1;1669:9;:21::i;:::-;1605:92::o:0;1850:364:13:-;1045:6:0;;-1:-1:-1;;;;;1045:6:0;666:10:8;1185:23:0;1177:68;;;;-1:-1:-1;;;1177:68:0;;;;;;;:::i;:::-;1937:9:13::1;1933:272;1952:18:::0;;::::1;1933:272;;;1991:13;2007:7;;2015:1;2007:10;;;;;-1:-1:-1::0;;;2007:10:13::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1991:26:::0;-1:-1:-1;;;;;;2039:19:13;::::1;2031:44;;;::::0;-1:-1:-1;;;2031:44:13;;20266:2:14;2031:44:13::1;::::0;::::1;20248:21:14::0;20305:2;20285:18;;;20278:30;-1:-1:-1;;;20324:18:14;;;20317:42;20376:18;;2031:44:13::1;20238:162:14::0;2031:44:13::1;-1:-1:-1::0;;;;;2098:19:13;::::1;;::::0;;;:12:::1;:19;::::0;;;;;::::1;;2097:20;2089:64;;;::::0;-1:-1:-1;;;2089:64:13;;22878:2:14;2089:64:13::1;::::0;::::1;22860:21:14::0;22917:2;22897:18;;;22890:30;22956:33;22936:18;;;22929:61;23007:18;;2089:64:13::1;22850:181:14::0;2089:64:13::1;-1:-1:-1::0;;;;;2168:19:13::1;;::::0;;;:12:::1;:19;::::0;;;;:26;;-1:-1:-1;;2168:26:13::1;2190:4;2168:26;::::0;;1972:3;::::1;::::0;::::1;:::i;:::-;;;;1933:272;;5784:93:::0;1045:6:0;;-1:-1:-1;;;;;1045:6:0;666:10:8;1185:23:0;1177:68;;;;-1:-1:-1;;;1177:68:0;;;;;;;:::i;:::-;5859:11:13::1;::::0;;-1:-1:-1;;5844:26:13;::::1;5859:11;::::0;;::::1;5858:12;5844:26;::::0;;5784:93::o;3996:768::-;4075:8;;;;;;;4074:9;:24;;;;-1:-1:-1;4087:11:13;;;;4074:24;4066:54;;;;-1:-1:-1;;;4066:54:13;;13452:2:14;4066:54:13;;;13434:21:14;13491:2;13471:18;;;13464:30;-1:-1:-1;;;13510:18:14;;;13503:47;13567:18;;4066:54:13;13424:167:14;4066:54:13;4151:10;4138:24;;;;:12;:24;;;;;;;;4130:60;;;;-1:-1:-1;;;4130:60:13;;16070:2:14;4130:60:13;;;16052:21:14;16109:2;16089:18;;;16082:30;16148:25;16128:18;;;16121:53;16191:18;;4130:60:13;16042:173:14;4130:60:13;771:4;815:22;724:4;678:2;815:22;:::i;:::-;:35;;;;:::i;:::-;1622:10:4;:17;4208:23:13;4200:48;;;;-1:-1:-1;;;4200:48:13;;;;;;;:::i;:::-;724:4;4288:13;4266:19;;:35;;;;:::i;:::-;:50;;4258:90;;;;-1:-1:-1;;;4258:90:13;;14557:2:14;4258:90:13;;;14539:21:14;14596:2;14576:18;;;14569:30;14635:29;14615:18;;;14608:57;14682:18;;4258:90:13;14529:177:14;4258:90:13;4419:20;;4388:10;4366:33;;;;:21;:33;;;;;;:49;;4402:13;;4366:49;:::i;:::-;:73;;4358:111;;;;-1:-1:-1;;;4358:111:13;;24756:2:14;4358:111:13;;;24738:21:14;24795:2;24775:18;;;24768:30;24834:27;24814:18;;;24807:55;24879:18;;4358:111:13;24728:175:14;4358:111:13;4516:9;4487:25;4499:13;892:12;4487:25;:::i;:::-;:38;;4479:67;;;;-1:-1:-1;;;4479:67:13;;11173:2:14;4479:67:13;;;11155:21:14;11212:2;11192:18;;;11185:30;-1:-1:-1;;;11231:18:14;;;11224:46;11287:18;;4479:67:13;11145:166:14;4479:67:13;4570:9;4565:193;4589:13;4585:1;:17;4565:193;;;4623:19;:21;;;:19;:21;;;:::i;:::-;;;;-1:-1:-1;;4680:10:13;4658:33;;;;:21;:33;;;;;:35;;;;;;:::i;:::-;;;;;;4707:40;4717:10;4729:13;1622:10:4;:17;;1535:111;4707:40:13;4604:3;;;;:::i;:::-;;;;4565:193;;;;3996:768;:::o;781:69::-;771:4;815:22;724:4;678:2;815:22;:::i;:::-;:35;;;;:::i;:::-;781:69;:::o;6205:109::-;1045:6:0;;-1:-1:-1;;;;;1045:6:0;666:10:8;1185:23:0;1177:68;;;;-1:-1:-1;;;1177:68:0;;;;;;;:::i;:::-;1767:6:13::1;::::0;;;::::1;;;1766:7;1758:64;;;;-1:-1:-1::0;;;1758:64:13::1;;;;;;;:::i;:::-;6289:18:::2;:12;6304:3:::0;;6289:18:::2;:::i;2576:102:1:-:0;2632:13;2664:7;2657:14;;;;;:::i;5701:73:13:-;1045:6:0;;-1:-1:-1;;;;;1045:6:0;666:10:8;1185:23:0;1177:68;;;;-1:-1:-1;;;1177:68:0;;;;;;;:::i;:::-;5754:6:13::1;:13:::0;;-1:-1:-1;;5754:13:13::1;::::0;::::1;::::0;;5701:73::o;3033:953::-;3163:8;;;;;;;3155:37;;;;-1:-1:-1;;;3155:37:13;;24069:2:14;3155:37:13;;;24051:21:14;24108:2;24088:18;;;24081:30;-1:-1:-1;;;24127:18:14;;;24120:46;24183:18;;3155:37:13;24041:166:14;3155:37:13;3211:11;;;;3210:12;3202:40;;;;-1:-1:-1;;;3202:40:13;;19561:2:14;3202:40:13;;;19543:21:14;19600:2;19580:18;;;19573:30;-1:-1:-1;;;19619:18:14;;;19612:45;19674:18;;3202:40:13;19533:165:14;3202:40:13;3260:34;3278:4;3284:9;3260:17;:34::i;:::-;3252:57;;;;-1:-1:-1;;;3252:57:13;;11518:2:14;3252:57:13;;;11500:21:14;11557:2;11537:18;;;11530:30;-1:-1:-1;;;11576:18:14;;;11569:40;11626:18;;3252:57:13;11490:160:14;3252:57:13;3328:11;3340:5;3328:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;3327:19;3319:49;;;;-1:-1:-1;;;3319:49:13;;21017:2:14;3319:49:13;;;20999:21:14;21056:2;21036:18;;;21029:30;-1:-1:-1;;;21075:18:14;;;21068:47;21132:18;;3319:49:13;20989:167:14;3319:49:13;3439:4;3386:49;3402:10;3414:13;3429:5;3386:15;:49::i;:::-;:57;3378:81;;;;-1:-1:-1;;;3378:81:13;;22538:2:14;3378:81:13;;;22520:21:14;22577:2;22557:18;;;22550:30;-1:-1:-1;;;22596:18:14;;;22589:41;22647:18;;3378:81:13;22510:161:14;3378:81:13;771:4;815:22;724:4;678:2;815:22;:::i;:::-;:35;;;;:::i;:::-;1622:10:4;:17;3477:23:13;3469:48;;;;-1:-1:-1;;;3469:48:13;;;;;;;:::i;:::-;771:4;3556:13;3535:18;;:34;;;;:::i;:::-;:48;;3527:87;;;;-1:-1:-1;;;3527:87:13;;18432:2:14;3527:87:13;;;18414:21:14;18471:2;18451:18;;;18444:30;18510:28;18490:18;;;18483:56;18556:18;;3527:87:13;18404:176:14;3527:87:13;949:1;3632:13;:29;;3624:74;;;;-1:-1:-1;;;3624:74:13;;17668:2:14;3624:74:13;;;17650:21:14;;;17687:18;;;17680:30;17746:34;17726:18;;;17719:62;17798:18;;3624:74:13;17640:182:14;3624:74:13;3745:9;3716:25;3728:13;892:12;3716:25;:::i;:::-;:38;;3708:67;;;;-1:-1:-1;;;3708:67:13;;11173:2:14;3708:67:13;;;11155:21:14;11212:2;11192:18;;;11185:30;-1:-1:-1;;;11231:18:14;;;11224:46;11287:18;;3708:67:13;11145:166:14;3708:67:13;3798:9;3794:142;3817:13;3813:1;:17;3794:142;;;3851:18;:20;;;:18;:20;;;:::i;:::-;;;;;;3885:40;3895:10;3907:13;1622:10:4;:17;;1535:111;3885:40:13;3832:3;;;;:::i;:::-;;;;3794:142;;;;3975:4;3954:11;3966:5;3954:18;;;;;;:::i;:::-;;;;;;;;;;;;;;:25;;;;;-1:-1:-1;;3954:25:13;;;;;;;;;-1:-1:-1;;;;3033:953:13:o;4209:290:1:-;-1:-1:-1;;;;;4311:24:1;;666:10:8;4311:24:1;;4303:62;;;;-1:-1:-1;;;4303:62:1;;14203:2:14;4303:62:1;;;14185:21:14;14242:2;14222:18;;;14215:30;14281:27;14261:18;;;14254:55;14326:18;;4303:62:1;14175:175:14;4303:62:1;666:10:8;4376:32:1;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;4376:42:1;;;;;;;;;;;;:53;;-1:-1:-1;;4376:53:1;;;;;;;;;;4444:48;;9579:41:14;;;4376:42:1;;666:10:8;4444:48:1;;9552:18:14;4444:48:1;;;;;;;4209:290;;:::o;2224:301:13:-;1045:6:0;;-1:-1:-1;;;;;1045:6:0;666:10:8;1185:23:0;1177:68;;;;-1:-1:-1;;;1177:68:0;;;;;;;:::i;:::-;2316:9:13::1;2312:207;2331:18:::0;;::::1;2312:207;;;2370:13;2386:7;;2394:1;2386:10;;;;;-1:-1:-1::0;;;2386:10:13::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2370:26:::0;-1:-1:-1;;;;;;2418:19:13;::::1;2410:44;;;::::0;-1:-1:-1;;;2410:44:13;;20266:2:14;2410:44:13::1;::::0;::::1;20248:21:14::0;20305:2;20285:18;;;20278:30;-1:-1:-1;;;20324:18:14;;;20317:42;20376:18;;2410:44:13::1;20238:162:14::0;2410:44:13::1;-1:-1:-1::0;;;;;2481:19:13::1;2503:5;2481:19:::0;;;:12:::1;:19;::::0;;;;:27;;-1:-1:-1;;2481:27:13::1;::::0;;2351:3;::::1;::::0;::::1;:::i;:::-;;;;2312:207;;5430:320:1::0;5599:41;666:10:8;5632:7:1;5599:18;:41::i;:::-;5591:103;;;;-1:-1:-1;;;5591:103:1;;;;;;;:::i;:::-;5704:39;5718:4;5724:2;5728:7;5737:5;5704:13;:39::i;:::-;5430:320;;;;:::o;6625:250:13:-;7287:4:1;7310:16;;;:7;:16;;;;;;6698:13:13;;-1:-1:-1;;;;;7310:16:1;6723:60:13;;;;-1:-1:-1;;;6723:60:13;;21363:2:14;6723:60:13;;;21345:21:14;21402:2;21382:18;;;21375:30;21441:33;21421:18;;;21414:61;21492:18;;6723:60:13;21335:181:14;6723:60:13;6833:13;6848:18;:7;:16;:18::i;:::-;6816:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6802:66;;6625:250;;;:::o;6520:95::-;6564:13;6596:12;6589:19;;;;;:::i;1846:189:0:-;1045:6;;-1:-1:-1;;;;;1045:6:0;666:10:8;1185:23:0;1177:68;;;;-1:-1:-1;;;1177:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1934:22:0;::::1;1926:73;;;::::0;-1:-1:-1;;;1926:73:0;;12688:2:14;1926:73:0::1;::::0;::::1;12670:21:14::0;12727:2;12707:18;;;12700:30;12766:34;12746:18;;;12739:62;-1:-1:-1;;;12817:18:14;;;12810:36;12863:19;;1926:73:0::1;12660:228:14::0;1926:73:0::1;2009:19;2019:8;2009:9;:19::i;1463::13:-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1496:300:1:-;1598:4;-1:-1:-1;;;;;;1633:40:1;;-1:-1:-1;;;1633:40:1;;:104;;-1:-1:-1;;;;;;;1689:48:1;;-1:-1:-1;;;1689:48:1;1633:104;:156;;;-1:-1:-1;;;;;;;;;;871:40:11;;;1753:36:1;763:155:11;11073:171:1;11147:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;11147:29:1;-1:-1:-1;;;;;11147:29:1;;;;;;;;:24;;11200:23;11147:24;11200:14;:23::i;:::-;-1:-1:-1;;;;;11191:46:1;;;;;;;;;;;11073:171;;:::o;8179:108::-;8254:26;8264:2;8268:7;8254:26;;;;;;;;;;;;:9;:26::i;7505:344::-;7598:4;7310:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7310:16:1;7614:73;;;;-1:-1:-1;;;7614:73:1;;15316:2:14;7614:73:1;;;15298:21:14;15355:2;15335:18;;;15328:30;15394:34;15374:18;;;15367:62;-1:-1:-1;;;15445:18:14;;;15438:42;15497:19;;7614:73:1;15288:234:14;7614:73:1;7697:13;7713:23;7728:7;7713:14;:23::i;:::-;7697:39;;7765:5;-1:-1:-1;;;;;7754:16:1;:7;-1:-1:-1;;;;;7754:16:1;;:51;;;;7798:7;-1:-1:-1;;;;;7774:31:1;:20;7786:7;7774:11;:20::i;:::-;-1:-1:-1;;;;;7774:31:1;;7754:51;:87;;;-1:-1:-1;;;;;;4685:25:1;;;4662:4;4685:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7809:32;7746:96;7505:344;-1:-1:-1;;;;7505:344:1:o;10402:560::-;10556:4;-1:-1:-1;;;;;10529:31:1;:23;10544:7;10529:14;:23::i;:::-;-1:-1:-1;;;;;10529:31:1;;10521:85;;;;-1:-1:-1;;;10521:85:1;;20607:2:14;10521:85:1;;;20589:21:14;20646:2;20626:18;;;20619:30;20685:34;20665:18;;;20658:62;-1:-1:-1;;;20736:18:14;;;20729:39;20785:19;;10521:85:1;20579:231:14;10521:85:1;-1:-1:-1;;;;;10624:16:1;;10616:65;;;;-1:-1:-1;;;10616:65:1;;13798:2:14;10616:65:1;;;13780:21:14;13837:2;13817:18;;;13810:30;13876:34;13856:18;;;13849:62;-1:-1:-1;;;13927:18:14;;;13920:34;13971:19;;10616:65:1;13770:226:14;10616:65:1;10692:39;10713:4;10719:2;10723:7;10692:20;:39::i;:::-;10793:29;10810:1;10814:7;10793:8;:29::i;:::-;-1:-1:-1;;;;;10833:15:1;;;;;;:9;:15;;;;;:20;;10852:1;;10833:15;:20;;10852:1;;10833:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10863:13:1;;;;;;:9;:13;;;;;:18;;10880:1;;10863:13;:18;;10880:1;;10863:18;:::i;:::-;;;;-1:-1:-1;;10891:16:1;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10891:21:1;-1:-1:-1;;;;;10891:21:1;;;;;;;;;10928:27;;10891:16;;10928:27;;;;;;;10402:560;;;:::o;2041:169:0:-;2115:6;;;-1:-1:-1;;;;;2131:17:0;;;-1:-1:-1;;;;;;2131:17:0;;;;;;;2163:40;;2115:6;;;2131:17;2115:6;;2163:40;;2096:16;;2163:40;2041:169;;:::o;2866:157:13:-;2952:4;2993:23;:4;3006:9;2993:12;:23::i;:::-;2975:14;;-1:-1:-1;;;;;2975:41:13;;;:14;;:41;;2866:157;-1:-1:-1;;;2866:157:13:o;2535:321::-;2631:7;2652:12;2782:6;2790:3;2795:5;2765:36;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2765:36:13;;;;;;;;;;2755:47;;2765:36;2755:47;;;;8595:66:14;2677:126:13;;;8583:79:14;;;;8678:12;;;8671:28;8715:12;;2677:126:13;;;;;;-1:-1:-1;;2677:126:13;;;;;;2667:148;;2677:126;2667:148;;;;;2535:321;-1:-1:-1;;;;;2535:321:13:o;6612:307:1:-;6763:28;6773:4;6779:2;6783:7;6763:9;:28::i;:::-;6809:48;6832:4;6838:2;6842:7;6851:5;6809:22;:48::i;:::-;6801:111;;;;-1:-1:-1;;;6801:111:1;;;;;;;:::i;275:703:9:-;331:13;548:10;544:51;;-1:-1:-1;;574:10:9;;;;;;;;;;;;-1:-1:-1;;;574:10:9;;;;;275:703::o;544:51::-;619:5;604:12;658:75;665:9;;658:75;;690:8;;;;:::i;:::-;;-1:-1:-1;712:10:9;;-1:-1:-1;720:2:9;712:10;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;-1:-1:-1;;;764:17:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;764:17:9;;742:39;;791:150;798:10;;791:150;;824:11;834:1;824:11;;:::i;:::-;;-1:-1:-1;892:10:9;900:2;892:5;:10;:::i;:::-;879:24;;:2;:24;:::i;:::-;866:39;;849:6;856;849:14;;;;;;-1:-1:-1;;;849:14:9;;;;;;;;;;;;:56;-1:-1:-1;;;;;849:56:9;;;;;;;;-1:-1:-1;919:11:9;928:2;919:11;;:::i;:::-;;;791:150;;8508:311:1;8633:18;8639:2;8643:7;8633:5;:18::i;:::-;8682:54;8713:1;8717:2;8721:7;8730:5;8682:22;:54::i;:::-;8661:151;;;;-1:-1:-1;;;8661:151:1;;;;;;;:::i;2544:572:4:-;-1:-1:-1;;;;;2743:18:4;;2739:183;;2777:40;2809:7;3925:10;:17;;3898:24;;;;:15;:24;;;;;:44;;;3952:24;;;;;;;;;;;;3822:161;2777:40;2739:183;;;2846:2;-1:-1:-1;;;;;2838:10:4;:4;-1:-1:-1;;;;;2838:10:4;;2834:88;;2864:47;2897:4;2903:7;2864:32;:47::i;:::-;-1:-1:-1;;;;;2935:16:4;;2931:179;;2967:45;3004:7;2967:36;:45::i;2931:179::-;3039:4;-1:-1:-1;;;;;3033:10:4;:2;-1:-1:-1;;;;;3033:10:4;;3029:81;;3059:40;3087:2;3091:7;3059:27;:40::i;4203:227:10:-;4281:7;4301:17;4320:18;4342:27;4353:4;4359:9;4342:10;:27::i;:::-;4300:69;;;;4379:18;4391:5;4379:11;:18::i;:::-;-1:-1:-1;4414:9:10;4203:227;-1:-1:-1;;;4203:227:10:o;11797:778:1:-;11947:4;-1:-1:-1;;;;;11967:13:1;;1034:20:7;1080:8;11963:606:1;;12002:72;;-1:-1:-1;;;12002:72:1;;-1:-1:-1;;;;;12002:36:1;;;;;:72;;666:10:8;;12053:4:1;;12059:7;;12068:5;;12002:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12002:72:1;;;;;;;;-1:-1:-1;;12002:72:1;;;;;;;;;;;;:::i;:::-;;;11998:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12241:13:1;;12237:266;;12283:60;;-1:-1:-1;;;12283:60:1;;;;;;;:::i;12237:266::-;12455:6;12449:13;12440:6;12436:2;12432:15;12425:38;11998:519;-1:-1:-1;;;;;;12124:51:1;-1:-1:-1;;;12124:51:1;;-1:-1:-1;12117:58:1;;11963:606;-1:-1:-1;12554:4:1;11797:778;;;;;;:::o;9141:372::-;-1:-1:-1;;;;;9220:16:1;;9212:61;;;;-1:-1:-1;;;9212:61:1;;18787:2:14;9212:61:1;;;18769:21:14;;;18806:18;;;18799:30;18865:34;18845:18;;;18838:62;18917:18;;9212:61:1;18759:182:14;9212:61:1;7287:4;7310:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7310:16:1;:30;9283:58;;;;-1:-1:-1;;;9283:58:1;;13095:2:14;9283:58:1;;;13077:21:14;13134:2;13114:18;;;13107:30;13173;13153:18;;;13146:58;13221:18;;9283:58:1;13067:178:14;9283:58:1;9352:45;9381:1;9385:2;9389:7;9352:20;:45::i;:::-;-1:-1:-1;;;;;9408:13:1;;;;;;:9;:13;;;;;:18;;9425:1;;9408:13;:18;;9425:1;;9408:18;:::i;:::-;;;;-1:-1:-1;;9436:16:1;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9436:21:1;-1:-1:-1;;;;;9436:21:1;;;;;;;;9473:33;;9436:16;;;9473:33;;9436:16;;9473:33;9141:372;;:::o;4600:970:4:-;4862:22;4912:1;4887:22;4904:4;4887:16;:22::i;:::-;:26;;;;:::i;:::-;4923:18;4944:26;;;:17;:26;;;;;;4862:51;;-1:-1:-1;5074:28:4;;;5070:323;;-1:-1:-1;;;;;5140:18:4;;5118:19;5140:18;;;:12;:18;;;;;;;;:34;;;;;;;;;5189:30;;;;;;:44;;;5305:30;;:17;:30;;;;;:43;;;5070:323;-1:-1:-1;5486:26:4;;;;:17;:26;;;;;;;;5479:33;;;-1:-1:-1;;;;;5529:18:4;;;;;:12;:18;;;;;:34;;;;;;;5522:41;4600:970::o;5858:1061::-;6132:10;:17;6107:22;;6132:21;;6152:1;;6132:21;:::i;:::-;6163:18;6184:24;;;:15;:24;;;;;;6552:10;:26;;6107:46;;-1:-1:-1;6184:24:4;;6107:46;;6552:26;;;;-1:-1:-1;;;6552:26:4;;;;;;;;;;;;;;;;;6530:48;;6614:11;6589:10;6600;6589:22;;;;;;-1:-1:-1;;;6589:22:4;;;;;;;;;;;;;;;;;;;;:36;;;;6693:28;;;:15;:28;;;;;;;:41;;;6862:24;;;;;6855:31;6896:10;:16;;;;;-1:-1:-1;;;6896:16:4;;;;;;;;;;;;;;;;;;;;;;;;;;5858:1061;;;;:::o;3410:217::-;3494:14;3511:20;3528:2;3511:16;:20::i;:::-;-1:-1:-1;;;;;3541:16:4;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;3585:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;3410:217:4:o;2138:1279:10:-;2219:7;2228:12;2449:9;:16;2469:2;2449:22;2445:966;;;2738:4;2723:20;;2717:27;2787:4;2772:20;;2766:27;2844:4;2829:20;;2823:27;2487:9;2815:36;2885:25;2896:4;2815:36;2717:27;2766;2885:10;:25::i;:::-;2878:32;;;;;;;;;2445:966;2931:9;:16;2951:2;2931:22;2927:484;;;3200:4;3185:20;;3179:27;3250:4;3235:20;;3229:27;3290:23;3301:4;3179:27;3229;3290:10;:23::i;:::-;3283:30;;;;;;;;2927:484;-1:-1:-1;3360:1:10;;-1:-1:-1;3364:35:10;2927:484;2138:1279;;;;;:::o;443:631::-;520:20;511:5;:29;;;;;;-1:-1:-1;;;511:29:10;;;;;;;;;;507:561;;;443:631;:::o;507:561::-;616:29;607:5;:38;;;;;;-1:-1:-1;;;607:38:10;;;;;;;;;;603:465;;;661:34;;-1:-1:-1;;;661:34:10;;10460:2:14;661:34:10;;;10442:21:14;10499:2;10479:18;;;10472:30;10538:26;10518:18;;;10511:54;10582:18;;661:34:10;10432:174:14;603:465:10;725:35;716:5;:44;;;;;;-1:-1:-1;;;716:44:10;;;;;;;;;;712:356;;;776:41;;-1:-1:-1;;;776:41:10;;10813:2:14;776:41:10;;;10795:21:14;10852:2;10832:18;;;10825:30;10891:33;10871:18;;;10864:61;10942:18;;776:41:10;10785:181:14;712:356:10;847:30;838:5;:39;;;;;;-1:-1:-1;;;838:39:10;;;;;;;;;;834:234;;;893:44;;-1:-1:-1;;;893:44:10;;14913:2:14;893:44:10;;;14895:21:14;14952:2;14932:18;;;14925:30;14991:34;14971:18;;;14964:62;-1:-1:-1;;;15042:18:14;;;15035:32;15084:19;;893:44:10;14885:224:14;834:234:10;967:30;958:5;:39;;;;;;-1:-1:-1;;;958:39:10;;;;;;;;;;954:114;;;1013:44;;-1:-1:-1;;;1013:44:10;;18029:2:14;1013:44:10;;;18011:21:14;18068:2;18048:18;;;18041:30;18107:34;18087:18;;;18080:62;-1:-1:-1;;;18158:18:14;;;18151:32;18200:19;;1013:44:10;18001:224:14;5654:1603:10;5780:7;;6704:66;6691:79;;6687:161;;;-1:-1:-1;6802:1:10;;-1:-1:-1;6806:30:10;6786:51;;6687:161;6861:1;:7;;6866:2;6861:7;;:18;;;;;6872:1;:7;;6877:2;6872:7;;6861:18;6857:100;;;-1:-1:-1;6911:1:10;;-1:-1:-1;6915:30:10;6895:51;;6857:100;7068:24;;;7051:14;7068:24;;;;;;;;;9858:25:14;;;9931:4;9919:17;;9899:18;;;9892:45;;;;9953:18;;;9946:34;;;9996:18;;;9989:34;;;7068:24:10;;9830:19:14;;7068:24:10;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7068:24:10;;-1:-1:-1;;7068:24:10;;;-1:-1:-1;;;;;;;7106:20:10;;7102:101;;7158:1;7162:29;7142:50;;;;;;;7102:101;7221:6;-1:-1:-1;7229:20:10;;-1:-1:-1;5654:1603:10;;;;;;;;:::o;4684:379::-;4794:7;;-1:-1:-1;;;;;4891:75:10;;4992:3;4988:12;;;5002:2;4984:21;5031:25;5042:4;4984:21;5051:1;4891:75;5031:10;:25::i;:::-;5024:32;;;;;;4684:379;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:14;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:14;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:14;;757:42;;747:2;;813:1;810;803:12;747:2;699:124;;;:::o;828:228::-;870:5;923:3;916:4;908:6;904:17;900:27;890:2;;945:5;938;931:20;890:2;971:79;1046:3;1037:6;1024:20;1017:4;1009:6;1005:17;971:79;:::i;:::-;962:88;880:176;-1:-1:-1;;;880:176:14:o;1061:196::-;1120:6;1173:2;1161:9;1152:7;1148:23;1144:32;1141:2;;;1194:6;1186;1179:22;1141:2;1222:29;1241:9;1222:29;:::i;1262:270::-;1330:6;1338;1391:2;1379:9;1370:7;1366:23;1362:32;1359:2;;;1412:6;1404;1397:22;1359:2;1440:29;1459:9;1440:29;:::i;:::-;1430:39;;1488:38;1522:2;1511:9;1507:18;1488:38;:::i;:::-;1478:48;;1349:183;;;;;:::o;1537:338::-;1614:6;1622;1630;1683:2;1671:9;1662:7;1658:23;1654:32;1651:2;;;1704:6;1696;1689:22;1651:2;1732:29;1751:9;1732:29;:::i;:::-;1722:39;;1780:38;1814:2;1803:9;1799:18;1780:38;:::i;:::-;1770:48;;1865:2;1854:9;1850:18;1837:32;1827:42;;1641:234;;;;;:::o;1880:557::-;1975:6;1983;1991;1999;2052:3;2040:9;2031:7;2027:23;2023:33;2020:2;;;2074:6;2066;2059:22;2020:2;2102:29;2121:9;2102:29;:::i;:::-;2092:39;;2150:38;2184:2;2173:9;2169:18;2150:38;:::i;:::-;2140:48;;2235:2;2224:9;2220:18;2207:32;2197:42;;2290:2;2279:9;2275:18;2262:32;2317:18;2309:6;2306:30;2303:2;;;2354:6;2346;2339:22;2303:2;2382:49;2423:7;2414:6;2403:9;2399:22;2382:49;:::i;:::-;2372:59;;;2010:427;;;;;;;:::o;2442:367::-;2507:6;2515;2568:2;2556:9;2547:7;2543:23;2539:32;2536:2;;;2589:6;2581;2574:22;2536:2;2617:29;2636:9;2617:29;:::i;:::-;2607:39;;2696:2;2685:9;2681:18;2668:32;2743:5;2736:13;2729:21;2722:5;2719:32;2709:2;;2770:6;2762;2755:22;2709:2;2798:5;2788:15;;;2526:283;;;;;:::o;2814:264::-;2882:6;2890;2943:2;2931:9;2922:7;2918:23;2914:32;2911:2;;;2964:6;2956;2949:22;2911:2;2992:29;3011:9;2992:29;:::i;:::-;2982:39;3068:2;3053:18;;;;3040:32;;-1:-1:-1;;;2901:177:14:o;3083:665::-;3169:6;3177;3230:2;3218:9;3209:7;3205:23;3201:32;3198:2;;;3251:6;3243;3236:22;3198:2;3296:9;3283:23;3325:18;3366:2;3358:6;3355:14;3352:2;;;3387:6;3379;3372:22;3352:2;3430:6;3419:9;3415:22;3405:32;;3475:7;3468:4;3464:2;3460:13;3456:27;3446:2;;3502:6;3494;3487:22;3446:2;3547;3534:16;3573:2;3565:6;3562:14;3559:2;;;3594:6;3586;3579:22;3559:2;3652:7;3647:2;3637:6;3634:1;3630:14;3626:2;3622:23;3618:32;3615:45;3612:2;;;3678:6;3670;3663:22;3612:2;3714;3706:11;;;;;3736:6;;-1:-1:-1;3188:560:14;;-1:-1:-1;;;;3188:560:14:o;3753:846::-;3858:6;3866;3874;3882;3935:3;3923:9;3914:7;3910:23;3906:33;3903:2;;;3957:6;3949;3942:22;3903:2;3998:9;3985:23;3975:33;;4059:2;4048:9;4044:18;4031:32;4082:18;4123:2;4115:6;4112:14;4109:2;;;4144:6;4136;4129:22;4109:2;4172:49;4213:7;4204:6;4193:9;4189:22;4172:49;:::i;:::-;4162:59;;4274:2;4263:9;4259:18;4246:32;4230:48;;4303:2;4293:8;4290:16;4287:2;;;4324:6;4316;4309:22;4287:2;-1:-1:-1;4352:24:14;;4407:4;4399:13;;4395:27;-1:-1:-1;4385:2:14;;4441:6;4433;4426:22;4385:2;4469:73;4534:7;4529:2;4516:16;4511:2;4507;4503:11;4469:73;:::i;:::-;3893:706;;;;-1:-1:-1;4459:83:14;;4589:2;4574:18;4561:32;;-1:-1:-1;;;3893:706:14:o;4604:255::-;4662:6;4715:2;4703:9;4694:7;4690:23;4686:32;4683:2;;;4736:6;4728;4721:22;4683:2;4780:9;4767:23;4799:30;4823:5;4799:30;:::i;4864:259::-;4933:6;4986:2;4974:9;4965:7;4961:23;4957:32;4954:2;;;5007:6;4999;4992:22;4954:2;5044:9;5038:16;5063:30;5087:5;5063:30;:::i;5128:642::-;5199:6;5207;5260:2;5248:9;5239:7;5235:23;5231:32;5228:2;;;5281:6;5273;5266:22;5228:2;5326:9;5313:23;5355:18;5396:2;5388:6;5385:14;5382:2;;;5417:6;5409;5402:22;5382:2;5460:6;5449:9;5445:22;5435:32;;5505:7;5498:4;5494:2;5490:13;5486:27;5476:2;;5532:6;5524;5517:22;5476:2;5577;5564:16;5603:2;5595:6;5592:14;5589:2;;;5624:6;5616;5609:22;5589:2;5674:7;5669:2;5660:6;5656:2;5652:15;5648:24;5645:37;5642:2;;;5700:6;5692;5685:22;5775:190;5834:6;5887:2;5875:9;5866:7;5862:23;5858:32;5855:2;;;5908:6;5900;5893:22;5855:2;-1:-1:-1;5936:23:14;;5845:120;-1:-1:-1;5845:120:14:o;5970:257::-;6011:3;6049:5;6043:12;6076:6;6071:3;6064:19;6092:63;6148:6;6141:4;6136:3;6132:14;6125:4;6118:5;6114:16;6092:63;:::i;:::-;6209:2;6188:15;-1:-1:-1;;6184:29:14;6175:39;;;;6216:4;6171:50;;6019:208;-1:-1:-1;;6019:208:14:o;6232:185::-;6274:3;6312:5;6306:12;6327:52;6372:6;6367:3;6360:4;6353:5;6349:16;6327:52;:::i;:::-;6395:16;;;;;6282:135;-1:-1:-1;;6282:135:14:o;6422:462::-;6664:26;6660:31;6651:6;6647:2;6643:15;6639:53;6634:3;6627:66;6723:6;6718:2;6713:3;6709:12;6702:28;6609:3;6759:6;6753:13;6775:62;6830:6;6825:2;6820:3;6816:12;6809:4;6801:6;6797:17;6775:62;:::i;:::-;6857:16;;;;6875:2;6853:25;;6617:267;-1:-1:-1;;;;6617:267:14:o;6889:276::-;7020:3;7058:6;7052:13;7074:53;7120:6;7115:3;7108:4;7100:6;7096:17;7074:53;:::i;:::-;7143:16;;;;;7028:137;-1:-1:-1;;7028:137:14:o;7170:1178::-;7346:3;7375;7410:6;7404:13;7440:3;7462:1;7490:9;7486:2;7482:18;7472:28;;7550:2;7539:9;7535:18;7572;7562:2;;7616:4;7608:6;7604:17;7594:27;;7562:2;7642;7690;7682:6;7679:14;7659:18;7656:38;7653:2;;;-1:-1:-1;;;7717:33:14;;7773:4;7770:1;7763:15;7803:4;7724:3;7791:17;7653:2;7834:18;7861:104;;;;7979:1;7974:322;;;;7827:469;;7861:104;-1:-1:-1;;7894:24:14;;7882:37;;7939:16;;;;-1:-1:-1;7861:104:14;;7974:322;25137:4;25156:17;;;25206:4;25190:21;;8069:3;8085:165;8099:6;8096:1;8093:13;8085:165;;;8177:14;;8164:11;;;8157:35;8220:16;;;;8114:10;;8085:165;;;8089:3;;8279:6;8274:3;8270:16;8263:23;;7827:469;;;;;;;8312:30;8338:3;8330:6;8312:30;:::i;:::-;8305:37;7354:994;-1:-1:-1;;;;;7354:994:14:o;8946:488::-;-1:-1:-1;;;;;9215:15:14;;;9197:34;;9267:15;;9262:2;9247:18;;9240:43;9314:2;9299:18;;9292:34;;;9362:3;9357:2;9342:18;;9335:31;;;9140:4;;9383:45;;9408:19;;9400:6;9383:45;:::i;:::-;9375:53;9149:285;-1:-1:-1;;;;;;9149:285:14:o;10034:219::-;10183:2;10172:9;10165:21;10146:4;10203:44;10243:2;10232:9;10228:18;10220:6;10203:44;:::i;12067:414::-;12269:2;12251:21;;;12308:2;12288:18;;;12281:30;12347:34;12342:2;12327:18;;12320:62;-1:-1:-1;;;12413:2:14;12398:18;;12391:48;12471:3;12456:19;;12241:240::o;15527:336::-;15729:2;15711:21;;;15768:2;15748:18;;;15741:30;-1:-1:-1;;;15802:2:14;15787:18;;15780:42;15854:2;15839:18;;15701:162::o;19703:356::-;19905:2;19887:21;;;19924:18;;;19917:30;19983:34;19978:2;19963:18;;19956:62;20050:2;20035:18;;19877:182::o;21923:408::-;22125:2;22107:21;;;22164:2;22144:18;;;22137:30;22203:34;22198:2;22183:18;;22176:62;-1:-1:-1;;;22269:2:14;22254:18;;22247:42;22321:3;22306:19;;22097:234::o;23036:413::-;23238:2;23220:21;;;23277:2;23257:18;;;23250:30;23316:34;23311:2;23296:18;;23289:62;-1:-1:-1;;;23382:2:14;23367:18;;23360:47;23439:3;23424:19;;23210:239::o;25222:128::-;25262:3;25293:1;25289:6;25286:1;25283:13;25280:2;;;25299:18;;:::i;:::-;-1:-1:-1;25335:9:14;;25270:80::o;25355:120::-;25395:1;25421;25411:2;;25426:18;;:::i;:::-;-1:-1:-1;25460:9:14;;25401:74::o;25480:168::-;25520:7;25586:1;25582;25578:6;25574:14;25571:1;25568:21;25563:1;25556:9;25549:17;25545:45;25542:2;;;25593:18;;:::i;:::-;-1:-1:-1;25633:9:14;;25532:116::o;25653:125::-;25693:4;25721:1;25718;25715:8;25712:2;;;25726:18;;:::i;:::-;-1:-1:-1;25763:9:14;;25702:76::o;25783:258::-;25855:1;25865:113;25879:6;25876:1;25873:13;25865:113;;;25955:11;;;25949:18;25936:11;;;25929:39;25901:2;25894:10;25865:113;;;25996:6;25993:1;25990:13;25987:2;;;-1:-1:-1;;26031:1:14;26013:16;;26006:27;25836:205::o;26046:380::-;26125:1;26121:12;;;;26168;;;26189:2;;26243:4;26235:6;26231:17;26221:27;;26189:2;26296;26288:6;26285:14;26265:18;26262:38;26259:2;;;26342:10;26337:3;26333:20;26330:1;26323:31;26377:4;26374:1;26367:15;26405:4;26402:1;26395:15;26259:2;;26101:325;;;:::o;26431:135::-;26470:3;-1:-1:-1;;26491:17:14;;26488:2;;;26511:18;;:::i;:::-;-1:-1:-1;26558:1:14;26547:13;;26478:88::o;26571:112::-;26603:1;26629;26619:2;;26634:18;;:::i;:::-;-1:-1:-1;26668:9:14;;26609:74::o;26688:127::-;26749:10;26744:3;26740:20;26737:1;26730:31;26780:4;26777:1;26770:15;26804:4;26801:1;26794:15;26820:127;26881:10;26876:3;26872:20;26869:1;26862:31;26912:4;26909:1;26902:15;26936:4;26933:1;26926:15;26952:127;27013:10;27008:3;27004:20;27001:1;26994:31;27044:4;27041:1;27034:15;27068:4;27065:1;27058:15;27084:131;-1:-1:-1;;;;;;27158:32:14;;27148:43;;27138:2;;27205:1;27202;27195:12"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "2672200",
"executionCost": "infinite",
"totalCost": "infinite"
},
"external": {
"SSS_GIFT()": "261",
"SSS_MAX()": "infinite",
"SSS_PER_MINT()": "285",
"SSS_PRICE()": "307",
"SSS_PRIVATE()": "241",
"SSS_PUBLIC()": "350",
"addToPresaleList(address[])": "infinite",
"approve(address,uint256)": "infinite",
"balanceOf(address)": "1356",
"buy(bytes32,bytes,string,uint256)": "infinite",
"contractURI()": "infinite",
"getApproved(uint256)": "2227",
"gift(address[])": "infinite",
"giftedAmount()": "1107",
"isApprovedForAll(address,address)": "infinite",
"isPresaler(address)": "1349",
"lockMetadata()": "21920",
"locked()": "1143",
"name()": "infinite",
"owner()": "1143",
"ownerOf(uint256)": "1346",
"presaleBuy(uint256)": "infinite",
"presaleLive()": "1067",
"presalePurchaseLimit()": "1105",
"presalePurchasedCount(address)": "1305",
"presalerList(address)": "1309",
"presalerListPurchases(address)": "1286",
"privateAmountMinted()": "1151",
"proof()": "infinite",
"publicAmountMinted()": "1063",
"removeFromPresaleList(address[])": "infinite",
"renounceOwnership()": "23506",
"safeTransferFrom(address,address,uint256)": "infinite",
"safeTransferFrom(address,address,uint256,bytes)": "infinite",
"saleLive()": "1077",
"setApprovalForAll(address,bool)": "23273",
"setBaseURI(string)": "infinite",
"setContractURI(string)": "infinite",
"setProvenanceHash(string)": "infinite",
"setSignerAddress(address)": "22080",
"supportsInterface(bytes4)": "infinite",
"symbol()": "infinite",
"togglePresaleStatus()": "21956",
"toggleSaleStatus()": "21936",
"tokenByIndex(uint256)": "2927",
"tokenOfOwnerByIndex(address,uint256)": "2486",
"tokenURI(uint256)": "infinite",
"totalSupply()": "1071",
"transferFrom(address,address,uint256)": "infinite",
"transferOwnership(address)": "23700",
"withdraw()": "infinite"
},
"internal": {
"hashTransaction(address,uint256,string memory)": "infinite",
"matchAddresSigner(bytes32,bytes memory)": "infinite"
}
},
"methodIdentifiers": {
"SSS_GIFT()": "eafc7f37",
"SSS_MAX()": "8dddb20c",
"SSS_PER_MINT()": "89c3b5ba",
"SSS_PRICE()": "6a33bb45",
"SSS_PRIVATE()": "356423d8",
"SSS_PUBLIC()": "daffe420",
"addToPresaleList(address[])": "7204a3c9",
"approve(address,uint256)": "095ea7b3",
"balanceOf(address)": "70a08231",
"buy(bytes32,bytes,string,uint256)": "9ec70f19",
"contractURI()": "e8a3d485",
"getApproved(uint256)": "081812fc",
"gift(address[])": "163e1e61",
"giftedAmount()": "1b57190e",
"isApprovedForAll(address,address)": "e985e9c5",
"isPresaler(address)": "9e273b2f",
"lockMetadata()": "989bdbb6",
"locked()": "cf309012",
"name()": "06fdde03",
"owner()": "8da5cb5b",
"ownerOf(uint256)": "6352211e",
"presaleBuy(uint256)": "815f7bbd",
"presaleLive()": "83a9e049",
"presalePurchaseLimit()": "f4743070",
"presalePurchasedCount(address)": "5ce7af1f",
"presalerList(address)": "9cf2e8d6",
View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment