Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Software-1923/9d2a4a63b7d9da5e9e74252428ca5b16 to your computer and use it in GitHub Desktop.
Save Software-1923/9d2a4a63b7d9da5e9e74252428ca5b16 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.22+commit.4fc1097e.js&optimize=false&runs=200&gist=
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {ContextUpgradeable} from "../utils/ContextUpgradeable.sol";
import {Initializable} from "../proxy/utils/Initializable.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.
*
* The initial owner is set to the address provided by the deployer. 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 OwnableUpgradeable is Initializable, ContextUpgradeable {
/// @custom:storage-location erc7201:openzeppelin.storage.Ownable
struct OwnableStorage {
address _owner;
}
// keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Ownable")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300;
function _getOwnableStorage() private pure returns (OwnableStorage storage $) {
assembly {
$.slot := OwnableStorageLocation
}
}
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
function __Ownable_init(address initialOwner) internal onlyInitializing {
__Ownable_init_unchained(initialOwner);
}
function __Ownable_init_unchained(address initialOwner) internal onlyInitializing {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
OwnableStorage storage $ = _getOwnableStorage();
return $._owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
OwnableStorage storage $ = _getOwnableStorage();
address oldOwner = $._owner;
$._owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)
pragma solidity ^0.8.20;
/**
* @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
* behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an
* external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
* function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
*
* The initialization functions use a version number. Once a version number is used, it is consumed and cannot be
* reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in
* case an upgrade adds a module that needs to be initialized.
*
* For example:
*
* [.hljs-theme-light.nopadding]
* ```solidity
* contract MyToken is ERC20Upgradeable {
* function initialize() initializer public {
* __ERC20_init("MyToken", "MTK");
* }
* }
*
* contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {
* function initializeV2() reinitializer(2) public {
* __ERC20Permit_init("MyToken");
* }
* }
* ```
*
* TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
* possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.
*
* CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
* that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
*
* [CAUTION]
* ====
* Avoid leaving a contract uninitialized.
*
* An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation
* contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke
* the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:
*
* [.hljs-theme-light.nopadding]
* ```
* /// @custom:oz-upgrades-unsafe-allow constructor
* constructor() {
* _disableInitializers();
* }
* ```
* ====
*/
abstract contract Initializable {
/**
* @dev Storage of the initializable contract.
*
* It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions
* when using with upgradeable contracts.
*
* @custom:storage-location erc7201:openzeppelin.storage.Initializable
*/
struct InitializableStorage {
/**
* @dev Indicates that the contract has been initialized.
*/
uint64 _initialized;
/**
* @dev Indicates that the contract is in the process of being initialized.
*/
bool _initializing;
}
// keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;
/**
* @dev The contract is already initialized.
*/
error InvalidInitialization();
/**
* @dev The contract is not initializing.
*/
error NotInitializing();
/**
* @dev Triggered when the contract has been initialized or reinitialized.
*/
event Initialized(uint64 version);
/**
* @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,
* `onlyInitializing` functions can be used to initialize parent contracts.
*
* Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any
* number of times. This behavior in the constructor can be useful during testing and is not expected to be used in
* production.
*
* Emits an {Initialized} event.
*/
modifier initializer() {
// solhint-disable-next-line var-name-mixedcase
InitializableStorage storage $ = _getInitializableStorage();
// Cache values to avoid duplicated sloads
bool isTopLevelCall = !$._initializing;
uint64 initialized = $._initialized;
// Allowed calls:
// - initialSetup: the contract is not in the initializing state and no previous version was
// initialized
// - construction: the contract is initialized at version 1 (no reininitialization) and the
// current contract is just being deployed
bool initialSetup = initialized == 0 && isTopLevelCall;
bool construction = initialized == 1 && address(this).code.length == 0;
if (!initialSetup && !construction) {
revert InvalidInitialization();
}
$._initialized = 1;
if (isTopLevelCall) {
$._initializing = true;
}
_;
if (isTopLevelCall) {
$._initializing = false;
emit Initialized(1);
}
}
/**
* @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the
* contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be
* used to initialize parent contracts.
*
* A reinitializer may be used after the original initialization step. This is essential to configure modules that
* are added through upgrades and that require initialization.
*
* When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`
* cannot be nested. If one is invoked in the context of another, execution will revert.
*
* Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in
* a contract, executing them in the right order is up to the developer or operator.
*
* WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.
*
* Emits an {Initialized} event.
*/
modifier reinitializer(uint64 version) {
// solhint-disable-next-line var-name-mixedcase
InitializableStorage storage $ = _getInitializableStorage();
if ($._initializing || $._initialized >= version) {
revert InvalidInitialization();
}
$._initialized = version;
$._initializing = true;
_;
$._initializing = false;
emit Initialized(version);
}
/**
* @dev Modifier to protect an initialization function so that it can only be invoked by functions with the
* {initializer} and {reinitializer} modifiers, directly or indirectly.
*/
modifier onlyInitializing() {
_checkInitializing();
_;
}
/**
* @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.
*/
function _checkInitializing() internal view virtual {
if (!_isInitializing()) {
revert NotInitializing();
}
}
/**
* @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.
* Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized
* to any version. It is recommended to use this to lock implementation contracts that are designed to be called
* through proxies.
*
* Emits an {Initialized} event the first time it is successfully executed.
*/
function _disableInitializers() internal virtual {
// solhint-disable-next-line var-name-mixedcase
InitializableStorage storage $ = _getInitializableStorage();
if ($._initializing) {
revert InvalidInitialization();
}
if ($._initialized != type(uint64).max) {
$._initialized = type(uint64).max;
emit Initialized(type(uint64).max);
}
}
/**
* @dev Returns the highest version that has been initialized. See {reinitializer}.
*/
function _getInitializedVersion() internal view returns (uint64) {
return _getInitializableStorage()._initialized;
}
/**
* @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.
*/
function _isInitializing() internal view returns (bool) {
return _getInitializableStorage()._initializing;
}
/**
* @dev Returns a pointer to the storage namespace.
*/
// solhint-disable-next-line var-name-mixedcase
function _getInitializableStorage() private pure returns (InitializableStorage storage $) {
assembly {
$.slot := INITIALIZABLE_STORAGE
}
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/UUPSUpgradeable.sol)
pragma solidity ^0.8.20;
import {IERC1822Proxiable} from "@openzeppelin/contracts/interfaces/draft-IERC1822.sol";
import {ERC1967Utils} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol";
import {Initializable} from "./Initializable.sol";
/**
* @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an
* {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.
*
* A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is
* reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing
* `UUPSUpgradeable` with a custom implementation of upgrades.
*
* The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.
*/
abstract contract UUPSUpgradeable is Initializable, IERC1822Proxiable {
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable
address private immutable __self = address(this);
/**
* @dev The version of the upgrade interface of the contract. If this getter is missing, both `upgradeTo(address)`
* and `upgradeToAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called,
* while `upgradeToAndCall` will invoke the `receive` function if the second argument is the empty byte string.
* If the getter returns `"5.0.0"`, only `upgradeToAndCall(address,bytes)` is present, and the second argument must
* be the empty byte string if no function should be called, making it impossible to invoke the `receive` function
* during an upgrade.
*/
string public constant UPGRADE_INTERFACE_VERSION = "5.0.0";
/**
* @dev The call is from an unauthorized context.
*/
error UUPSUnauthorizedCallContext();
/**
* @dev The storage `slot` is unsupported as a UUID.
*/
error UUPSUnsupportedProxiableUUID(bytes32 slot);
/**
* @dev Check that the execution is being performed through a delegatecall call and that the execution context is
* a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case
* for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a
* function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to
* fail.
*/
modifier onlyProxy() {
_checkProxy();
_;
}
/**
* @dev Check that the execution is not being performed through a delegate call. This allows a function to be
* callable on the implementing contract but not through proxies.
*/
modifier notDelegated() {
_checkNotDelegated();
_;
}
function __UUPSUpgradeable_init() internal onlyInitializing {
}
function __UUPSUpgradeable_init_unchained() internal onlyInitializing {
}
/**
* @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the
* implementation. It is used to validate the implementation's compatibility when performing an upgrade.
*
* IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks
* bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this
* function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.
*/
function proxiableUUID() external view virtual notDelegated returns (bytes32) {
return ERC1967Utils.IMPLEMENTATION_SLOT;
}
/**
* @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call
* encoded in `data`.
*
* Calls {_authorizeUpgrade}.
*
* Emits an {Upgraded} event.
*
* @custom:oz-upgrades-unsafe-allow-reachable delegatecall
*/
function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual onlyProxy {
_authorizeUpgrade(newImplementation);
_upgradeToAndCallUUPS(newImplementation, data);
}
/**
* @dev Reverts if the execution is not performed via delegatecall or the execution
* context is not of a proxy with an ERC1967-compliant implementation pointing to self.
* See {_onlyProxy}.
*/
function _checkProxy() internal view virtual {
if (
address(this) == __self || // Must be called through delegatecall
ERC1967Utils.getImplementation() != __self // Must be called through an active proxy
) {
revert UUPSUnauthorizedCallContext();
}
}
/**
* @dev Reverts if the execution is performed via delegatecall.
* See {notDelegated}.
*/
function _checkNotDelegated() internal view virtual {
if (address(this) != __self) {
// Must not be called through delegatecall
revert UUPSUnauthorizedCallContext();
}
}
/**
* @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by
* {upgradeToAndCall}.
*
* Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.
*
* ```solidity
* function _authorizeUpgrade(address) internal onlyOwner {}
* ```
*/
function _authorizeUpgrade(address newImplementation) internal virtual;
/**
* @dev Performs an implementation upgrade with a security check for UUPS proxies, and additional setup call.
*
* As a security check, {proxiableUUID} is invoked in the new implementation, and the return value
* is expected to be the implementation slot in ERC1967.
*
* Emits an {IERC1967-Upgraded} event.
*/
function _upgradeToAndCallUUPS(address newImplementation, bytes memory data) private {
try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {
if (slot != ERC1967Utils.IMPLEMENTATION_SLOT) {
revert UUPSUnsupportedProxiableUUID(slot);
}
ERC1967Utils.upgradeToAndCall(newImplementation, data);
} catch {
// The implementation is not UUPS
revert ERC1967Utils.ERC1967InvalidImplementation(newImplementation);
}
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/ERC721.sol)
pragma solidity ^0.8.20;
import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
import {IERC721Metadata} from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol";
import {ContextUpgradeable} from "../../utils/ContextUpgradeable.sol";
import {Strings} from "@openzeppelin/contracts/utils/Strings.sol";
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
import {ERC165Upgradeable} from "../../utils/introspection/ERC165Upgradeable.sol";
import {IERC721Errors} from "@openzeppelin/contracts/interfaces/draft-IERC6093.sol";
import {Initializable} from "../../proxy/utils/Initializable.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}.
*/
abstract contract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721, IERC721Metadata, IERC721Errors {
using Strings for uint256;
/// @custom:storage-location erc7201:openzeppelin.storage.ERC721
struct ERC721Storage {
// Token name
string _name;
// Token symbol
string _symbol;
mapping(uint256 tokenId => address) _owners;
mapping(address owner => uint256) _balances;
mapping(uint256 tokenId => address) _tokenApprovals;
mapping(address owner => mapping(address operator => bool)) _operatorApprovals;
}
// keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.ERC721")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant ERC721StorageLocation = 0x80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300;
function _getERC721Storage() private pure returns (ERC721Storage storage $) {
assembly {
$.slot := ERC721StorageLocation
}
}
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
function __ERC721_init(string memory name_, string memory symbol_) internal onlyInitializing {
__ERC721_init_unchained(name_, symbol_);
}
function __ERC721_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {
ERC721Storage storage $ = _getERC721Storage();
$._name = name_;
$._symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, 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 returns (uint256) {
ERC721Storage storage $ = _getERC721Storage();
if (owner == address(0)) {
revert ERC721InvalidOwner(address(0));
}
return $._balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual returns (address) {
return _requireOwned(tokenId);
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual returns (string memory) {
ERC721Storage storage $ = _getERC721Storage();
return $._name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual returns (string memory) {
ERC721Storage storage $ = _getERC721Storage();
return $._symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual returns (string memory) {
_requireOwned(tokenId);
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string.concat(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 overridden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual {
_approve(to, tokenId, _msgSender());
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual returns (address) {
_requireOwned(tokenId);
return _getApproved(tokenId);
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual {
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual returns (bool) {
ERC721Storage storage $ = _getERC721Storage();
return $._operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(address from, address to, uint256 tokenId) public virtual {
if (to == address(0)) {
revert ERC721InvalidReceiver(address(0));
}
// Setting an "auth" arguments enables the `_isAuthorized` check which verifies that the token exists
// (from != 0). Therefore, it is not needed to verify that the return value is not 0 here.
address previousOwner = _update(to, tokenId, _msgSender());
if (previousOwner != from) {
revert ERC721IncorrectOwner(from, tokenId, previousOwner);
}
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(address from, address to, uint256 tokenId) public {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual {
transferFrom(from, to, tokenId);
_checkOnERC721Received(from, to, tokenId, data);
}
/**
* @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist
*
* IMPORTANT: Any overrides to this function that add ownership of tokens not tracked by the
* core ERC721 logic MUST be matched with the use of {_increaseBalance} to keep balances
* consistent with ownership. The invariant to preserve is that for any address `a` the value returned by
* `balanceOf(a)` must be equal to the number of tokens such that `_ownerOf(tokenId)` is `a`.
*/
function _ownerOf(uint256 tokenId) internal view virtual returns (address) {
ERC721Storage storage $ = _getERC721Storage();
return $._owners[tokenId];
}
/**
* @dev Returns the approved address for `tokenId`. Returns 0 if `tokenId` is not minted.
*/
function _getApproved(uint256 tokenId) internal view virtual returns (address) {
ERC721Storage storage $ = _getERC721Storage();
return $._tokenApprovals[tokenId];
}
/**
* @dev Returns whether `spender` is allowed to manage `owner`'s tokens, or `tokenId` in
* particular (ignoring whether it is owned by `owner`).
*
* WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this
* assumption.
*/
function _isAuthorized(address owner, address spender, uint256 tokenId) internal view virtual returns (bool) {
return
spender != address(0) &&
(owner == spender || isApprovedForAll(owner, spender) || _getApproved(tokenId) == spender);
}
/**
* @dev Checks if `spender` can operate on `tokenId`, assuming the provided `owner` is the actual owner.
* Reverts if `spender` does not have approval from the provided `owner` for the given token or for all its assets
* the `spender` for the specific `tokenId`.
*
* WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this
* assumption.
*/
function _checkAuthorized(address owner, address spender, uint256 tokenId) internal view virtual {
if (!_isAuthorized(owner, spender, tokenId)) {
if (owner == address(0)) {
revert ERC721NonexistentToken(tokenId);
} else {
revert ERC721InsufficientApproval(spender, tokenId);
}
}
}
/**
* @dev Unsafe write access to the balances, used by extensions that "mint" tokens using an {ownerOf} override.
*
* NOTE: the value is limited to type(uint128).max. This protect against _balance overflow. It is unrealistic that
* a uint256 would ever overflow from increments when these increments are bounded to uint128 values.
*
* WARNING: Increasing an account's balance using this function tends to be paired with an override of the
* {_ownerOf} function to resolve the ownership of the corresponding tokens so that balances and ownership
* remain consistent with one another.
*/
function _increaseBalance(address account, uint128 value) internal virtual {
ERC721Storage storage $ = _getERC721Storage();
unchecked {
$._balances[account] += value;
}
}
/**
* @dev Transfers `tokenId` from its current owner to `to`, or alternatively mints (or burns) if the current owner
* (or `to`) is the zero address. Returns the owner of the `tokenId` before the update.
*
* The `auth` argument is optional. If the value passed is non 0, then this function will check that
* `auth` is either the owner of the token, or approved to operate on the token (by the owner).
*
* Emits a {Transfer} event.
*
* NOTE: If overriding this function in a way that tracks balances, see also {_increaseBalance}.
*/
function _update(address to, uint256 tokenId, address auth) internal virtual returns (address) {
ERC721Storage storage $ = _getERC721Storage();
address from = _ownerOf(tokenId);
// Perform (optional) operator check
if (auth != address(0)) {
_checkAuthorized(from, auth, tokenId);
}
// Execute the update
if (from != address(0)) {
// Clear approval. No need to re-authorize or emit the Approval event
_approve(address(0), tokenId, address(0), false);
unchecked {
$._balances[from] -= 1;
}
}
if (to != address(0)) {
unchecked {
$._balances[to] += 1;
}
}
$._owners[tokenId] = to;
emit Transfer(from, to, tokenId);
return from;
}
/**
* @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 {
if (to == address(0)) {
revert ERC721InvalidReceiver(address(0));
}
address previousOwner = _update(to, tokenId, address(0));
if (previousOwner != address(0)) {
revert ERC721InvalidSender(address(0));
}
}
/**
* @dev Mints `tokenId`, transfers it to `to` and checks for `to` acceptance.
*
* 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 {
_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);
_checkOnERC721Received(address(0), to, tokenId, data);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
* This is an internal function that does not check if the sender is authorized to operate on the token.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal {
address previousOwner = _update(address(0), tokenId, address(0));
if (previousOwner == address(0)) {
revert ERC721NonexistentToken(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 {
if (to == address(0)) {
revert ERC721InvalidReceiver(address(0));
}
address previousOwner = _update(to, tokenId, address(0));
if (previousOwner == address(0)) {
revert ERC721NonexistentToken(tokenId);
} else if (previousOwner != from) {
revert ERC721IncorrectOwner(from, tokenId, previousOwner);
}
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking that contract recipients
* are aware of the ERC721 standard 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 like {safeTransferFrom} in the sense that it invokes
* {IERC721Receiver-onERC721Received} on the receiver, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `tokenId` token must exist and be owned by `from`.
* - `to` cannot be the zero address.
* - `from` cannot be the zero address.
* - 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) internal {
_safeTransfer(from, to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeTransfer-address-address-uint256-}[`_safeTransfer`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeTransfer(address from, address to, uint256 tokenId, bytes memory data) internal virtual {
_transfer(from, to, tokenId);
_checkOnERC721Received(from, to, tokenId, data);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* The `auth` argument is optional. If the value passed is non 0, then this function will check that `auth` is
* either the owner of the token, or approved to operate on all tokens held by this owner.
*
* Emits an {Approval} event.
*
* Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
*/
function _approve(address to, uint256 tokenId, address auth) internal {
_approve(to, tokenId, auth, true);
}
/**
* @dev Variant of `_approve` with an optional flag to enable or disable the {Approval} event. The event is not
* emitted in the context of transfers.
*/
function _approve(address to, uint256 tokenId, address auth, bool emitEvent) internal virtual {
ERC721Storage storage $ = _getERC721Storage();
// Avoid reading the owner unless necessary
if (emitEvent || auth != address(0)) {
address owner = _requireOwned(tokenId);
// We do not use _isAuthorized because single-token approvals should not be able to call approve
if (auth != address(0) && owner != auth && !isApprovedForAll(owner, auth)) {
revert ERC721InvalidApprover(auth);
}
if (emitEvent) {
emit Approval(owner, to, tokenId);
}
}
$._tokenApprovals[tokenId] = to;
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Requirements:
* - operator can't be the address zero.
*
* Emits an {ApprovalForAll} event.
*/
function _setApprovalForAll(address owner, address operator, bool approved) internal virtual {
ERC721Storage storage $ = _getERC721Storage();
if (operator == address(0)) {
revert ERC721InvalidOperator(operator);
}
$._operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Reverts if the `tokenId` doesn't have a current owner (it hasn't been minted, or it has been burned).
* Returns the owner.
*
* Overrides to ownership logic should be done to {_ownerOf}.
*/
function _requireOwned(uint256 tokenId) internal view returns (address) {
address owner = _ownerOf(tokenId);
if (owner == address(0)) {
revert ERC721NonexistentToken(tokenId);
}
return owner;
}
/**
* @dev Private function to invoke {IERC721Receiver-onERC721Received} on a target address. This will revert if the
* recipient doesn't accept the token transfer. 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
*/
function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory data) private {
if (to.code.length > 0) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
if (retval != IERC721Receiver.onERC721Received.selector) {
revert ERC721InvalidReceiver(to);
}
} catch (bytes memory reason) {
if (reason.length == 0) {
revert ERC721InvalidReceiver(to);
} else {
/// @solidity memory-safe-assembly
assembly {
revert(add(32, reason), mload(reason))
}
}
}
}
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
import {Initializable} from "../proxy/utils/Initializable.sol";
/**
* @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 ContextUpgradeable is Initializable {
function __Context_init() internal onlyInitializing {
}
function __Context_init_unchained() internal onlyInitializing {
}
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)
pragma solidity ^0.8.20;
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
import {Initializable} from "../../proxy/utils/Initializable.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);
* }
* ```
*/
abstract contract ERC165Upgradeable is Initializable, IERC165 {
function __ERC165_init() internal onlyInitializing {
}
function __ERC165_init_unchained() internal onlyInitializing {
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC1822.sol)
pragma solidity ^0.8.20;
/**
* @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified
* proxy whose upgrades are fully controlled by the current implementation.
*/
interface IERC1822Proxiable {
/**
* @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation
* address.
*
* IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks
* bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this
* function revert if invoked through a proxy.
*/
function proxiableUUID() external view returns (bytes32);
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard ERC20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
*/
interface IERC20Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC20InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC20InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
* @param spender Address that may be allowed to operate on tokens without being their owner.
* @param allowance Amount of tokens a `spender` is allowed to operate with.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC20InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `spender` to be approved. Used in approvals.
* @param spender Address that may be allowed to operate on tokens without being their owner.
*/
error ERC20InvalidSpender(address spender);
}
/**
* @dev Standard ERC721 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
*/
interface IERC721Errors {
/**
* @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
* Used in balance queries.
* @param owner Address of the current owner of a token.
*/
error ERC721InvalidOwner(address owner);
/**
* @dev Indicates a `tokenId` whose `owner` is the zero address.
* @param tokenId Identifier number of a token.
*/
error ERC721NonexistentToken(uint256 tokenId);
/**
* @dev Indicates an error related to the ownership over a particular token. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param tokenId Identifier number of a token.
* @param owner Address of the current owner of a token.
*/
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC721InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC721InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param tokenId Identifier number of a token.
*/
error ERC721InsufficientApproval(address operator, uint256 tokenId);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC721InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC721InvalidOperator(address operator);
}
/**
* @dev Standard ERC1155 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
*/
interface IERC1155Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
* @param tokenId Identifier number of a token.
*/
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC1155InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC1155InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param owner Address of the current owner of a token.
*/
error ERC1155MissingApprovalForAll(address operator, address owner);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC1155InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC1155InvalidOperator(address operator);
/**
* @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
* Used in batch transfers.
* @param idsLength Length of the array of token identifiers
* @param valuesLength Length of the array of token amounts
*/
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol)
pragma solidity ^0.8.20;
/**
* @dev This is the interface that {BeaconProxy} expects of its beacon.
*/
interface IBeacon {
/**
* @dev Must return an address that can be used as a delegate call target.
*
* {UpgradeableBeacon} will check that this address is a contract.
*/
function implementation() external view returns (address);
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (proxy/ERC1967/ERC1967Utils.sol)
pragma solidity ^0.8.20;
import {IBeacon} from "../beacon/IBeacon.sol";
import {Address} from "../../utils/Address.sol";
import {StorageSlot} from "../../utils/StorageSlot.sol";
/**
* @dev This abstract contract provides getters and event emitting update functions for
* https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.
*/
library ERC1967Utils {
// We re-declare ERC-1967 events here because they can't be used directly from IERC1967.
// This will be fixed in Solidity 0.8.21. At that point we should remove these events.
/**
* @dev Emitted when the implementation is upgraded.
*/
event Upgraded(address indexed implementation);
/**
* @dev Emitted when the admin account has changed.
*/
event AdminChanged(address previousAdmin, address newAdmin);
/**
* @dev Emitted when the beacon is changed.
*/
event BeaconUpgraded(address indexed beacon);
/**
* @dev Storage slot with the address of the current implementation.
* This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1.
*/
// solhint-disable-next-line private-vars-leading-underscore
bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
/**
* @dev The `implementation` of the proxy is invalid.
*/
error ERC1967InvalidImplementation(address implementation);
/**
* @dev The `admin` of the proxy is invalid.
*/
error ERC1967InvalidAdmin(address admin);
/**
* @dev The `beacon` of the proxy is invalid.
*/
error ERC1967InvalidBeacon(address beacon);
/**
* @dev An upgrade function sees `msg.value > 0` that may be lost.
*/
error ERC1967NonPayable();
/**
* @dev Returns the current implementation address.
*/
function getImplementation() internal view returns (address) {
return StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value;
}
/**
* @dev Stores a new address in the EIP1967 implementation slot.
*/
function _setImplementation(address newImplementation) private {
if (newImplementation.code.length == 0) {
revert ERC1967InvalidImplementation(newImplementation);
}
StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value = newImplementation;
}
/**
* @dev Performs implementation upgrade with additional setup call if data is nonempty.
* This function is payable only if the setup call is performed, otherwise `msg.value` is rejected
* to avoid stuck value in the contract.
*
* Emits an {IERC1967-Upgraded} event.
*/
function upgradeToAndCall(address newImplementation, bytes memory data) internal {
_setImplementation(newImplementation);
emit Upgraded(newImplementation);
if (data.length > 0) {
Address.functionDelegateCall(newImplementation, data);
} else {
_checkNonPayable();
}
}
/**
* @dev Storage slot with the admin of the contract.
* This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1.
*/
// solhint-disable-next-line private-vars-leading-underscore
bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;
/**
* @dev Returns the current admin.
*
* TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using
* the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
* `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`
*/
function getAdmin() internal view returns (address) {
return StorageSlot.getAddressSlot(ADMIN_SLOT).value;
}
/**
* @dev Stores a new address in the EIP1967 admin slot.
*/
function _setAdmin(address newAdmin) private {
if (newAdmin == address(0)) {
revert ERC1967InvalidAdmin(address(0));
}
StorageSlot.getAddressSlot(ADMIN_SLOT).value = newAdmin;
}
/**
* @dev Changes the admin of the proxy.
*
* Emits an {IERC1967-AdminChanged} event.
*/
function changeAdmin(address newAdmin) internal {
emit AdminChanged(getAdmin(), newAdmin);
_setAdmin(newAdmin);
}
/**
* @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.
* This is the keccak-256 hash of "eip1967.proxy.beacon" subtracted by 1.
*/
// solhint-disable-next-line private-vars-leading-underscore
bytes32 internal constant BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;
/**
* @dev Returns the current beacon.
*/
function getBeacon() internal view returns (address) {
return StorageSlot.getAddressSlot(BEACON_SLOT).value;
}
/**
* @dev Stores a new beacon in the EIP1967 beacon slot.
*/
function _setBeacon(address newBeacon) private {
if (newBeacon.code.length == 0) {
revert ERC1967InvalidBeacon(newBeacon);
}
StorageSlot.getAddressSlot(BEACON_SLOT).value = newBeacon;
address beaconImplementation = IBeacon(newBeacon).implementation();
if (beaconImplementation.code.length == 0) {
revert ERC1967InvalidImplementation(beaconImplementation);
}
}
/**
* @dev Change the beacon and trigger a setup call if data is nonempty.
* This function is payable only if the setup call is performed, otherwise `msg.value` is rejected
* to avoid stuck value in the contract.
*
* Emits an {IERC1967-BeaconUpgraded} event.
*
* CAUTION: Invoking this function has no effect on an instance of {BeaconProxy} since v5, since
* it uses an immutable beacon without looking at the value of the ERC-1967 beacon slot for
* efficiency.
*/
function upgradeBeaconToAndCall(address newBeacon, bytes memory data) internal {
_setBeacon(newBeacon);
emit BeaconUpgraded(newBeacon);
if (data.length > 0) {
Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);
} else {
_checkNonPayable();
}
}
/**
* @dev Reverts if `msg.value` is not zero. It can be used to avoid `msg.value` stuck in the contract
* if an upgrade doesn't perform an initialization call.
*/
function _checkNonPayable() private {
if (msg.value > 0) {
revert ERC1967NonPayable();
}
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.20;
import {IERC721} from "../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
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.20;
import {IERC165} from "../../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`.
*
* 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;
/**
* @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 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: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
* or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
* understand this adds an external call which potentially creates a reentrancy vulnerability.
*
* 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 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 address zero.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @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);
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.20;
/**
* @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 `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)
pragma solidity ^0.8.20;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev The ETH balance of the account is not enough to perform the operation.
*/
error AddressInsufficientBalance(address account);
/**
* @dev There's no code at `target` (it is not a contract).
*/
error AddressEmptyCode(address target);
/**
* @dev A call to an address target failed. The target may have reverted.
*/
error FailedInnerCall();
/**
* @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://consensys.net/diligence/blog/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.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
if (address(this).balance < amount) {
revert AddressInsufficientBalance(address(this));
}
(bool success, ) = recipient.call{value: amount}("");
if (!success) {
revert FailedInnerCall();
}
}
/**
* @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 or custom error, it is bubbled
* up by this function (like regular Solidity function calls). However, if
* the call reverted with no returned reason, this function reverts with a
* {FailedInnerCall} error.
*
* 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.
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0);
}
/**
* @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`.
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
if (address(this).balance < value) {
revert AddressInsufficientBalance(address(this));
}
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target
* was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an
* unsuccessful call.
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata
) internal view returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
// only check if target is a contract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
if (returndata.length == 0 && target.code.length == 0) {
revert AddressEmptyCode(target);
}
return returndata;
}
}
/**
* @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
* revert reason or with a default {FailedInnerCall} error.
*/
function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
return returndata;
}
}
/**
* @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.
*/
function _revert(bytes memory returndata) private pure {
// 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
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert FailedInnerCall();
}
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
/**
* @dev Muldiv operation overflow.
*/
error MathOverflowedMulDiv();
enum Rounding {
Floor, // Toward negative infinity
Ceil, // Toward positive infinity
Trunc, // Toward zero
Expand // Away from zero
}
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the subtraction of two unsigned integers, with an overflow flag.
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// 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-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow.
return (a & b) + (a ^ b) / 2;
}
/**
* @dev Returns the ceiling of the division of two numbers.
*
* This differs from standard division with `/` in that it rounds towards infinity instead
* of rounding towards zero.
*/
function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
if (b == 0) {
// Guarantee the same behavior as in a regular Solidity division.
return a / b;
}
// (a + b - 1) / b can overflow on addition, so we distribute.
return a == 0 ? 0 : (a - 1) / b + 1;
}
/**
* @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or
* denominator == 0.
* @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by
* Uniswap Labs also under MIT license.
*/
function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
unchecked {
// 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
// use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
// variables such that product = prod1 * 2^256 + prod0.
uint256 prod0 = x * y; // Least significant 256 bits of the product
uint256 prod1; // Most significant 256 bits of the product
assembly {
let mm := mulmod(x, y, not(0))
prod1 := sub(sub(mm, prod0), lt(mm, prod0))
}
// Handle non-overflow cases, 256 by 256 division.
if (prod1 == 0) {
// Solidity will revert if denominator == 0, unlike the div opcode on its own.
// The surrounding unchecked block does not change this fact.
// See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
return prod0 / denominator;
}
// Make sure the result is less than 2^256. Also prevents denominator == 0.
if (denominator <= prod1) {
revert MathOverflowedMulDiv();
}
///////////////////////////////////////////////
// 512 by 256 division.
///////////////////////////////////////////////
// Make division exact by subtracting the remainder from [prod1 prod0].
uint256 remainder;
assembly {
// Compute remainder using mulmod.
remainder := mulmod(x, y, denominator)
// Subtract 256 bit number from 512 bit number.
prod1 := sub(prod1, gt(remainder, prod0))
prod0 := sub(prod0, remainder)
}
// Factor powers of two out of denominator and compute largest power of two divisor of denominator.
// Always >= 1. See https://cs.stackexchange.com/q/138556/92363.
uint256 twos = denominator & (0 - denominator);
assembly {
// Divide denominator by twos.
denominator := div(denominator, twos)
// Divide [prod1 prod0] by twos.
prod0 := div(prod0, twos)
// Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
twos := add(div(sub(0, twos), twos), 1)
}
// Shift in bits from prod1 into prod0.
prod0 |= prod1 * twos;
// Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
// that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
// four bits. That is, denominator * inv = 1 mod 2^4.
uint256 inverse = (3 * denominator) ^ 2;
// Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also
// works in modular arithmetic, doubling the correct bits in each step.
inverse *= 2 - denominator * inverse; // inverse mod 2^8
inverse *= 2 - denominator * inverse; // inverse mod 2^16
inverse *= 2 - denominator * inverse; // inverse mod 2^32
inverse *= 2 - denominator * inverse; // inverse mod 2^64
inverse *= 2 - denominator * inverse; // inverse mod 2^128
inverse *= 2 - denominator * inverse; // inverse mod 2^256
// Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
// This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
// less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
// is no longer required.
result = prod0 * inverse;
return result;
}
}
/**
* @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
*/
function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
uint256 result = mulDiv(x, y, denominator);
if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {
result += 1;
}
return result;
}
/**
* @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded
* towards zero.
*
* Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
*/
function sqrt(uint256 a) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
// For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
//
// We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
// `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
//
// This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
// → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
// → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
//
// Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
uint256 result = 1 << (log2(a) >> 1);
// At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
// since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
// every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
// into the expected uint128 result.
unchecked {
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
return min(result, a / result);
}
}
/**
* @notice Calculates sqrt(a), following the selected rounding direction.
*/
function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = sqrt(a);
return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);
}
}
/**
* @dev Return the log in base 2 of a positive value rounded towards zero.
* Returns 0 if given 0.
*/
function log2(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 128;
}
if (value >> 64 > 0) {
value >>= 64;
result += 64;
}
if (value >> 32 > 0) {
value >>= 32;
result += 32;
}
if (value >> 16 > 0) {
value >>= 16;
result += 16;
}
if (value >> 8 > 0) {
value >>= 8;
result += 8;
}
if (value >> 4 > 0) {
value >>= 4;
result += 4;
}
if (value >> 2 > 0) {
value >>= 2;
result += 2;
}
if (value >> 1 > 0) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 2, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log2(value);
return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 10 of a positive value rounded towards zero.
* Returns 0 if given 0.
*/
function log10(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >= 10 ** 64) {
value /= 10 ** 64;
result += 64;
}
if (value >= 10 ** 32) {
value /= 10 ** 32;
result += 32;
}
if (value >= 10 ** 16) {
value /= 10 ** 16;
result += 16;
}
if (value >= 10 ** 8) {
value /= 10 ** 8;
result += 8;
}
if (value >= 10 ** 4) {
value /= 10 ** 4;
result += 4;
}
if (value >= 10 ** 2) {
value /= 10 ** 2;
result += 2;
}
if (value >= 10 ** 1) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 10, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log10(value);
return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 256 of a positive value rounded towards zero.
* Returns 0 if given 0.
*
* Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
*/
function log256(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 16;
}
if (value >> 64 > 0) {
value >>= 64;
result += 8;
}
if (value >> 32 > 0) {
value >>= 32;
result += 4;
}
if (value >> 16 > 0) {
value >>= 16;
result += 2;
}
if (value >> 8 > 0) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 256, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log256(value);
return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);
}
}
/**
* @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.
*/
function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {
return uint8(rounding) % 2 == 1;
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard signed math utilities missing in the Solidity language.
*/
library SignedMath {
/**
* @dev Returns the largest of two signed numbers.
*/
function max(int256 a, int256 b) internal pure returns (int256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two signed numbers.
*/
function min(int256 a, int256 b) internal pure returns (int256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two signed numbers without overflow.
* The result is rounded towards zero.
*/
function average(int256 a, int256 b) internal pure returns (int256) {
// Formula from the book "Hacker's Delight"
int256 x = (a & b) + ((a ^ b) >> 1);
return x + (int256(uint256(x) >> 255) & (a ^ b));
}
/**
* @dev Returns the absolute unsigned value of a signed value.
*/
function abs(int256 n) internal pure returns (uint256) {
unchecked {
// must be unchecked in order to support `n = type(int256).min`
return uint256(n >= 0 ? n : -n);
}
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)
// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.
pragma solidity ^0.8.20;
/**
* @dev Library for reading and writing primitive types to specific storage slots.
*
* Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
* This library helps with reading and writing to such slots without the need for inline assembly.
*
* The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
*
* Example usage to set ERC1967 implementation slot:
* ```solidity
* contract ERC1967 {
* bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
*
* function _getImplementation() internal view returns (address) {
* return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
* }
*
* function _setImplementation(address newImplementation) internal {
* require(newImplementation.code.length > 0);
* StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
* }
* }
* ```
*/
library StorageSlot {
struct AddressSlot {
address value;
}
struct BooleanSlot {
bool value;
}
struct Bytes32Slot {
bytes32 value;
}
struct Uint256Slot {
uint256 value;
}
struct StringSlot {
string value;
}
struct BytesSlot {
bytes value;
}
/**
* @dev Returns an `AddressSlot` with member `value` located at `slot`.
*/
function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `BooleanSlot` with member `value` located at `slot`.
*/
function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `Bytes32Slot` with member `value` located at `slot`.
*/
function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `Uint256Slot` with member `value` located at `slot`.
*/
function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `StringSlot` with member `value` located at `slot`.
*/
function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `StringSlot` representation of the string storage pointer `store`.
*/
function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := store.slot
}
}
/**
* @dev Returns an `BytesSlot` with member `value` located at `slot`.
*/
function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.
*/
function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := store.slot
}
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)
pragma solidity ^0.8.20;
import {Math} from "./math/Math.sol";
import {SignedMath} from "./math/SignedMath.sol";
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant HEX_DIGITS = "0123456789abcdef";
uint8 private constant ADDRESS_LENGTH = 20;
/**
* @dev The `value` string doesn't fit in the specified `length`.
*/
error StringsInsufficientHexLength(uint256 value, uint256 length);
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
unchecked {
uint256 length = Math.log10(value) + 1;
string memory buffer = new string(length);
uint256 ptr;
/// @solidity memory-safe-assembly
assembly {
ptr := add(buffer, add(32, length))
}
while (true) {
ptr--;
/// @solidity memory-safe-assembly
assembly {
mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))
}
value /= 10;
if (value == 0) break;
}
return buffer;
}
}
/**
* @dev Converts a `int256` to its ASCII `string` decimal representation.
*/
function toStringSigned(int256 value) internal pure returns (string memory) {
return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value)));
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
unchecked {
return toHexString(value, Math.log256(value) + 1);
}
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
uint256 localValue = value;
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_DIGITS[localValue & 0xf];
localValue >>= 4;
}
if (localValue != 0) {
revert StringsInsufficientHexLength(value, length);
}
return string(buffer);
}
/**
* @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal
* representation.
*/
function toHexString(address addr) internal pure returns (string memory) {
return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);
}
/**
* @dev Returns true if the two strings are equal.
*/
function equal(string memory a, string memory b) internal pure returns (bool) {
return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));
}
}
{
"overrides": [
{
"files": "*.sol",
"options": {
"printWidth": 80,
"tabWidth": 4,
"useTabs": false,
"singleQuote": false,
"bracketSpacing": false
}
},
{
"files": "*.yml",
"options": {}
},
{
"files": "*.yaml",
"options": {}
},
{
"files": "*.toml",
"options": {}
},
{
"files": "*.json",
"options": {}
},
{
"files": "*.js",
"options": {}
},
{
"files": "*.ts",
"options": {}
}
]
}
{
"id": "c0d0a3318270e412713efee43c727657",
"_format": "hh-sol-build-info-1",
"solcVersion": "0.8.22",
"solcLongVersion": "0.8.22+commit.4fc1097e",
"input": {
"language": "Solidity",
"sources": {
"contracts/MyToken.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\";\n\ncontract MyToken is Initializable, ERC721Upgradeable, OwnableUpgradeable, UUPSUpgradeable {\n bool public mintable; // Mintable özelliği\n address public myMetamaskAddress;\n\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() {\n _disableInitializers();\n }\n\n function initialize(address initialOwner) initializer public {\n __ERC721_init(\"MyToken\", \"MTK\");\n __Ownable_init(initialOwner);\n __UUPSUpgradeable_init();\n mintable = true; // Mintable özelliğini etkinleştirme\n myMetamaskAddress = 0x10964Bf243F3318BfBAa87060cdd5A7fE7A54601; // Metamask cüzdan adresini atama\n }\n\n function safeMint(address to, uint256 tokenId) public {\n require(mintable, \"Minting is not enabled\");\n _safeMint(to, tokenId);\n }\n\n function setMintable(bool _mintable) public onlyOwner {\n mintable = _mintable;\n }\n\n function _authorizeUpgrade(address newImplementation)\n internal\n onlyOwner\n override\n {}\n}\n"
},
"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC1822Proxiable} from \"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\";\nimport {ERC1967Utils} from \"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\";\nimport {Initializable} from \"./Initializable.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n */\nabstract contract UUPSUpgradeable is Initializable, IERC1822Proxiable {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\n address private immutable __self = address(this);\n\n /**\n * @dev The version of the upgrade interface of the contract. If this getter is missing, both `upgradeTo(address)`\n * and `upgradeToAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called,\n * while `upgradeToAndCall` will invoke the `receive` function if the second argument is the empty byte string.\n * If the getter returns `\"5.0.0\"`, only `upgradeToAndCall(address,bytes)` is present, and the second argument must\n * be the empty byte string if no function should be called, making it impossible to invoke the `receive` function\n * during an upgrade.\n */\n string public constant UPGRADE_INTERFACE_VERSION = \"5.0.0\";\n\n /**\n * @dev The call is from an unauthorized context.\n */\n error UUPSUnauthorizedCallContext();\n\n /**\n * @dev The storage `slot` is unsupported as a UUID.\n */\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n _checkProxy();\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n _checkNotDelegated();\n _;\n }\n\n function __UUPSUpgradeable_init() internal onlyInitializing {\n }\n\n function __UUPSUpgradeable_init_unchained() internal onlyInitializing {\n }\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate the implementation's compatibility when performing an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual notDelegated returns (bytes32) {\n return ERC1967Utils.IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n *\n * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data);\n }\n\n /**\n * @dev Reverts if the execution is not performed via delegatecall or the execution\n * context is not of a proxy with an ERC1967-compliant implementation pointing to self.\n * See {_onlyProxy}.\n */\n function _checkProxy() internal view virtual {\n if (\n address(this) == __self || // Must be called through delegatecall\n ERC1967Utils.getImplementation() != __self // Must be called through an active proxy\n ) {\n revert UUPSUnauthorizedCallContext();\n }\n }\n\n /**\n * @dev Reverts if the execution is performed via delegatecall.\n * See {notDelegated}.\n */\n function _checkNotDelegated() internal view virtual {\n if (address(this) != __self) {\n // Must not be called through delegatecall\n revert UUPSUnauthorizedCallContext();\n }\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n\n /**\n * @dev Performs an implementation upgrade with a security check for UUPS proxies, and additional setup call.\n *\n * As a security check, {proxiableUUID} is invoked in the new implementation, and the return value\n * is expected to be the implementation slot in ERC1967.\n *\n * Emits an {IERC1967-Upgraded} event.\n */\n function _upgradeToAndCallUUPS(address newImplementation, bytes memory data) private {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n if (slot != ERC1967Utils.IMPLEMENTATION_SLOT) {\n revert UUPSUnsupportedProxiableUUID(slot);\n }\n ERC1967Utils.upgradeToAndCall(newImplementation, data);\n } catch {\n // The implementation is not UUPS\n revert ERC1967Utils.ERC1967InvalidImplementation(newImplementation);\n }\n }\n}\n"
},
"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```solidity\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n *\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Storage of the initializable contract.\n *\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\n * when using with upgradeable contracts.\n *\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\n */\n struct InitializableStorage {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n uint64 _initialized;\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool _initializing;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Initializable\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\n\n /**\n * @dev The contract is already initialized.\n */\n error InvalidInitialization();\n\n /**\n * @dev The contract is not initializing.\n */\n error NotInitializing();\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint64 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts.\n *\n * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\n * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\n * production.\n *\n * Emits an {Initialized} event.\n */\n modifier initializer() {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n // Cache values to avoid duplicated sloads\n bool isTopLevelCall = !$._initializing;\n uint64 initialized = $._initialized;\n\n // Allowed calls:\n // - initialSetup: the contract is not in the initializing state and no previous version was\n // initialized\n // - construction: the contract is initialized at version 1 (no reininitialization) and the\n // current contract is just being deployed\n bool initialSetup = initialized == 0 && isTopLevelCall;\n bool construction = initialized == 1 && address(this).code.length == 0;\n\n if (!initialSetup && !construction) {\n revert InvalidInitialization();\n }\n $._initialized = 1;\n if (isTopLevelCall) {\n $._initializing = true;\n }\n _;\n if (isTopLevelCall) {\n $._initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\n * are added through upgrades and that require initialization.\n *\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n * cannot be nested. If one is invoked in the context of another, execution will revert.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n *\n * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\n *\n * Emits an {Initialized} event.\n */\n modifier reinitializer(uint64 version) {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n if ($._initializing || $._initialized >= version) {\n revert InvalidInitialization();\n }\n $._initialized = version;\n $._initializing = true;\n _;\n $._initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n _checkInitializing();\n _;\n }\n\n /**\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\n */\n function _checkInitializing() internal view virtual {\n if (!_isInitializing()) {\n revert NotInitializing();\n }\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n *\n * Emits an {Initialized} event the first time it is successfully executed.\n */\n function _disableInitializers() internal virtual {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n if ($._initializing) {\n revert InvalidInitialization();\n }\n if ($._initialized != type(uint64).max) {\n $._initialized = type(uint64).max;\n emit Initialized(type(uint64).max);\n }\n }\n\n /**\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\n */\n function _getInitializedVersion() internal view returns (uint64) {\n return _getInitializableStorage()._initialized;\n }\n\n /**\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\n */\n function _isInitializing() internal view returns (bool) {\n return _getInitializableStorage()._initializing;\n }\n\n /**\n * @dev Returns a pointer to the storage namespace.\n */\n // solhint-disable-next-line var-name-mixedcase\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\n assembly {\n $.slot := INITIALIZABLE_STORAGE\n }\n }\n}\n"
},
"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {ContextUpgradeable} from \"../utils/ContextUpgradeable.sol\";\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n /// @custom:storage-location erc7201:openzeppelin.storage.Ownable\n struct OwnableStorage {\n address _owner;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Ownable\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300;\n\n function _getOwnableStorage() private pure returns (OwnableStorage storage $) {\n assembly {\n $.slot := OwnableStorageLocation\n }\n }\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n function __Ownable_init(address initialOwner) internal onlyInitializing {\n __Ownable_init_unchained(initialOwner);\n }\n\n function __Ownable_init_unchained(address initialOwner) internal onlyInitializing {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n OwnableStorage storage $ = _getOwnableStorage();\n return $._owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n OwnableStorage storage $ = _getOwnableStorage();\n address oldOwner = $._owner;\n $._owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n"
},
"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/ERC721.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC721} from \"@openzeppelin/contracts/token/ERC721/IERC721.sol\";\nimport {IERC721Receiver} from \"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\";\nimport {IERC721Metadata} from \"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\";\nimport {ContextUpgradeable} from \"../../utils/ContextUpgradeable.sol\";\nimport {Strings} from \"@openzeppelin/contracts/utils/Strings.sol\";\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport {ERC165Upgradeable} from \"../../utils/introspection/ERC165Upgradeable.sol\";\nimport {IERC721Errors} from \"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\";\nimport {Initializable} from \"../../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\nabstract contract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721, IERC721Metadata, IERC721Errors {\n using Strings for uint256;\n\n /// @custom:storage-location erc7201:openzeppelin.storage.ERC721\n struct ERC721Storage {\n // Token name\n string _name;\n\n // Token symbol\n string _symbol;\n\n mapping(uint256 tokenId => address) _owners;\n\n mapping(address owner => uint256) _balances;\n\n mapping(uint256 tokenId => address) _tokenApprovals;\n\n mapping(address owner => mapping(address operator => bool)) _operatorApprovals;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.ERC721\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant ERC721StorageLocation = 0x80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300;\n\n function _getERC721Storage() private pure returns (ERC721Storage storage $) {\n assembly {\n $.slot := ERC721StorageLocation\n }\n }\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal onlyInitializing {\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\n ERC721Storage storage $ = _getERC721Storage();\n $._name = name_;\n $._symbol = symbol_;\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, IERC165) returns (bool) {\n return\n interfaceId == type(IERC721).interfaceId ||\n interfaceId == type(IERC721Metadata).interfaceId ||\n super.supportsInterface(interfaceId);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual returns (uint256) {\n ERC721Storage storage $ = _getERC721Storage();\n if (owner == address(0)) {\n revert ERC721InvalidOwner(address(0));\n }\n return $._balances[owner];\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual returns (address) {\n return _requireOwned(tokenId);\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual returns (string memory) {\n ERC721Storage storage $ = _getERC721Storage();\n return $._name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual returns (string memory) {\n ERC721Storage storage $ = _getERC721Storage();\n return $._symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual returns (string memory) {\n _requireOwned(tokenId);\n\n string memory baseURI = _baseURI();\n return bytes(baseURI).length > 0 ? string.concat(baseURI, tokenId.toString()) : \"\";\n }\n\n /**\n * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each\n * token will be the concatenation of the `baseURI` and the `tokenId`. Empty\n * by default, can be overridden in child contracts.\n */\n function _baseURI() internal view virtual returns (string memory) {\n return \"\";\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual {\n _approve(to, tokenId, _msgSender());\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual returns (address) {\n _requireOwned(tokenId);\n\n return _getApproved(tokenId);\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual {\n _setApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual returns (bool) {\n ERC721Storage storage $ = _getERC721Storage();\n return $._operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual {\n if (to == address(0)) {\n revert ERC721InvalidReceiver(address(0));\n }\n // Setting an \"auth\" arguments enables the `_isAuthorized` check which verifies that the token exists\n // (from != 0). Therefore, it is not needed to verify that the return value is not 0 here.\n address previousOwner = _update(to, tokenId, _msgSender());\n if (previousOwner != from) {\n revert ERC721IncorrectOwner(from, tokenId, previousOwner);\n }\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual {\n transferFrom(from, to, tokenId);\n _checkOnERC721Received(from, to, tokenId, data);\n }\n\n /**\n * @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist\n *\n * IMPORTANT: Any overrides to this function that add ownership of tokens not tracked by the\n * core ERC721 logic MUST be matched with the use of {_increaseBalance} to keep balances\n * consistent with ownership. The invariant to preserve is that for any address `a` the value returned by\n * `balanceOf(a)` must be equal to the number of tokens such that `_ownerOf(tokenId)` is `a`.\n */\n function _ownerOf(uint256 tokenId) internal view virtual returns (address) {\n ERC721Storage storage $ = _getERC721Storage();\n return $._owners[tokenId];\n }\n\n /**\n * @dev Returns the approved address for `tokenId`. Returns 0 if `tokenId` is not minted.\n */\n function _getApproved(uint256 tokenId) internal view virtual returns (address) {\n ERC721Storage storage $ = _getERC721Storage();\n return $._tokenApprovals[tokenId];\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `owner`'s tokens, or `tokenId` in\n * particular (ignoring whether it is owned by `owner`).\n *\n * WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this\n * assumption.\n */\n function _isAuthorized(address owner, address spender, uint256 tokenId) internal view virtual returns (bool) {\n return\n spender != address(0) &&\n (owner == spender || isApprovedForAll(owner, spender) || _getApproved(tokenId) == spender);\n }\n\n /**\n * @dev Checks if `spender` can operate on `tokenId`, assuming the provided `owner` is the actual owner.\n * Reverts if `spender` does not have approval from the provided `owner` for the given token or for all its assets\n * the `spender` for the specific `tokenId`.\n *\n * WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this\n * assumption.\n */\n function _checkAuthorized(address owner, address spender, uint256 tokenId) internal view virtual {\n if (!_isAuthorized(owner, spender, tokenId)) {\n if (owner == address(0)) {\n revert ERC721NonexistentToken(tokenId);\n } else {\n revert ERC721InsufficientApproval(spender, tokenId);\n }\n }\n }\n\n /**\n * @dev Unsafe write access to the balances, used by extensions that \"mint\" tokens using an {ownerOf} override.\n *\n * NOTE: the value is limited to type(uint128).max. This protect against _balance overflow. It is unrealistic that\n * a uint256 would ever overflow from increments when these increments are bounded to uint128 values.\n *\n * WARNING: Increasing an account's balance using this function tends to be paired with an override of the\n * {_ownerOf} function to resolve the ownership of the corresponding tokens so that balances and ownership\n * remain consistent with one another.\n */\n function _increaseBalance(address account, uint128 value) internal virtual {\n ERC721Storage storage $ = _getERC721Storage();\n unchecked {\n $._balances[account] += value;\n }\n }\n\n /**\n * @dev Transfers `tokenId` from its current owner to `to`, or alternatively mints (or burns) if the current owner\n * (or `to`) is the zero address. Returns the owner of the `tokenId` before the update.\n *\n * The `auth` argument is optional. If the value passed is non 0, then this function will check that\n * `auth` is either the owner of the token, or approved to operate on the token (by the owner).\n *\n * Emits a {Transfer} event.\n *\n * NOTE: If overriding this function in a way that tracks balances, see also {_increaseBalance}.\n */\n function _update(address to, uint256 tokenId, address auth) internal virtual returns (address) {\n ERC721Storage storage $ = _getERC721Storage();\n address from = _ownerOf(tokenId);\n\n // Perform (optional) operator check\n if (auth != address(0)) {\n _checkAuthorized(from, auth, tokenId);\n }\n\n // Execute the update\n if (from != address(0)) {\n // Clear approval. No need to re-authorize or emit the Approval event\n _approve(address(0), tokenId, address(0), false);\n\n unchecked {\n $._balances[from] -= 1;\n }\n }\n\n if (to != address(0)) {\n unchecked {\n $._balances[to] += 1;\n }\n }\n\n $._owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n\n return from;\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal {\n if (to == address(0)) {\n revert ERC721InvalidReceiver(address(0));\n }\n address previousOwner = _update(to, tokenId, address(0));\n if (previousOwner != address(0)) {\n revert ERC721InvalidSender(address(0));\n }\n }\n\n /**\n * @dev Mints `tokenId`, transfers it to `to` and checks for `to` acceptance.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory data) internal virtual {\n _mint(to, tokenId);\n _checkOnERC721Received(address(0), to, tokenId, data);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n * This is an internal function that does not check if the sender is authorized to operate on the token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal {\n address previousOwner = _update(address(0), tokenId, address(0));\n if (previousOwner == address(0)) {\n revert ERC721NonexistentToken(tokenId);\n }\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal {\n if (to == address(0)) {\n revert ERC721InvalidReceiver(address(0));\n }\n address previousOwner = _update(to, tokenId, address(0));\n if (previousOwner == address(0)) {\n revert ERC721NonexistentToken(tokenId);\n } else if (previousOwner != from) {\n revert ERC721IncorrectOwner(from, tokenId, previousOwner);\n }\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking that contract recipients\n * are aware of the ERC721 standard to prevent tokens from being forever locked.\n *\n * `data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is like {safeTransferFrom} in the sense that it invokes\n * {IERC721Receiver-onERC721Received} on the receiver, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `tokenId` token must exist and be owned by `from`.\n * - `to` cannot be the zero address.\n * - `from` cannot be the zero address.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId) internal {\n _safeTransfer(from, to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeTransfer-address-address-uint256-}[`_safeTransfer`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory data) internal virtual {\n _transfer(from, to, tokenId);\n _checkOnERC721Received(from, to, tokenId, data);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * The `auth` argument is optional. If the value passed is non 0, then this function will check that `auth` is\n * either the owner of the token, or approved to operate on all tokens held by this owner.\n *\n * Emits an {Approval} event.\n *\n * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n */\n function _approve(address to, uint256 tokenId, address auth) internal {\n _approve(to, tokenId, auth, true);\n }\n\n /**\n * @dev Variant of `_approve` with an optional flag to enable or disable the {Approval} event. The event is not\n * emitted in the context of transfers.\n */\n function _approve(address to, uint256 tokenId, address auth, bool emitEvent) internal virtual {\n ERC721Storage storage $ = _getERC721Storage();\n // Avoid reading the owner unless necessary\n if (emitEvent || auth != address(0)) {\n address owner = _requireOwned(tokenId);\n\n // We do not use _isAuthorized because single-token approvals should not be able to call approve\n if (auth != address(0) && owner != auth && !isApprovedForAll(owner, auth)) {\n revert ERC721InvalidApprover(auth);\n }\n\n if (emitEvent) {\n emit Approval(owner, to, tokenId);\n }\n }\n\n $._tokenApprovals[tokenId] = to;\n }\n\n /**\n * @dev Approve `operator` to operate on all of `owner` tokens\n *\n * Requirements:\n * - operator can't be the address zero.\n *\n * Emits an {ApprovalForAll} event.\n */\n function _setApprovalForAll(address owner, address operator, bool approved) internal virtual {\n ERC721Storage storage $ = _getERC721Storage();\n if (operator == address(0)) {\n revert ERC721InvalidOperator(operator);\n }\n $._operatorApprovals[owner][operator] = approved;\n emit ApprovalForAll(owner, operator, approved);\n }\n\n /**\n * @dev Reverts if the `tokenId` doesn't have a current owner (it hasn't been minted, or it has been burned).\n * Returns the owner.\n *\n * Overrides to ownership logic should be done to {_ownerOf}.\n */\n function _requireOwned(uint256 tokenId) internal view returns (address) {\n address owner = _ownerOf(tokenId);\n if (owner == address(0)) {\n revert ERC721NonexistentToken(tokenId);\n }\n return owner;\n }\n\n /**\n * @dev Private function to invoke {IERC721Receiver-onERC721Received} on a target address. This will revert if the\n * recipient doesn't accept the token transfer. The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param data bytes optional data to send along with the call\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory data) private {\n if (to.code.length > 0) {\n try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {\n if (retval != IERC721Receiver.onERC721Received.selector) {\n revert ERC721InvalidReceiver(to);\n }\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n revert ERC721InvalidReceiver(to);\n } else {\n /// @solidity memory-safe-assembly\n assembly {\n revert(add(32, reason), mload(reason))\n }\n }\n }\n }\n }\n}\n"
},
"@openzeppelin/contracts/interfaces/draft-IERC6093.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard ERC20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.\n */\ninterface IERC20Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC20InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC20InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n * @param allowance Amount of tokens a `spender` is allowed to operate with.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC20InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.\n */\ninterface IERC721Errors {\n /**\n * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.\n * Used in balance queries.\n * @param owner Address of the current owner of a token.\n */\n error ERC721InvalidOwner(address owner);\n\n /**\n * @dev Indicates a `tokenId` whose `owner` is the zero address.\n * @param tokenId Identifier number of a token.\n */\n error ERC721NonexistentToken(uint256 tokenId);\n\n /**\n * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param tokenId Identifier number of a token.\n * @param owner Address of the current owner of a token.\n */\n error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC721InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC721InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param tokenId Identifier number of a token.\n */\n error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC721InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.\n */\ninterface IERC1155Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n * @param tokenId Identifier number of a token.\n */\n error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC1155InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC1155InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param owner Address of the current owner of a token.\n */\n error ERC1155MissingApprovalForAll(address operator, address owner);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC1155InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC1155InvalidOperator(address operator);\n\n /**\n * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n * Used in batch transfers.\n * @param idsLength Length of the array of token identifiers\n * @param valuesLength Length of the array of token amounts\n */\n error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n"
},
"@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport {Initializable} from \"../../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n */\nabstract contract ERC165Upgradeable is Initializable, IERC165 {\n function __ERC165_init() internal onlyInitializing {\n }\n\n function __ERC165_init_unchained() internal onlyInitializing {\n }\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n"
},
"@openzeppelin/contracts/utils/introspection/IERC165.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"
},
"@openzeppelin/contracts/utils/Strings.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\n\npragma solidity ^0.8.20;\n\nimport {Math} from \"./math/Math.sol\";\nimport {SignedMath} from \"./math/SignedMath.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant HEX_DIGITS = \"0123456789abcdef\";\n uint8 private constant ADDRESS_LENGTH = 20;\n\n /**\n * @dev The `value` string doesn't fit in the specified `length`.\n */\n error StringsInsufficientHexLength(uint256 value, uint256 length);\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\n */\n function toStringSigned(int256 value) internal pure returns (string memory) {\n return string.concat(value < 0 ? \"-\" : \"\", toString(SignedMath.abs(value)));\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n uint256 localValue = value;\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = HEX_DIGITS[localValue & 0xf];\n localValue >>= 4;\n }\n if (localValue != 0) {\n revert StringsInsufficientHexLength(value, length);\n }\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n * representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\n }\n\n /**\n * @dev Returns true if the two strings are equal.\n */\n function equal(string memory a, string memory b) internal pure returns (bool) {\n return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\n }\n}\n"
},
"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n"
},
"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC721} from \"../IERC721.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721Metadata is IERC721 {\n /**\n * @dev Returns the token collection name.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the token collection symbol.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n */\n function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n"
},
"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721Receiver.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721Receiver {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be\n * reverted.\n *\n * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(\n address operator,\n address from,\n uint256 tokenId,\n bytes calldata data\n ) external returns (bytes4);\n}\n"
},
"@openzeppelin/contracts/token/ERC721/IERC721.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../../utils/introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721 is IERC165 {\n /**\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n */\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n */\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n */\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n /**\n * @dev Returns the number of tokens in ``owner``'s account.\n */\n function balanceOf(address owner) external view returns (uint256 balance);\n\n /**\n * @dev Returns the owner of the `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function ownerOf(uint256 tokenId) external view returns (address owner);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\n * a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or\n * {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\n * a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Transfers `tokenId` token from `from` to `to`.\n *\n * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\n * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\n * understand this adds an external call which potentially creates a reentrancy vulnerability.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n * The approval is cleared when the token is transferred.\n *\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n *\n * Requirements:\n *\n * - The caller must own the token or be an approved operator.\n * - `tokenId` must exist.\n *\n * Emits an {Approval} event.\n */\n function approve(address to, uint256 tokenId) external;\n\n /**\n * @dev Approve or remove `operator` as an operator for the caller.\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n *\n * Requirements:\n *\n * - The `operator` cannot be the address zero.\n *\n * Emits an {ApprovalForAll} event.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns the account approved for `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function getApproved(uint256 tokenId) external view returns (address operator);\n\n /**\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n *\n * See {setApprovalForAll}\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool);\n}\n"
},
"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/ERC1967/ERC1967Utils.sol)\n\npragma solidity ^0.8.20;\n\nimport {IBeacon} from \"../beacon/IBeacon.sol\";\nimport {Address} from \"../../utils/Address.sol\";\nimport {StorageSlot} from \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n */\nlibrary ERC1967Utils {\n // We re-declare ERC-1967 events here because they can't be used directly from IERC1967.\n // This will be fixed in Solidity 0.8.21. At that point we should remove these events.\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Emitted when the beacon is changed.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1.\n */\n // solhint-disable-next-line private-vars-leading-underscore\n bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev The `implementation` of the proxy is invalid.\n */\n error ERC1967InvalidImplementation(address implementation);\n\n /**\n * @dev The `admin` of the proxy is invalid.\n */\n error ERC1967InvalidAdmin(address admin);\n\n /**\n * @dev The `beacon` of the proxy is invalid.\n */\n error ERC1967InvalidBeacon(address beacon);\n\n /**\n * @dev An upgrade function sees `msg.value > 0` that may be lost.\n */\n error ERC1967NonPayable();\n\n /**\n * @dev Returns the current implementation address.\n */\n function getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n if (newImplementation.code.length == 0) {\n revert ERC1967InvalidImplementation(newImplementation);\n }\n StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Performs implementation upgrade with additional setup call if data is nonempty.\n * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\n * to avoid stuck value in the contract.\n *\n * Emits an {IERC1967-Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n\n if (data.length > 0) {\n Address.functionDelegateCall(newImplementation, data);\n } else {\n _checkNonPayable();\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1.\n */\n // solhint-disable-next-line private-vars-leading-underscore\n bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Returns the current admin.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using\n * the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function getAdmin() internal view returns (address) {\n return StorageSlot.getAddressSlot(ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n if (newAdmin == address(0)) {\n revert ERC1967InvalidAdmin(address(0));\n }\n StorageSlot.getAddressSlot(ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {IERC1967-AdminChanged} event.\n */\n function changeAdmin(address newAdmin) internal {\n emit AdminChanged(getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is the keccak-256 hash of \"eip1967.proxy.beacon\" subtracted by 1.\n */\n // solhint-disable-next-line private-vars-leading-underscore\n bytes32 internal constant BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Returns the current beacon.\n */\n function getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n if (newBeacon.code.length == 0) {\n revert ERC1967InvalidBeacon(newBeacon);\n }\n\n StorageSlot.getAddressSlot(BEACON_SLOT).value = newBeacon;\n\n address beaconImplementation = IBeacon(newBeacon).implementation();\n if (beaconImplementation.code.length == 0) {\n revert ERC1967InvalidImplementation(beaconImplementation);\n }\n }\n\n /**\n * @dev Change the beacon and trigger a setup call if data is nonempty.\n * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\n * to avoid stuck value in the contract.\n *\n * Emits an {IERC1967-BeaconUpgraded} event.\n *\n * CAUTION: Invoking this function has no effect on an instance of {BeaconProxy} since v5, since\n * it uses an immutable beacon without looking at the value of the ERC-1967 beacon slot for\n * efficiency.\n */\n function upgradeBeaconToAndCall(address newBeacon, bytes memory data) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n\n if (data.length > 0) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n } else {\n _checkNonPayable();\n }\n }\n\n /**\n * @dev Reverts if `msg.value` is not zero. It can be used to avoid `msg.value` stuck in the contract\n * if an upgrade doesn't perform an initialization call.\n */\n function _checkNonPayable() private {\n if (msg.value > 0) {\n revert ERC1967NonPayable();\n }\n }\n}\n"
},
"@openzeppelin/contracts/interfaces/draft-IERC1822.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n"
},
"@openzeppelin/contracts/utils/math/SignedMath.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard signed math utilities missing in the Solidity language.\n */\nlibrary SignedMath {\n /**\n * @dev Returns the largest of two signed numbers.\n */\n function max(int256 a, int256 b) internal pure returns (int256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two signed numbers.\n */\n function min(int256 a, int256 b) internal pure returns (int256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two signed numbers without overflow.\n * The result is rounded towards zero.\n */\n function average(int256 a, int256 b) internal pure returns (int256) {\n // Formula from the book \"Hacker's Delight\"\n int256 x = (a & b) + ((a ^ b) >> 1);\n return x + (int256(uint256(x) >> 255) & (a ^ b));\n }\n\n /**\n * @dev Returns the absolute unsigned value of a signed value.\n */\n function abs(int256 n) internal pure returns (uint256) {\n unchecked {\n // must be unchecked in order to support `n = type(int256).min`\n return uint256(n >= 0 ? n : -n);\n }\n }\n}\n"
},
"@openzeppelin/contracts/utils/math/Math.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n /**\n * @dev Muldiv operation overflow.\n */\n error MathOverflowedMulDiv();\n\n enum Rounding {\n Floor, // Toward negative infinity\n Ceil, // Toward positive infinity\n Trunc, // Toward zero\n Expand // Away from zero\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds towards infinity instead\n * of rounding towards zero.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n if (b == 0) {\n // Guarantee the same behavior as in a regular Solidity division.\n return a / b;\n }\n\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n * denominator == 0.\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n * Uniswap Labs also under MIT license.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0 = x * y; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n // The surrounding unchecked block does not change this fact.\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n if (denominator <= prod1) {\n revert MathOverflowedMulDiv();\n }\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\n // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\n\n uint256 twos = denominator & (0 - denominator);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\n // works in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n * towards zero.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10 ** 64) {\n value /= 10 ** 64;\n result += 64;\n }\n if (value >= 10 ** 32) {\n value /= 10 ** 32;\n result += 32;\n }\n if (value >= 10 ** 16) {\n value /= 10 ** 16;\n result += 16;\n }\n if (value >= 10 ** 8) {\n value /= 10 ** 8;\n result += 8;\n }\n if (value >= 10 ** 4) {\n value /= 10 ** 4;\n result += 4;\n }\n if (value >= 10 ** 2) {\n value /= 10 ** 2;\n result += 2;\n }\n if (value >= 10 ** 1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\n */\n function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\n return uint8(rounding) % 2 == 1;\n }\n}\n"
},
"@openzeppelin/contracts/utils/StorageSlot.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(newImplementation.code.length > 0);\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n struct StringSlot {\n string value;\n }\n\n struct BytesSlot {\n bytes value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` with member `value` located at `slot`.\n */\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n */\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := store.slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` with member `value` located at `slot`.\n */\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n */\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := store.slot\n }\n }\n}\n"
},
"@openzeppelin/contracts/utils/Address.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error AddressInsufficientBalance(address account);\n\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedInnerCall();\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert AddressInsufficientBalance(address(this));\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert FailedInnerCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {FailedInnerCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert AddressInsufficientBalance(address(this));\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n * unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {FailedInnerCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert FailedInnerCall();\n }\n }\n}\n"
},
"@openzeppelin/contracts/proxy/beacon/IBeacon.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {UpgradeableBeacon} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"": [
"ast"
],
"*": [
"abi",
"metadata",
"devdoc",
"userdoc",
"storageLayout",
"evm.legacyAssembly",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"evm.gasEstimates",
"evm.assembly"
]
}
},
"remappings": []
}
},
"output": {
"contracts": {
"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": {
"OwnableUpgradeable": {
"abi": [
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "OwnableInvalidOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "OwnableUnauthorizedAccount",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "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. The initial owner is set to the address provided by the deployer. 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.",
"errors": {
"InvalidInitialization()": [
{
"details": "The contract is already initialized."
}
],
"NotInitializing()": [
{
"details": "The contract is not initializing."
}
],
"OwnableInvalidOwner(address)": [
{
"details": "The owner is not a valid owner account. (eg. `address(0)`)"
}
],
"OwnableUnauthorizedAccount(address)": [
{
"details": "The caller account is not authorized to perform an operation."
}
]
},
"events": {
"Initialized(uint64)": {
"details": "Triggered when the contract has been initialized or reinitialized."
}
},
"kind": "dev",
"methods": {
"owner()": {
"details": "Returns the address of the current owner."
},
"renounceOwnership()": {
"details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."
},
"transferOwnership(address)": {
"details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"owner()": "8da5cb5b",
"renounceOwnership()": "715018a6",
"transferOwnership(address)": "f2fde38b"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"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. The initial owner is set to the address provided by the deployer. 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.\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":\"OwnableUpgradeable\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol": {
"Initializable": {
"abi": [
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"type": "event"
}
],
"devdoc": {
"custom:oz-upgrades-unsafe-allow": "constructor constructor() { _disableInitializers(); } ``` ====",
"details": "This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. The initialization functions use a version number. Once a version number is used, it is consumed and cannot be reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in case an upgrade adds a module that needs to be initialized. For example: [.hljs-theme-light.nopadding] ```solidity contract MyToken is ERC20Upgradeable { function initialize() initializer public { __ERC20_init(\"MyToken\", \"MTK\"); } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { function initializeV2() reinitializer(2) public { __ERC20Permit_init(\"MyToken\"); } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: [.hljs-theme-light.nopadding] ```",
"errors": {
"InvalidInitialization()": [
{
"details": "The contract is already initialized."
}
],
"NotInitializing()": [
{
"details": "The contract is not initializing."
}
]
},
"events": {
"Initialized(uint64)": {
"details": "Triggered when the contract has been initialized or reinitialized."
}
},
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor constructor() { _disableInitializers(); } ``` ====\",\"details\":\"This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. The initialization functions use a version number. Once a version number is used, it is consumed and cannot be reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in case an upgrade adds a module that needs to be initialized. For example: [.hljs-theme-light.nopadding] ```solidity contract MyToken is ERC20Upgradeable { function initialize() initializer public { __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\"); } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { function initializeV2() reinitializer(2) public { __ERC20Permit_init(\\\"MyToken\\\"); } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from b
{
"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
},
"goerli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"functionDebugData": {
"@_4286": {
"entryPoint": null,
"id": 4286,
"parameterSlots": 0,
"returnSlots": 0
},
"@_disableInitializers_416": {
"entryPoint": 90,
"id": 416,
"parameterSlots": 0,
"returnSlots": 0
},
"@_getInitializableStorage_447": {
"entryPoint": 350,
"id": 447,
"parameterSlots": 0,
"returnSlots": 1
},
"abi_encode_t_uint64_to_t_uint64_fromStack": {
"entryPoint": 408,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed": {
"entryPoint": 425,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"cleanup_t_uint64": {
"entryPoint": 389,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
}
},
"generatedSources": [
{
"ast": {
"nativeSrc": "0:456:20",
"nodeType": "YulBlock",
"src": "0:456:20",
"statements": [
{
"body": {
"nativeSrc": "51:57:20",
"nodeType": "YulBlock",
"src": "51:57:20",
"statements": [
{
"nativeSrc": "61:41:20",
"nodeType": "YulAssignment",
"src": "61:41:20",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "76:5:20",
"nodeType": "YulIdentifier",
"src": "76:5:20"
},
{
"kind": "number",
"nativeSrc": "83:18:20",
"nodeType": "YulLiteral",
"src": "83:18:20",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "and",
"nativeSrc": "72:3:20",
"nodeType": "YulIdentifier",
"src": "72:3:20"
},
"nativeSrc": "72:30:20",
"nodeType": "YulFunctionCall",
"src": "72:30:20"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "61:7:20",
"nodeType": "YulIdentifier",
"src": "61:7:20"
}
]
}
]
},
"name": "cleanup_t_uint64",
"nativeSrc": "7:101:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "33:5:20",
"nodeType": "YulTypedName",
"src": "33:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "43:7:20",
"nodeType": "YulTypedName",
"src": "43:7:20",
"type": ""
}
],
"src": "7:101:20"
},
{
"body": {
"nativeSrc": "177:52:20",
"nodeType": "YulBlock",
"src": "177:52:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "194:3:20",
"nodeType": "YulIdentifier",
"src": "194:3:20"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "216:5:20",
"nodeType": "YulIdentifier",
"src": "216:5:20"
}
],
"functionName": {
"name": "cleanup_t_uint64",
"nativeSrc": "199:16:20",
"nodeType": "YulIdentifier",
"src": "199:16:20"
},
"nativeSrc": "199:23:20",
"nodeType": "YulFunctionCall",
"src": "199:23:20"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "187:6:20",
"nodeType": "YulIdentifier",
"src": "187:6:20"
},
"nativeSrc": "187:36:20",
"nodeType": "YulFunctionCall",
"src": "187:36:20"
},
"nativeSrc": "187:36:20",
"nodeType": "YulExpressionStatement",
"src": "187:36:20"
}
]
},
"name": "abi_encode_t_uint64_to_t_uint64_fromStack",
"nativeSrc": "114:115:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "165:5:20",
"nodeType": "YulTypedName",
"src": "165:5:20",
"type": ""
},
{
"name": "pos",
"nativeSrc": "172:3:20",
"nodeType": "YulTypedName",
"src": "172:3:20",
"type": ""
}
],
"src": "114:115:20"
},
{
"body": {
"nativeSrc": "331:122:20",
"nodeType": "YulBlock",
"src": "331:122:20",
"statements": [
{
"nativeSrc": "341:26:20",
"nodeType": "YulAssignment",
"src": "341:26:20",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "353:9:20",
"nodeType": "YulIdentifier",
"src": "353:9:20"
},
{
"kind": "number",
"nativeSrc": "364:2:20",
"nodeType": "YulLiteral",
"src": "364:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "349:3:20",
"nodeType": "YulIdentifier",
"src": "349:3:20"
},
"nativeSrc": "349:18:20",
"nodeType": "YulFunctionCall",
"src": "349:18:20"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "341:4:20",
"nodeType": "YulIdentifier",
"src": "341:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "419:6:20",
"nodeType": "YulIdentifier",
"src": "419:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "432:9:20",
"nodeType": "YulIdentifier",
"src": "432:9:20"
},
{
"kind": "number",
"nativeSrc": "443:1:20",
"nodeType": "YulLiteral",
"src": "443:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "428:3:20",
"nodeType": "YulIdentifier",
"src": "428:3:20"
},
"nativeSrc": "428:17:20",
"nodeType": "YulFunctionCall",
"src": "428:17:20"
}
],
"functionName": {
"name": "abi_encode_t_uint64_to_t_uint64_fromStack",
"nativeSrc": "377:41:20",
"nodeType": "YulIdentifier",
"src": "377:41:20"
},
"nativeSrc": "377:69:20",
"nodeType": "YulFunctionCall",
"src": "377:69:20"
},
"nativeSrc": "377:69:20",
"nodeType": "YulExpressionStatement",
"src": "377:69:20"
}
]
},
"name": "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed",
"nativeSrc": "235:218:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "303:9:20",
"nodeType": "YulTypedName",
"src": "303:9:20",
"type": ""
},
{
"name": "value0",
"nativeSrc": "315:6:20",
"nodeType": "YulTypedName",
"src": "315:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "326:4:20",
"nodeType": "YulTypedName",
"src": "326:4:20",
"type": ""
}
],
"src": "235:218:20"
}
]
},
"contents": "{\n\n function cleanup_t_uint64(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffff)\n }\n\n function abi_encode_t_uint64_to_t_uint64_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint64(value))\n }\n\n function abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value0, add(headStart, 0))\n\n }\n\n}\n",
"id": 20,
"language": "Yul",
"name": "#utility.yul"
}
],
"linkReferences": {},
"object": "60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801562000043575f80fd5b50620000546200005a60201b60201c565b620001c4565b5f6200006b6200015e60201b60201c565b9050805f0160089054906101000a900460ff1615620000b6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146200015b5767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051620001529190620001a9565b60405180910390a15b50565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b5f67ffffffffffffffff82169050919050565b620001a38162000185565b82525050565b5f602082019050620001be5f83018462000198565b92915050565b608051613225620001eb5f395f8181611378015281816113cd015261158701526132255ff3fe60806040526004361061014a575f3560e01c806370a08231116100b5578063ad3cb1cc1161006e578063ad3cb1cc1461045c578063b88d4fde14610486578063c4d66de8146104ae578063c87b56dd146104d6578063e985e9c514610512578063f2fde38b1461054e5761014a565b806370a0823114610366578063715018a6146103a25780638da5cb5b146103b857806395d89b41146103e2578063a14481941461040c578063a22cb465146104345761014a565b806342842e0e1161010757806342842e0e146102685780634af104b4146102905780634bf365df146102ba5780634f1ef286146102e457806352d1902d146103005780636352211e1461032a5761014a565b806301ffc9a71461014e57806306fdde031461018a578063081812fc146101b4578063095ea7b3146101f057806323b872dd14610218578063285d70d414610240575b5f80fd5b348015610159575f80fd5b50610174600480360381019061016f9190612622565b610576565b6040516101819190612667565b60405180910390f35b348015610195575f80fd5b5061019e610657565b6040516101ab919061270a565b60405180910390f35b3480156101bf575f80fd5b506101da60048036038101906101d5919061275d565b6106f4565b6040516101e791906127c7565b60405180910390f35b3480156101fb575f80fd5b506102166004803603810190610211919061280a565b61070f565b005b348015610223575f80fd5b5061023e60048036038101906102399190612848565b610725565b005b34801561024b575f80fd5b50610266600480360381019061026191906128c2565b610824565b005b348015610273575f80fd5b5061028e60048036038101906102899190612848565b610847565b005b34801561029b575f80fd5b506102a4610866565b6040516102b191906127c7565b60405180910390f35b3480156102c5575f80fd5b506102ce61088b565b6040516102db9190612667565b60405180910390f35b6102fe60048036038101906102f99190612a19565b61089b565b005b34801561030b575f80fd5b506103146108ba565b6040516103219190612a8b565b60405180910390f35b348015610335575f80fd5b50610350600480360381019061034b919061275d565b6108eb565b60405161035d91906127c7565b60405180910390f35b348015610371575f80fd5b5061038c60048036038101906103879190612aa4565b6108fc565b6040516103999190612ade565b60405180910390f35b3480156103ad575f80fd5b506103b66109c0565b005b3480156103c3575f80fd5b506103cc6109d3565b6040516103d991906127c7565b60405180910390f35b3480156103ed575f80fd5b506103f6610a08565b604051610403919061270a565b60405180910390f35b348015610417575f80fd5b50610432600480360381019061042d919061280a565b610aa6565b005b34801561043f575f80fd5b5061045a60048036038101906104559190612af7565b610b00565b005b348015610467575f80fd5b50610470610b16565b60405161047d919061270a565b60405180910390f35b348015610491575f80fd5b506104ac60048036038101906104a79190612b35565b610b4f565b005b3480156104b9575f80fd5b506104d460048036038101906104cf9190612aa4565b610b6c565b005b3480156104e1575f80fd5b506104fc60048036038101906104f7919061275d565b610dd6565b604051610509919061270a565b60405180910390f35b34801561051d575f80fd5b5061053860048036038101906105339190612bb5565b610e3c565b6040516105459190612667565b60405180910390f35b348015610559575f80fd5b50610574600480360381019061056f9190612aa4565b610ed8565b005b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610650575061064f82610f5c565b5b9050919050565b60605f610662610fc5565b9050805f01805461067290612c20565b80601f016020809104026020016040519081016040528092919081815260200182805461069e90612c20565b80156106e95780601f106106c0576101008083540402835291602001916106e9565b820191905f5260205f20905b8154815290600101906020018083116106cc57829003601f168201915b505050505091505090565b5f6106fe82610fec565b5061070882611072565b9050919050565b610721828261071c6110b9565b6110c0565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610795575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161078c91906127c7565b60405180910390fd5b5f6107a883836107a36110b9565b6110d2565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461081e578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161081593929190612c50565b60405180910390fd5b50505050565b61082c6112ef565b805f806101000a81548160ff02191690831515021790555050565b61086183838360405180602001604052805f815250610b4f565b505050565b5f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8054906101000a900460ff1681565b6108a3611376565b6108ac8261145c565b6108b68282611467565b5050565b5f6108c3611585565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b5f6108f582610fec565b9050919050565b5f80610906610fc5565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610978575f6040517f89c62b6400000000000000000000000000000000000000000000000000000000815260040161096f91906127c7565b60405180910390fd5b806003015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054915050919050565b6109c86112ef565b6109d15f61160c565b565b5f806109dd6116dd565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b60605f610a13610fc5565b9050806001018054610a2490612c20565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5090612c20565b8015610a9b5780601f10610a7257610100808354040283529160200191610a9b565b820191905f5260205f20905b815481529060010190602001808311610a7e57829003601f168201915b505050505091505090565b5f8054906101000a900460ff16610af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae990612ccf565b60405180910390fd5b610afc8282611704565b5050565b610b12610b0b6110b9565b8383611721565b5050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b610b5a848484610725565b610b6684848484611898565b50505050565b5f610b75611a4a565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f808267ffffffffffffffff16148015610bbd5750825b90505f60018367ffffffffffffffff16148015610bf057505f3073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015610bfe575080155b15610c35576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315610c82576001855f0160086101000a81548160ff0219169083151502179055505b610cf66040518060400160405280600781526020017f4d79546f6b656e000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d544b0000000000000000000000000000000000000000000000000000000000815250611a71565b610cff86611a87565b610d07611a9b565b60015f806101000a81548160ff0219169083151502179055507310964bf243f3318bfbaa87060cdd5a7fe7a546015f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508315610dce575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26001604051610dc59190612d42565b60405180910390a15b505050505050565b6060610de182610fec565b505f610deb611aa5565b90505f815111610e095760405180602001604052805f815250610e34565b80610e1384611abb565b604051602001610e24929190612d95565b6040516020818303038152906040525b915050919050565b5f80610e46610fc5565b9050806005015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1691505092915050565b610ee06112ef565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f50575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610f4791906127c7565b60405180910390fd5b610f598161160c565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300905090565b5f80610ff783611b85565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361106957826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016110609190612ade565b60405180910390fd5b80915050919050565b5f8061107c610fc5565b9050806004015f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b5f33905090565b6110cd8383836001611bcc565b505050565b5f806110dc610fc5565b90505f6110e885611b85565b90505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461112957611128818587611d99565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111b6576111685f865f80611bcc565b6001826003015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614611237576001826003015f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b85826002015f8781526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480925050509392505050565b6112f76110b9565b73ffffffffffffffffffffffffffffffffffffffff166113156109d3565b73ffffffffffffffffffffffffffffffffffffffff1614611374576113386110b9565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161136b91906127c7565b60405180910390fd5b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148061142357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661140a611e5c565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561145a576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6114646112ef565b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156114cf57506040513d601f19601f820116820180604052508101906114cc9190612de2565b60015b61151057816040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161150791906127c7565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b811461157657806040517faa1d49a400000000000000000000000000000000000000000000000000000000815260040161156d9190612a8b565b60405180910390fd5b6115808383611eaf565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461160a576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f6116156116dd565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b5f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b61171d828260405180602001604052805f815250611f21565b5050565b5f61172a610fc5565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361179c57826040517f5b08ba1800000000000000000000000000000000000000000000000000000000815260040161179391906127c7565b60405180910390fd5b81816005015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318460405161188a9190612667565b60405180910390a350505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115611a44578273ffffffffffffffffffffffffffffffffffffffff1663150b7a026118db6110b9565b8685856040518563ffffffff1660e01b81526004016118fd9493929190612e5f565b6020604051808303815f875af192505050801561193857506040513d601f19601f820116820180604052508101906119359190612ebd565b60015b6119b9573d805f8114611966576040519150601f19603f3d011682016040523d82523d5f602084013e61196b565b606091505b505f8151036119b157836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016119a891906127c7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611a4257836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611a3991906127c7565b60405180910390fd5b505b50505050565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b611a79611f3c565b611a838282611f7c565b5050565b611a8f611f3c565b611a9881611fb7565b50565b611aa3611f3c565b565b606060405180602001604052805f815250905090565b60605f6001611ac98461203b565b0190505f8167ffffffffffffffff811115611ae757611ae66128f5565b5b6040519080825280601f01601f191660200182016040528015611b195781602001600182028036833780820191505090505b5090505f82602001820190505b600115611b7a578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611b6f57611b6e612ee8565b5b0494505f8503611b26575b819350505050919050565b5f80611b8f610fc5565b9050806002015f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b5f611bd5610fc5565b90508180611c0f57505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611d41575f611c1e85610fec565b90505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611c8857508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611c9b5750611c998185610e3c565b155b15611cdd57836040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611cd491906127c7565b60405180910390fd5b8215611d3f57848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b84816004015f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b611da483838361218c565b611e57575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e1857806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611e0f9190612ade565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611e4e929190612f15565b60405180910390fd5b505050565b5f611e887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b61224c565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611eb882612255565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f81511115611f1457611f0e828261231e565b50611f1d565b611f1c61239e565b5b5050565b611f2b83836123da565b611f375f848484611898565b505050565b611f446124cd565b611f7a576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611f84611f3c565b5f611f8d610fc5565b905082815f019081611f9f91906130d0565b5081816001019081611fb191906130d0565b50505050565b611fbf611f3c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361202f575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161202691906127c7565b60405180910390fd5b6120388161160c565b50565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612097577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161208d5761208c612ee8565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106120d4576d04ee2d6d415b85acef810000000083816120ca576120c9612ee8565b5b0492506020810190505b662386f26fc10000831061210357662386f26fc1000083816120f9576120f8612ee8565b5b0492506010810190505b6305f5e100831061212c576305f5e100838161212257612121612ee8565b5b0492506008810190505b612710831061215157612710838161214757612146612ee8565b5b0492506004810190505b60648310612174576064838161216a57612169612ee8565b5b0492506002810190505b600a8310612183576001810190505b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561224357508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061220457506122038484610e3c565b5b8061224257508273ffffffffffffffffffffffffffffffffffffffff1661222a83611072565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b036122b057806040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016122a791906127c7565b60405180910390fd5b806122dc7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b61224c565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff168460405161234791906131d9565b5f60405180830381855af49150503d805f811461237f576040519150601f19603f3d011682016040523d82523d5f602084013e612384565b606091505b50915091506123948583836124eb565b9250505092915050565b5f3411156123d8576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361244a575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161244191906127c7565b60405180910390fd5b5f61245683835f6110d2565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146124c8575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016124bf91906127c7565b60405180910390fd5b505050565b5f6124d6611a4a565b5f0160089054906101000a900460ff16905090565b606082612500576124fb82612578565b612570565b5f825114801561252657505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561256857836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161255f91906127c7565b60405180910390fd5b819050612571565b5b9392505050565b5f8151111561258a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612601816125cd565b811461260b575f80fd5b50565b5f8135905061261c816125f8565b92915050565b5f60208284031215612637576126366125c5565b5b5f6126448482850161260e565b91505092915050565b5f8115159050919050565b6126618161264d565b82525050565b5f60208201905061267a5f830184612658565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156126b757808201518184015260208101905061269c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6126dc82612680565b6126e6818561268a565b93506126f681856020860161269a565b6126ff816126c2565b840191505092915050565b5f6020820190508181035f83015261272281846126d2565b905092915050565b5f819050919050565b61273c8161272a565b8114612746575f80fd5b50565b5f8135905061275781612733565b92915050565b5f60208284031215612772576127716125c5565b5b5f61277f84828501612749565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6127b182612788565b9050919050565b6127c1816127a7565b82525050565b5f6020820190506127da5f8301846127b8565b92915050565b6127e9816127a7565b81146127f3575f80fd5b50565b5f81359050612804816127e0565b92915050565b5f80604083850312156128205761281f6125c5565b5b5f61282d858286016127f6565b925050602061283e85828601612749565b9150509250929050565b5f805f6060848603121561285f5761285e6125c5565b5b5f61286c868287016127f6565b935050602061287d868287016127f6565b925050604061288e86828701612749565b9150509250925092565b6128a18161264d565b81146128ab575f80fd5b50565b5f813590506128bc81612898565b92915050565b5f602082840312156128d7576128d66125c5565b5b5f6128e4848285016128ae565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61292b826126c2565b810181811067ffffffffffffffff8211171561294a576129496128f5565b5b80604052505050565b5f61295c6125bc565b90506129688282612922565b919050565b5f67ffffffffffffffff821115612987576129866128f5565b5b612990826126c2565b9050602081019050919050565b828183375f83830152505050565b5f6129bd6129b88461296d565b612953565b9050828152602081018484840111156129d9576129d86128f1565b5b6129e484828561299d565b509392505050565b5f82601f830112612a00576129ff6128ed565b5b8135612a108482602086016129ab565b91505092915050565b5f8060408385031215612a2f57612a2e6125c5565b5b5f612a3c858286016127f6565b925050602083013567ffffffffffffffff811115612a5d57612a5c6125c9565b5b612a69858286016129ec565b9150509250929050565b5f819050919050565b612a8581612a73565b82525050565b5f602082019050612a9e5f830184612a7c565b92915050565b5f60208284031215612ab957612ab86125c5565b5b5f612ac6848285016127f6565b91505092915050565b612ad88161272a565b82525050565b5f602082019050612af15f830184612acf565b92915050565b5f8060408385031215612b0d57612b0c6125c5565b5b5f612b1a858286016127f6565b9250506020612b2b858286016128ae565b9150509250929050565b5f805f8060808587031215612b4d57612b4c6125c5565b5b5f612b5a878288016127f6565b9450506020612b6b878288016127f6565b9350506040612b7c87828801612749565b925050606085013567ffffffffffffffff811115612b9d57612b9c6125c9565b5b612ba9878288016129ec565b91505092959194509250565b5f8060408385031215612bcb57612bca6125c5565b5b5f612bd8858286016127f6565b9250506020612be9858286016127f6565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612c3757607f821691505b602082108103612c4a57612c49612bf3565b5b50919050565b5f606082019050612c635f8301866127b8565b612c706020830185612acf565b612c7d60408301846127b8565b949350505050565b7f4d696e74696e67206973206e6f7420656e61626c6564000000000000000000005f82015250565b5f612cb960168361268a565b9150612cc482612c85565b602082019050919050565b5f6020820190508181035f830152612ce681612cad565b9050919050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f612d2c612d27612d2284612ced565b612d09565b612cf6565b9050919050565b612d3c81612d12565b82525050565b5f602082019050612d555f830184612d33565b92915050565b5f81905092915050565b5f612d6f82612680565b612d798185612d5b565b9350612d8981856020860161269a565b80840191505092915050565b5f612da08285612d65565b9150612dac8284612d65565b91508190509392505050565b612dc181612a73565b8114612dcb575f80fd5b50565b5f81519050612ddc81612db8565b92915050565b5f60208284031215612df757612df66125c5565b5b5f612e0484828501612dce565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f612e3182612e0d565b612e3b8185612e17565b9350612e4b81856020860161269a565b612e54816126c2565b840191505092915050565b5f608082019050612e725f8301876127b8565b612e7f60208301866127b8565b612e8c6040830185612acf565b8181036060830152612e9e8184612e27565b905095945050505050565b5f81519050612eb7816125f8565b92915050565b5f60208284031215612ed257612ed16125c5565b5b5f612edf84828501612ea9565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f604082019050612f285f8301856127b8565b612f356020830184612acf565b9392505050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612f987fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612f5d565b612fa28683612f5d565b95508019841693508086168417925050509392505050565b5f612fd4612fcf612fca8461272a565b612d09565b61272a565b9050919050565b5f819050919050565b612fed83612fba565b613001612ff982612fdb565b848454612f69565b825550505050565b5f90565b613015613009565b613020818484612fe4565b505050565b5b81811015613043576130385f8261300d565b600181019050613026565b5050565b601f8211156130885761305981612f3c565b61306284612f4e565b81016020851015613071578190505b61308561307d85612f4e565b830182613025565b50505b505050565b5f82821c905092915050565b5f6130a85f198460080261308d565b1980831691505092915050565b5f6130c08383613099565b9150826002028217905092915050565b6130d982612680565b67ffffffffffffffff8111156130f2576130f16128f5565b5b6130fc8254612c20565b613107828285613047565b5f60209050601f831160018114613138575f8415613126578287015190505b61313085826130b5565b865550613197565b601f19841661314686612f3c565b5f5b8281101561316d57848901518255600182019150602085019450602081019050613148565b8683101561318a5784890151613186601f891682613099565b8355505b6001600288020188555050505b505050505050565b5f81905092915050565b5f6131b382612e0d565b6131bd818561319f565b93506131cd81856020860161269a565b80840191505092915050565b5f6131e482846131a9565b91508190509291505056fea2646970667358221220e8f5ce65d6667c13c0daef95afbf62e8e580731154835816a64fea207cf2053864736f6c63430008160033",
"opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP CALLVALUE DUP1 ISZERO PUSH3 0x43 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH3 0x54 PUSH3 0x5A PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1C4 JUMP JUMPDEST PUSH0 PUSH3 0x6B PUSH3 0x15E PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP DUP1 PUSH0 ADD PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH3 0xB6 JUMPI PUSH1 0x40 MLOAD PUSH32 0xF92EE8A900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 AND DUP2 PUSH0 ADD PUSH0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND EQ PUSH3 0x15B JUMPI PUSH8 0xFFFFFFFFFFFFFFFF DUP2 PUSH0 ADD PUSH0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH8 0xFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH8 0xFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH3 0x152 SWAP2 SWAP1 PUSH3 0x1A9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP JUMP JUMPDEST PUSH0 PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH3 0x1A3 DUP2 PUSH3 0x185 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH3 0x1BE PUSH0 DUP4 ADD DUP5 PUSH3 0x198 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x3225 PUSH3 0x1EB PUSH0 CODECOPY PUSH0 DUP2 DUP2 PUSH2 0x1378 ADD MSTORE DUP2 DUP2 PUSH2 0x13CD ADD MSTORE PUSH2 0x1587 ADD MSTORE PUSH2 0x3225 PUSH0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x14A JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xB5 JUMPI DUP1 PUSH4 0xAD3CB1CC GT PUSH2 0x6E JUMPI DUP1 PUSH4 0xAD3CB1CC EQ PUSH2 0x45C JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x486 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x4AE JUMPI DUP1 PUSH4 0xC87B56DD EQ PUSH2 0x4D6 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x512 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x54E JUMPI PUSH2 0x14A JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x3A2 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x3B8 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x3E2 JUMPI DUP1 PUSH4 0xA1448194 EQ PUSH2 0x40C JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x434 JUMPI PUSH2 0x14A JUMP JUMPDEST DUP1 PUSH4 0x42842E0E GT PUSH2 0x107 JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0x4AF104B4 EQ PUSH2 0x290 JUMPI DUP1 PUSH4 0x4BF365DF EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x2E4 JUMPI DUP1 PUSH4 0x52D1902D EQ PUSH2 0x300 JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x32A JUMPI PUSH2 0x14A JUMP JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x14E JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x1B4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1F0 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x218 JUMPI DUP1 PUSH4 0x285D70D4 EQ PUSH2 0x240 JUMPI JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x159 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x174 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x16F SWAP2 SWAP1 PUSH2 0x2622 JUMP JUMPDEST PUSH2 0x576 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x181 SWAP2 SWAP1 PUSH2 0x2667 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x195 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH2 0x657 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1AB SWAP2 SWAP1 PUSH2 0x270A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BF JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DA PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1D5 SWAP2 SWAP1 PUSH2 0x275D JUMP JUMPDEST PUSH2 0x6F4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E7 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FB JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x216 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x211 SWAP2 SWAP1 PUSH2 0x280A JUMP JUMPDEST PUSH2 0x70F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x223 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x23E PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x239 SWAP2 SWAP1 PUSH2 0x2848 JUMP JUMPDEST PUSH2 0x725 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24B JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x266 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x261 SWAP2 SWAP1 PUSH2 0x28C2 JUMP JUMPDEST PUSH2 0x824 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x273 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x289 SWAP2 SWAP1 PUSH2 0x2848 JUMP JUMPDEST PUSH2 0x847 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x29B JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A4 PUSH2 0x866 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2B1 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C5 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x2CE PUSH2 0x88B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2DB SWAP2 SWAP1 PUSH2 0x2667 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2FE PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2F9 SWAP2 SWAP1 PUSH2 0x2A19 JUMP JUMPDEST PUSH2 0x89B JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x30B JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x314 PUSH2 0x8BA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x321 SWAP2 SWAP1 PUSH2 0x2A8B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x335 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x350 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x34B SWAP2 SWAP1 PUSH2 0x275D JUMP JUMPDEST PUSH2 0x8EB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x35D SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x371 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x38C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x387 SWAP2 SWAP1 PUSH2 0x2AA4 JUMP JUMPDEST PUSH2 0x8FC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x399 SWAP2 SWAP1 PUSH2 0x2ADE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3AD JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x3B6 PUSH2 0x9C0 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C3 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CC PUSH2 0x9D3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3D9 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3ED JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F6 PUSH2 0xA08 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x403 SWAP2 SWAP1 PUSH2 0x270A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x417 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x432 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x42D SWAP2 SWAP1 PUSH2 0x280A JUMP JUMPDEST PUSH2 0xAA6 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x43F JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x45A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2AF7 JUMP JUMPDEST PUSH2 0xB00 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x467 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x470 PUSH2 0xB16 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x47D SWAP2 SWAP1 PUSH2 0x270A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x491 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x4AC PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4A7 SWAP2 SWAP1 PUSH2 0x2B35 JUMP JUMPDEST PUSH2 0xB4F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4B9 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x4D4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4CF SWAP2 SWAP1 PUSH2 0x2AA4 JUMP JUMPDEST PUSH2 0xB6C JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E1 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x4FC PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4F7 SWAP2 SWAP1 PUSH2 0x275D JUMP JUMPDEST PUSH2 0xDD6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x509 SWAP2 SWAP1 PUSH2 0x270A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51D JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x538 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x533 SWAP2 SWAP1 PUSH2 0x2BB5 JUMP JUMPDEST PUSH2 0xE3C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x545 SWAP2 SWAP1 PUSH2 0x2667 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x559 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x574 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x56F SWAP2 SWAP1 PUSH2 0x2AA4 JUMP JUMPDEST PUSH2 0xED8 JUMP JUMPDEST STOP JUMPDEST PUSH0 PUSH32 0x80AC58CD00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0x640 JUMPI POP PUSH32 0x5B5E139F00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST DUP1 PUSH2 0x650 JUMPI POP PUSH2 0x64F DUP3 PUSH2 0xF5C JUMP JUMPDEST JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH0 PUSH2 0x662 PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH0 ADD DUP1 SLOAD PUSH2 0x672 SWAP1 PUSH2 0x2C20 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 0x69E SWAP1 PUSH2 0x2C20 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x6E9 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x6C0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6E9 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x6CC JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH0 PUSH2 0x6FE DUP3 PUSH2 0xFEC JUMP JUMPDEST POP PUSH2 0x708 DUP3 PUSH2 0x1072 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x721 DUP3 DUP3 PUSH2 0x71C PUSH2 0x10B9 JUMP JUMPDEST PUSH2 0x10C0 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0x795 JUMPI PUSH0 PUSH1 0x40 MLOAD PUSH32 0x64A0AE9200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x78C SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 PUSH2 0x7A8 DUP4 DUP4 PUSH2 0x7A3 PUSH2 0x10B9 JUMP JUMPDEST PUSH2 0x10D2 JUMP JUMPDEST SWAP1 POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x81E JUMPI DUP4 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH32 0x64283D7B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x815 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2C50 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x82C PUSH2 0x12EF JUMP JUMPDEST DUP1 PUSH0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH2 0x861 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH0 DUP2 MSTORE POP PUSH2 0xB4F JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH0 PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x8A3 PUSH2 0x1376 JUMP JUMPDEST PUSH2 0x8AC DUP3 PUSH2 0x145C JUMP JUMPDEST PUSH2 0x8B6 DUP3 DUP3 PUSH2 0x1467 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH0 PUSH2 0x8C3 PUSH2 0x1585 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH0 SHL SWAP1 POP SWAP1 JUMP JUMPDEST PUSH0 PUSH2 0x8F5 DUP3 PUSH2 0xFEC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x906 PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0x978 JUMPI PUSH0 PUSH1 0x40 MLOAD PUSH32 0x89C62B6400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x96F SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x3 ADD PUSH0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 SLOAD SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x9C8 PUSH2 0x12EF JUMP JUMPDEST PUSH2 0x9D1 PUSH0 PUSH2 0x160C JUMP JUMPDEST JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x9DD PUSH2 0x16DD JUMP JUMPDEST SWAP1 POP DUP1 PUSH0 ADD PUSH0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH0 PUSH2 0xA13 PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 ADD DUP1 SLOAD PUSH2 0xA24 SWAP1 PUSH2 0x2C20 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 0xA50 SWAP1 PUSH2 0x2C20 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xA9B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xA72 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xA9B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA7E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH2 0xAF2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAE9 SWAP1 PUSH2 0x2CCF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xAFC DUP3 DUP3 PUSH2 0x1704 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xB12 PUSH2 0xB0B PUSH2 0x10B9 JUMP JUMPDEST DUP4 DUP4 PUSH2 0x1721 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x352E302E30000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0xB5A DUP5 DUP5 DUP5 PUSH2 0x725 JUMP JUMPDEST PUSH2 0xB66 DUP5 DUP5 DUP5 DUP5 PUSH2 0x1898 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH0 PUSH2 0xB75 PUSH2 0x1A4A JUMP JUMPDEST SWAP1 POP PUSH0 DUP2 PUSH0 ADD PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO SWAP1 POP PUSH0 DUP3 PUSH0 ADD PUSH0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP1 POP PUSH0 DUP1 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF AND EQ DUP1 ISZERO PUSH2 0xBBD JUMPI POP DUP3 JUMPDEST SWAP1 POP PUSH0 PUSH1 0x1 DUP4 PUSH8 0xFFFFFFFFFFFFFFFF AND EQ DUP1 ISZERO PUSH2 0xBF0 JUMPI POP PUSH0 ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE EQ JUMPDEST SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0xBFE JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0xC35 JUMPI PUSH1 0x40 MLOAD PUSH32 0xF92EE8A900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP6 PUSH0 ADD PUSH0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH8 0xFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH8 0xFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP4 ISZERO PUSH2 0xC82 JUMPI PUSH1 0x1 DUP6 PUSH0 ADD PUSH1 0x8 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP JUMPDEST PUSH2 0xCF6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x7 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4D79546F6B656E00000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4D544B0000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH2 0x1A71 JUMP JUMPDEST PUSH2 0xCFF DUP7 PUSH2 0x1A87 JUMP JUMPDEST PUSH2 0xD07 PUSH2 0x1A9B JUMP JUMPDEST PUSH1 0x1 PUSH0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH20 0x10964BF243F3318BFBAA87060CDD5A7FE7A54601 PUSH0 PUSH1 0x1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP4 ISZERO PUSH2 0xDCE JUMPI PUSH0 DUP6 PUSH0 ADD PUSH1 0x8 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 PUSH1 0x1 PUSH1 0x40 MLOAD PUSH2 0xDC5 SWAP2 SWAP1 PUSH2 0x2D42 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xDE1 DUP3 PUSH2 0xFEC JUMP JUMPDEST POP PUSH0 PUSH2 0xDEB PUSH2 0x1AA5 JUMP JUMPDEST SWAP1 POP PUSH0 DUP2 MLOAD GT PUSH2 0xE09 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH0 DUP2 MSTORE POP PUSH2 0xE34 JUMP JUMPDEST DUP1 PUSH2 0xE13 DUP5 PUSH2 0x1ABB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xE24 SWAP3 SWAP2 SWAP1 PUSH2 0x2D95 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE JUMPDEST SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xE46 PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x5 ADD PUSH0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xEE0 PUSH2 0x12EF JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0xF50 JUMPI PUSH0 PUSH1 0x40 MLOAD PUSH32 0x1E4FBDF700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF47 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF59 DUP2 PUSH2 0x160C JUMP JUMPDEST POP JUMP JUMPDEST PUSH0 PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH32 0x80BB2B638CC20BC4D0A60D66940F3AB4A00C1D7B313497CA82FB0B4AB0079300 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xFF7 DUP4 PUSH2 0x1B85 JUMP JUMPDEST SWAP1 POP PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0x1069 JUMPI DUP3 PUSH1 0x40 MLOAD PUSH32 0x7E27328900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1060 SWAP2 SWAP1 PUSH2 0x2ADE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x107C PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x4 ADD PUSH0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 CALLER SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x10CD DUP4 DUP4 DUP4 PUSH1 0x1 PUSH2 0x1BCC JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x10DC PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP PUSH0 PUSH2 0x10E8 DUP6 PUSH2 0x1B85 JUMP JUMPDEST SWAP1 POP PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1129 JUMPI PUSH2 0x1128 DUP2 DUP6 DUP8 PUSH2 0x1D99 JUMP JUMPDEST JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x11B6 JUMPI PUSH2 0x1168 PUSH0 DUP7 PUSH0 DUP1 PUSH2 0x1BCC JUMP JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x3 ADD PUSH0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 DUP3 DUP3 SLOAD SUB SWAP3 POP POP DUP2 SWAP1 SSTORE POP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1237 JUMPI PUSH1 0x1 DUP3 PUSH1 0x3 ADD PUSH0 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 DUP3 DUP3 SLOAD ADD SWAP3 POP POP DUP2 SWAP1 SSTORE POP JUMPDEST DUP6 DUP3 PUSH1 0x2 ADD PUSH0 DUP8 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP5 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 DUP1 SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x12F7 PUSH2 0x10B9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1315 PUSH2 0x9D3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1374 JUMPI PUSH2 0x1338 PUSH2 0x10B9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x136B SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x1423 JUMPI POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x140A PUSH2 0x1E5C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST ISZERO PUSH2 0x145A JUMPI PUSH1 0x40 MLOAD PUSH32 0xE07C8DBA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH2 0x1464 PUSH2 0x12EF JUMP JUMPDEST POP JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x52D1902D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x14CF JUMPI POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14CC SWAP2 SWAP1 PUSH2 0x2DE2 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x1510 JUMPI DUP2 PUSH1 0x40 MLOAD PUSH32 0x4C9C8CE300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1507 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH0 SHL DUP2 EQ PUSH2 0x1576 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH32 0xAA1D49A400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156D SWAP2 SWAP1 PUSH2 0x2A8B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1580 DUP4 DUP4 PUSH2 0x1EAF JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x160A JUMPI PUSH1 0x40 MLOAD PUSH32 0xE07C8DBA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH0 PUSH2 0x1615 PUSH2 0x16DD JUMP JUMPDEST SWAP1 POP PUSH0 DUP2 PUSH0 ADD PUSH0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP3 DUP3 PUSH0 ADD PUSH0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH0 PUSH32 0x9016D09D72D40FDAE2FD8CEAC6B6234C7706214FD39C1CD1E609A0528C199300 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x171D DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH0 DUP2 MSTORE POP PUSH2 0x1F21 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH0 PUSH2 0x172A PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0x179C JUMPI DUP3 PUSH1 0x40 MLOAD PUSH32 0x5B08BA1800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1793 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 DUP2 PUSH1 0x5 ADD PUSH0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 DUP5 PUSH1 0x40 MLOAD PUSH2 0x188A SWAP2 SWAP1 PUSH2 0x2667 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE GT ISZERO PUSH2 0x1A44 JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x150B7A02 PUSH2 0x18DB PUSH2 0x10B9 JUMP JUMPDEST DUP7 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x18FD SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2E5F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1938 JUMPI POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1935 SWAP2 SWAP1 PUSH2 0x2EBD JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x19B9 JUMPI RETURNDATASIZE DUP1 PUSH0 DUP2 EQ PUSH2 0x1966 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x196B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP PUSH0 DUP2 MLOAD SUB PUSH2 0x19B1 JUMPI DUP4 PUSH1 0x40 MLOAD PUSH32 0x64A0AE9200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19A8 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP2 PUSH1 0x20 ADD REVERT JUMPDEST PUSH4 0x150B7A02 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0x1A42 JUMPI DUP4 PUSH1 0x40 MLOAD PUSH32 0x64A0AE9200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A39 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH0 PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1A79 PUSH2 0x1F3C JUMP JUMPDEST PUSH2 0x1A83 DUP3 DUP3 PUSH2 0x1F7C JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1A8F PUSH2 0x1F3C JUMP JUMPDEST PUSH2 0x1A98 DUP2 PUSH2 0x1FB7 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1AA3 PUSH2 0x1F3C JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH0 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH0 PUSH1 0x1 PUSH2 0x1AC9 DUP5 PUSH2 0x203B JUMP JUMPDEST ADD SWAP1 POP PUSH0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1AE7 JUMPI PUSH2 0x1AE6 PUSH2 0x28F5 JUMP JUMPDEST 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 0x1B19 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x1 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP PUSH0 DUP3 PUSH1 0x20 ADD DUP3 ADD SWAP1 POP JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x1B7A JUMPI DUP1 DUP1 PUSH1 0x1 SWAP1 SUB SWAP2 POP POP PUSH32 0x3031323334353637383961626364656600000000000000000000000000000000 PUSH1 0xA DUP7 MOD BYTE DUP2 MSTORE8 PUSH1 0xA DUP6 DUP2 PUSH2 0x1B6F JUMPI PUSH2 0x1B6E PUSH2 0x2EE8 JUMP JUMPDEST JUMPDEST DIV SWAP5 POP PUSH0 DUP6 SUB PUSH2 0x1B26 JUMPI JUMPDEST DUP2 SWAP4 POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x1B8F PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x2 ADD PUSH0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x1BD5 PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP DUP2 DUP1 PUSH2 0x1C0F JUMPI POP PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST ISZERO PUSH2 0x1D41 JUMPI PUSH0 PUSH2 0x1C1E DUP6 PUSH2 0xFEC JUMP JUMPDEST SWAP1 POP PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x1C88 JUMPI POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1C9B JUMPI POP PUSH2 0x1C99 DUP2 DUP6 PUSH2 0xE3C JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x1CDD JUMPI DUP4 PUSH1 0x40 MLOAD PUSH32 0xA9FBF51F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1CD4 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 ISZERO PUSH2 0x1D3F JUMPI DUP5 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 JUMPDEST POP JUMPDEST DUP5 DUP2 PUSH1 0x4 ADD PUSH0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1DA4 DUP4 DUP4 DUP4 PUSH2 0x218C JUMP JUMPDEST PUSH2 0x1E57 JUMPI PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0x1E18 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH32 0x7E27328900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1E0F SWAP2 SWAP1 PUSH2 0x2ADE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 DUP2 PUSH1 0x40 MLOAD PUSH32 0x177E802F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1E4E SWAP3 SWAP2 SWAP1 PUSH2 0x2F15 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH0 PUSH2 0x1E88 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH0 SHL PUSH2 0x224C JUMP JUMPDEST PUSH0 ADD PUSH0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1EB8 DUP3 PUSH2 0x2255 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH0 DUP2 MLOAD GT ISZERO PUSH2 0x1F14 JUMPI PUSH2 0x1F0E DUP3 DUP3 PUSH2 0x231E JUMP JUMPDEST POP PUSH2 0x1F1D JUMP JUMPDEST PUSH2 0x1F1C PUSH2 0x239E JUMP JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1F2B DUP4 DUP4 PUSH2 0x23DA JUMP JUMPDEST PUSH2 0x1F37 PUSH0 DUP5 DUP5 DUP5 PUSH2 0x1898 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1F44 PUSH2 0x24CD JUMP JUMPDEST PUSH2 0x1F7A JUMPI PUSH1 0x40 MLOAD PUSH32 0xD7E6BCF800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH2 0x1F84 PUSH2 0x1F3C JUMP JUMPDEST PUSH0 PUSH2 0x1F8D PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 PUSH0 ADD SWAP1 DUP2 PUSH2 0x1F9F SWAP2 SWAP1 PUSH2 0x30D0 JUMP JUMPDEST POP DUP2 DUP2 PUSH1 0x1 ADD SWAP1 DUP2 PUSH2 0x1FB1 SWAP2 SWAP1 PUSH2 0x30D0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x1FBF PUSH2 0x1F3C JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0x202F JUMPI PUSH0 PUSH1 0x40 MLOAD PUSH32 0x1E4FBDF700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2026 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2038 DUP2 PUSH2 0x160C JUMP JUMPDEST POP JUMP JUMPDEST PUSH0 DUP1 PUSH0 SWAP1 POP PUSH27 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F010000000000000000 DUP4 LT PUSH2 0x2097 JUMPI PUSH27 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F010000000000000000 DUP4 DUP2 PUSH2 0x208D JUMPI PUSH2 0x208C PUSH2 0x2EE8 JUMP JUMPDEST JUMPDEST DIV SWAP3 POP PUSH1 0x40 DUP2 ADD SWAP1 POP JUMPDEST PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 LT PUSH2 0x20D4 JUMPI PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 DUP2 PUSH2 0x20CA JUMPI PUSH2 0x20C9 PUSH2 0x2EE8 JUMP JUMPDEST JUMPDEST DIV SWAP3 POP PUSH1 0x20 DUP2 ADD SWAP1 POP JUMPDEST PUSH7 0x2386F26FC10000 DUP4 LT PUSH2 0x2103 JUMPI PUSH7 0x2386F26FC10000 DUP4 DUP2 PUSH2 0x20F9 JUMPI PUSH2 0x20F8 PUSH2 0x2EE8 JUMP JUMPDEST JUMPDEST DIV SWAP3 POP PUSH1 0x10 DUP2 ADD SWAP1 POP JUMPDEST PUSH4 0x5F5E100 DUP4 LT PUSH2 0x212C JUMPI PUSH4 0x5F5E100 DUP4 DUP2 PUSH2 0x2122 JUMPI PUSH2 0x2121 PUSH2 0x2EE8 JUMP JUMPDEST JUMPDEST DIV SWAP3 POP PUSH1 0x8 DUP2 ADD SWAP1 POP JUMPDEST PUSH2 0x2710 DUP4 LT PUSH2 0x2151 JUMPI PUSH2 0x2710 DUP4 DUP2 PUSH2 0x2147 JUMPI PUSH2 0x2146 PUSH2 0x2EE8 JUMP JUMPDEST JUMPDEST DIV SWAP3 POP PUSH1 0x4 DUP2 ADD SWAP1 POP JUMPDEST PUSH1 0x64 DUP4 LT PUSH2 0x2174 JUMPI PUSH1 0x64 DUP4 DUP2 PUSH2 0x216A JUMPI PUSH2 0x2169 PUSH2 0x2EE8 JUMP JUMPDEST JUMPDEST DIV SWAP3 POP PUSH1 0x2 DUP2 ADD SWAP1 POP JUMPDEST PUSH1 0xA DUP4 LT PUSH2 0x2183 JUMPI PUSH1 0x1 DUP2 ADD SWAP1 POP JUMPDEST DUP1 SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2243 JUMPI POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x2204 JUMPI POP PUSH2 0x2203 DUP5 DUP5 PUSH2 0xE3C JUMP JUMPDEST JUMPDEST DUP1 PUSH2 0x2242 JUMPI POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x222A DUP4 PUSH2 0x1072 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE SUB PUSH2 0x22B0 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH32 0x4C9C8CE300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22A7 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x22DC PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH0 SHL PUSH2 0x224C JUMP JUMPDEST PUSH0 ADD PUSH0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x60 PUSH0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x2347 SWAP2 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP2 EQ PUSH2 0x237F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2384 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2394 DUP6 DUP4 DUP4 PUSH2 0x24EB JUMP JUMPDEST SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 CALLVALUE GT ISZERO PUSH2 0x23D8 JUMPI PUSH1 0x40 MLOAD PUSH32 0xB398979F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0x244A JUMPI PUSH0 PUSH1 0x40 MLOAD PUSH32 0x64A0AE9200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2441 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 PUSH2 0x2456 DUP4 DUP4 PUSH0 PUSH2 0x10D2 JUMP JUMPDEST SWAP1 POP PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x24C8 JUMPI PUSH0 PUSH1 0x40 MLOAD PUSH32 0x73C6AC6E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x24BF SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH0 PUSH2 0x24D6 PUSH2 0x1A4A JUMP JUMPDEST PUSH0 ADD PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP3 PUSH2 0x2500 JUMPI PUSH2 0x24FB DUP3 PUSH2 0x2578 JUMP JUMPDEST PUSH2 0x2570 JUMP JUMPDEST PUSH0 DUP3 MLOAD EQ DUP1 ISZERO PUSH2 0x2526 JUMPI POP PUSH0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE EQ JUMPDEST ISZERO PUSH2 0x2568 JUMPI DUP4 PUSH1 0x40 MLOAD PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x255F SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 SWAP1 POP PUSH2 0x2571 JUMP JUMPDEST JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 DUP2 MLOAD GT ISZERO PUSH2 0x258A JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2601 DUP2 PUSH2 0x25CD JUMP JUMPDEST DUP2 EQ PUSH2 0x260B JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x261C DUP2 PUSH2 0x25F8 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2637 JUMPI PUSH2 0x2636 PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x2644 DUP5 DUP3 DUP6 ADD PUSH2 0x260E JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2661 DUP2 PUSH2 0x264D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x267A PUSH0 DUP4 ADD DUP5 PUSH2 0x2658 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x26B7 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x269C JUMP JUMPDEST PUSH0 DUP5 DUP5 ADD MSTORE POP POP POP POP JUMP JUMPDEST PUSH0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x26DC DUP3 PUSH2 0x2680 JUMP JUMPDEST PUSH2 0x26E6 DUP2 DUP6 PUSH2 0x268A JUMP JUMPDEST SWAP4 POP PUSH2 0x26F6 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x269A JUMP JUMPDEST PUSH2 0x26FF DUP2 PUSH2 0x26C2 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH0 DUP4 ADD MSTORE PUSH2 0x2722 DUP2 DUP5 PUSH2 0x26D2 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x273C DUP2 PUSH2 0x272A JUMP JUMPDEST DUP2 EQ PUSH2 0x2746 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x2757 DUP2 PUSH2 0x2733 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2772 JUMPI PUSH2 0x2771 PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x277F DUP5 DUP3 DUP6 ADD PUSH2 0x2749 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x27B1 DUP3 PUSH2 0x2788 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x27C1 DUP2 PUSH2 0x27A7 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x27DA PUSH0 DUP4 ADD DUP5 PUSH2 0x27B8 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x27E9 DUP2 PUSH2 0x27A7 JUMP JUMPDEST DUP2 EQ PUSH2 0x27F3 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x2804 DUP2 PUSH2 0x27E0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2820 JUMPI PUSH2 0x281F PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x282D DUP6 DUP3 DUP7 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x283E DUP6 DUP3 DUP7 ADD PUSH2 0x2749 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x285F JUMPI PUSH2 0x285E PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x286C DUP7 DUP3 DUP8 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x287D DUP7 DUP3 DUP8 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x288E DUP7 DUP3 DUP8 ADD PUSH2 0x2749 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x28A1 DUP2 PUSH2 0x264D JUMP JUMPDEST DUP2 EQ PUSH2 0x28AB JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x28BC DUP2 PUSH2 0x2898 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x28D7 JUMPI PUSH2 0x28D6 PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x28E4 DUP5 DUP3 DUP6 ADD PUSH2 0x28AE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x292B DUP3 PUSH2 0x26C2 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x294A JUMPI PUSH2 0x2949 PUSH2 0x28F5 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH0 PUSH2 0x295C PUSH2 0x25BC JUMP JUMPDEST SWAP1 POP PUSH2 0x2968 DUP3 DUP3 PUSH2 0x2922 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x2987 JUMPI PUSH2 0x2986 PUSH2 0x28F5 JUMP JUMPDEST JUMPDEST PUSH2 0x2990 DUP3 PUSH2 0x26C2 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH0 PUSH2 0x29BD PUSH2 0x29B8 DUP5 PUSH2 0x296D JUMP JUMPDEST PUSH2 0x2953 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x29D9 JUMPI PUSH2 0x29D8 PUSH2 0x28F1 JUMP JUMPDEST JUMPDEST PUSH2 0x29E4 DUP5 DUP3 DUP6 PUSH2 0x299D JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2A00 JUMPI PUSH2 0x29FF PUSH2 0x28ED JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2A10 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x29AB JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2A2F JUMPI PUSH2 0x2A2E PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x2A3C DUP6 DUP3 DUP7 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2A5D JUMPI PUSH2 0x2A5C PUSH2 0x25C9 JUMP JUMPDEST JUMPDEST PUSH2 0x2A69 DUP6 DUP3 DUP7 ADD PUSH2 0x29EC JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2A85 DUP2 PUSH2 0x2A73 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2A9E PUSH0 DUP4 ADD DUP5 PUSH2 0x2A7C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2AB9 JUMPI PUSH2 0x2AB8 PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x2AC6 DUP5 DUP3 DUP6 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2AD8 DUP2 PUSH2 0x272A JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2AF1 PUSH0 DUP4 ADD DUP5 PUSH2 0x2ACF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2B0D JUMPI PUSH2 0x2B0C PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x2B1A DUP6 DUP3 DUP7 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2B2B DUP6 DUP3 DUP7 ADD PUSH2 0x28AE JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2B4D JUMPI PUSH2 0x2B4C PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x2B5A DUP8 DUP3 DUP9 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x2B6B DUP8 DUP3 DUP9 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x2B7C DUP8 DUP3 DUP9 ADD PUSH2 0x2749 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2B9D JUMPI PUSH2 0x2B9C PUSH2 0x25C9 JUMP JUMPDEST JUMPDEST PUSH2 0x2BA9 DUP8 DUP3 DUP9 ADD PUSH2 0x29EC JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2BCB JUMPI PUSH2 0x2BCA PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x2BD8 DUP6 DUP3 DUP7 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2BE9 DUP6 DUP3 DUP7 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 PUSH1 0x2 DUP3 DIV SWAP1 POP PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x2C37 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x2C4A JUMPI PUSH2 0x2C49 PUSH2 0x2BF3 JUMP JUMPDEST JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x2C63 PUSH0 DUP4 ADD DUP7 PUSH2 0x27B8 JUMP JUMPDEST PUSH2 0x2C70 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x2ACF JUMP JUMPDEST PUSH2 0x2C7D PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x27B8 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x4D696E74696E67206973206E6F7420656E61626C656400000000000000000000 PUSH0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH0 PUSH2 0x2CB9 PUSH1 0x16 DUP4 PUSH2 0x268A JUMP JUMPDEST SWAP2 POP PUSH2 0x2CC4 DUP3 PUSH2 0x2C85 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH0 DUP4 ADD MSTORE PUSH2 0x2CE6 DUP2 PUSH2 0x2CAD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x2D2C PUSH2 0x2D27 PUSH2 0x2D22 DUP5 PUSH2 0x2CED JUMP JUMPDEST PUSH2 0x2D09 JUMP JUMPDEST PUSH2 0x2CF6 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2D3C DUP2 PUSH2 0x2D12 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2D55 PUSH0 DUP4 ADD DUP5 PUSH2 0x2D33 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x2D6F DUP3 PUSH2 0x2680 JUMP JUMPDEST PUSH2 0x2D79 DUP2 DUP6 PUSH2 0x2D5B JUMP JUMPDEST SWAP4 POP PUSH2 0x2D89 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x269A JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x2DA0 DUP3 DUP6 PUSH2 0x2D65 JUMP JUMPDEST SWAP2 POP PUSH2 0x2DAC DUP3 DUP5 PUSH2 0x2D65 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2DC1 DUP2 PUSH2 0x2A73 JUMP JUMPDEST DUP2 EQ PUSH2 0x2DCB JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 MLOAD SWAP1 POP PUSH2 0x2DDC DUP2 PUSH2 0x2DB8 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2DF7 JUMPI PUSH2 0x2DF6 PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x2E04 DUP5 DUP3 DUP6 ADD PUSH2 0x2DCE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x2E31 DUP3 PUSH2 0x2E0D JUMP JUMPDEST PUSH2 0x2E3B DUP2 DUP6 PUSH2 0x2E17 JUMP JUMPDEST SWAP4 POP PUSH2 0x2E4B DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x269A JUMP JUMPDEST PUSH2 0x2E54 DUP2 PUSH2 0x26C2 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x80 DUP3 ADD SWAP1 POP PUSH2 0x2E72 PUSH0 DUP4 ADD DUP8 PUSH2 0x27B8 JUMP JUMPDEST PUSH2 0x2E7F PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x27B8 JUMP JUMPDEST PUSH2 0x2E8C PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x2ACF JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x2E9E DUP2 DUP5 PUSH2 0x2E27 JUMP JUMPDEST SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH0 DUP2 MLOAD SWAP1 POP PUSH2 0x2EB7 DUP2 PUSH2 0x25F8 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2ED2 JUMPI PUSH2 0x2ED1 PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x2EDF DUP5 DUP3 DUP6 ADD PUSH2 0x2EA9 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x2F28 PUSH0 DUP4 ADD DUP6 PUSH2 0x27B8 JUMP JUMPDEST PUSH2 0x2F35 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2ACF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP DUP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH1 0x20 PUSH1 0x1F DUP4 ADD DIV SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP3 DUP3 SHL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x8 DUP4 MUL PUSH2 0x2F98 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH2 0x2F5D JUMP JUMPDEST PUSH2 0x2FA2 DUP7 DUP4 PUSH2 0x2F5D JUMP JUMPDEST SWAP6 POP DUP1 NOT DUP5 AND SWAP4 POP DUP1 DUP7 AND DUP5 OR SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 PUSH2 0x2FD4 PUSH2 0x2FCF PUSH2 0x2FCA DUP5 PUSH2 0x272A JUMP JUMPDEST PUSH2 0x2D09 JUMP JUMPDEST PUSH2 0x272A JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2FED DUP4 PUSH2 0x2FBA JUMP JUMPDEST PUSH2 0x3001 PUSH2 0x2FF9 DUP3 PUSH2 0x2FDB JUMP JUMPDEST DUP5 DUP5 SLOAD PUSH2 0x2F69 JUMP JUMPDEST DUP3 SSTORE POP POP POP POP JUMP JUMPDEST PUSH0 SWAP1 JUMP JUMPDEST PUSH2 0x3015 PUSH2 0x3009 JUMP JUMPDEST PUSH2 0x3020 DUP2 DUP5 DUP5 PUSH2 0x2FE4 JUMP JUMPDEST POP POP POP JUMP JUMPDEST JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3043 JUMPI PUSH2 0x3038 PUSH0 DUP3 PUSH2 0x300D JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x3026 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x3088 JUMPI PUSH2 0x3059 DUP2 PUSH2 0x2F3C JUMP JUMPDEST PUSH2 0x3062 DUP5 PUSH2 0x2F4E JUMP JUMPDEST DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x3071 JUMPI DUP2 SWAP1 POP JUMPDEST PUSH2 0x3085 PUSH2 0x307D DUP6 PUSH2 0x2F4E JUMP JUMPDEST DUP4 ADD DUP3 PUSH2 0x3025 JUMP JUMPDEST POP POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH0 DUP3 DUP3 SHR SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x30A8 PUSH0 NOT DUP5 PUSH1 0x8 MUL PUSH2 0x308D JUMP JUMPDEST NOT DUP1 DUP4 AND SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x30C0 DUP4 DUP4 PUSH2 0x3099 JUMP JUMPDEST SWAP2 POP DUP3 PUSH1 0x2 MUL DUP3 OR SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x30D9 DUP3 PUSH2 0x2680 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x30F2 JUMPI PUSH2 0x30F1 PUSH2 0x28F5 JUMP JUMPDEST JUMPDEST PUSH2 0x30FC DUP3 SLOAD PUSH2 0x2C20 JUMP JUMPDEST PUSH2 0x3107 DUP3 DUP3 DUP6 PUSH2 0x3047 JUMP JUMPDEST PUSH0 PUSH1 0x20 SWAP1 POP PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x3138 JUMPI PUSH0 DUP5 ISZERO PUSH2 0x3126 JUMPI DUP3 DUP8 ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0x3130 DUP6 DUP3 PUSH2 0x30B5 JUMP JUMPDEST DUP7 SSTORE POP PUSH2 0x3197 JUMP JUMPDEST PUSH1 0x1F NOT DUP5 AND PUSH2 0x3146 DUP7 PUSH2 0x2F3C JUMP JUMPDEST PUSH0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x316D JUMPI DUP5 DUP10 ADD MLOAD DUP3 SSTORE PUSH1 0x1 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP6 ADD SWAP5 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x3148 JUMP JUMPDEST DUP7 DUP4 LT ISZERO PUSH2 0x318A JUMPI DUP5 DUP10 ADD MLOAD PUSH2 0x3186 PUSH1 0x1F DUP10 AND DUP3 PUSH2 0x3099 JUMP JUMPDEST DUP4 SSTORE POP JUMPDEST PUSH1 0x1 PUSH1 0x2 DUP9 MUL ADD DUP9 SSTORE POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x31B3 DUP3 PUSH2 0x2E0D JUMP JUMPDEST PUSH2 0x31BD DUP2 DUP6 PUSH2 0x319F JUMP JUMPDEST SWAP4 POP PUSH2 0x31CD DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x269A JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x31E4 DUP3 DUP5 PUSH2 0x31A9 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE8 CREATE2 0xCE PUSH6 0xD6667C13C0DA 0xEF SWAP6 0xAF 0xBF PUSH3 0xE8E580 PUSH20 0x1154835816A64FEA207CF2053864736F6C634300 ADDMOD AND STOP CALLER ",
"sourceMap": "370:1018:19:-:0;;;1171:4:2;1128:48;;;;;;;;;607:53:19;;;;;;;;;;631:22;:20;;;:22;;:::i;:::-;370:1018;;7711:422:1;7826:30;7859:26;:24;;;:26;;:::i;:::-;7826:59;;7900:1;:15;;;;;;;;;;;;7896:76;;;7938:23;;;;;;;;;;;;;;7896:76;8003:16;7985:34;;:1;:14;;;;;;;;;;;;:34;;;7981:146;;8052:16;8035:1;:14;;;:33;;;;;;;;;;;;;;;;;;8087:29;8099:16;8087:29;;;;;;:::i;:::-;;;;;;;;7981:146;7760:373;7711:422::o;8737:170::-;8795:30;8870:21;8860:31;;8737:170;:::o;7:101:20:-;43:7;83:18;76:5;72:30;61:41;;7:101;;;:::o;114:115::-;199:23;216:5;199:23;:::i;:::-;194:3;187:36;114:115;;:::o;235:218::-;326:4;364:2;353:9;349:18;341:26;;377:69;443:1;432:9;428:17;419:6;377:69;:::i;:::-;235:218;;;;:::o;370:1018:19:-;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {
"@UPGRADE_INTERFACE_VERSION_472": {
"entryPoint": 2838,
"id": 472,
"parameterSlots": 0,
"returnSlots": 0
},
"@__ERC721_init_717": {
"entryPoint": 6769,
"id": 717,
"parameterSlots": 2,
"returnSlots": 0
},
"@__ERC721_init_unchained_745": {
"entryPoint": 8060,
"id": 745,
"parameterSlots": 2,
"returnSlots": 0
},
"@__Ownable_init_54": {
"entryPoint": 6791,
"id": 54,
"parameterSlots": 1,
"returnSlots": 0
},
"@__Ownable_init_unchained_81": {
"entryPoint": 8119,
"id": 81,
"parameterSlots": 1,
"returnSlots": 0
},
"@__UUPSUpgradeable_init_502": {
"entryPoint": 6811,
"id": 502,
"parameterSlots": 0,
"returnSlots": 0
},
"@_approve_1549": {
"entryPoint": 4288,
"id": 1549,
"parameterSlots": 3,
"returnSlots": 0
},
"@_approve_1623": {
"entryPoint": 7116,
"id": 1623,
"parameterSlots": 4,
"returnSlots": 0
},
"@_authorizeUpgrade_4353": {
"entryPoint": 5212,
"id": 4353,
"parameterSlots": 1,
"returnSlots": 0
},
"@_baseURI_901": {
"entryPoint": 6821,
"id": 901,
"parameterSlots": 0,
"returnSlots": 1
},
"@_checkAuthorized_1177": {
"entryPoint": 7577,
"id": 1177,
"parameterSlots": 3,
"returnSlots": 0
},
"@_checkInitializing_370": {
"entryPoint": 7996,
"id": 370,
"parameterSlots": 0,
"returnSlots": 0
},
"@_checkNonPayable_2297": {
"entryPoint": 9118,
"id": 2297,
"parameterSlots": 0,
"returnSlots": 0
},
"@_checkNotDelegated_578": {
"entryPoint": 5509,
"id": 578,
"parameterSlots": 0,
"returnSlots": 0
},
"@_checkOnERC721Received_1761": {
"entryPoint": 6296,
"id": 1761,
"parameterSlots": 4,
"returnSlots": 0
},
"@_checkOwner_122": {
"entryPoint": 4847,
"id": 122,
"parameterSlots": 0,
"returnSlots": 0
},
"@_checkProxy_562": {
"entryPoint": 4982,
"id": 562,
"parameterSlots": 0,
"returnSlots": 0
},
"@_getApproved_1104": {
"entryPoint": 4210,
"id": 1104,
"parameterSlots": 1,
"returnSlots": 1
},
"@_getERC721Storage_701": {
"entryPoint": 4037,
"id": 701,
"parameterSlots": 0,
"returnSlots": 1
},
"@_getInitializableStorage_447": {
"entryPoint": 6730,
"id": 447,
"parameterSlots": 0,
"returnSlots": 1
},
"@_getOwnableStorage_25": {
"entryPoint": 5853,
"id": 25,
"parameterSlots": 0,
"returnSlots": 1
},
"@_isAuthorized_1140": {
"entryPoint": 8588,
"id": 1140,
"parameterSlots": 3,
"returnSlots": 1
},
"@_isInitializing_438": {
"entryPoint": 9421,
"id": 438,
"parameterSlots": 0,
"returnSlots": 1
},
"@_mint_1353": {
"entryPoint": 9178,
"id": 1353,
"parameterSlots": 2,
"returnSlots": 0
},
"@_msgSender_1790": {
"entryPoint": 4281,
"id": 1790,
"parameterSlots": 0,
"returnSlots": 1
},
"@_ownerOf_1084": {
"entryPoint": 7045,
"id": 1084,
"parameterSlots": 1,
"returnSlots": 1
},
"@_requireOwned_1697": {
"entryPoint": 4076,
"id": 1697,
"parameterSlots": 1,
"returnSlots": 1
},
"@_revert_2723": {
"entryPoint": 9592,
"id": 2723,
"parameterSlots": 1,
"returnSlots": 0
},
"@_safeMint_1368": {
"entryPoint": 5892,
"id": 1368,
"parameterSlots": 2,
"returnSlots": 0
},
"@_safeMint_1394": {
"entryPoint": 7969,
"id": 1394,
"parameterSlots": 3,
"returnSlots": 0
},
"@_setApprovalForAll_1668": {
"entryPoint": 5921,
"id": 1668,
"parameterSlots": 3,
"returnSlots": 0
},
"@_setImplementation_2083": {
"entryPoint": 8789,
"id": 2083,
"parameterSlots": 1,
"returnSlots": 0
},
"@_transferOwnership_193": {
"entryPoint": 5644,
"id": 193,
"parameterSlots": 1,
"returnSlots": 0
},
"@_update_1303": {
"entryPoint": 4306,
"id": 1303,
"parameterSlots": 3,
"returnSlots": 1
},
"@_upgradeToAndCallUUPS_629": {
"entryPoint": 5223,
"id": 629,
"parameterSlots": 2,
"returnSlots": 0
},
"@approve_917": {
"entryPoint": 1807,
"id": 917,
"parameterSlots": 2,
"returnSlots": 0
},
"@balanceOf_811": {
"entryPoint": 2300,
"id": 811,
"parameterSlots": 1,
"returnSlots": 1
},
"@functionDelegateCall_2643": {
"entryPoint": 8990,
"id": 2643,
"parameterSlots": 2,
"returnSlots": 1
},
"@getAddressSlot_2756": {
"entryPoint": 8780,
"id": 2756,
"parameterSlots": 1,
"returnSlots": 1
},
"@getApproved_934": {
"entryPoint": 1780,
"id": 934,
"parameterSlots": 1,
"returnSlots": 1
},
"@getImplementation_2056": {
"entryPoint": 7772,
"id": 2056,
"parameterSlots": 0,
"returnSlots": 1
},
"@initialize_4314": {
"entryPoint": 2924,
"id": 4314,
"parameterSlots": 1,
"returnSlots": 0
},
"@isApprovedForAll_974": {
"entryPoint": 3644,
"id": 974,
"parameterSlots": 2,
"returnSlots": 1
},
"@log10_3975": {
"entryPoint": 8251,
"id": 3975,
"parameterSlots": 1,
"returnSlots": 1
},
"@mintable_4276": {
"entryPoint": 2187,
"id": 4276,
"parameterSlots": 0,
"returnSlots": 0
},
"@myMetamaskAddress_4278": {
"entryPoint": 2150,
"id": 4278,
"parameterSlots": 0,
"returnSlots": 0
},
"@name_840": {
"entryPoint": 1623,
"id": 840,
"parameterSlots": 0,
"returnSlots": 1
},
"@ownerOf_824": {
"entryPoint": 2283,
"id": 824,
"parameterSlots": 1,
"returnSlots": 1
},
"@owner_105": {
"entryPoint": 2515,
"id": 105,
"parameterSlots": 0,
"returnSlots": 1
},
"@proxiableUUID_520": {
"entryPoint": 2234,
"id": 520,
"parameterSlots": 0,
"returnSlots": 1
},
"@renounceOwnership_136": {
"entryPoint": 2496,
"id": 136,
"parameterSlots": 0,
"returnSlots": 0
},
"@safeMint_4332": {
"entryPoint": 2726,
"id": 4332,
"parameterSlots": 2,
"returnSlots": 0
},
"@safeTransferFrom_1038": {
"entryPoint": 2119,
"id": 1038,
"parameterSlots": 3,
"returnSlots": 0
},
"@safeTransferFrom_1064": {
"entryPoint": 2895,
"id": 1064,
"parameterSlots": 4,
"returnSlots": 0
},
"@setApprovalForAll_950": {
"entryPoint": 2816,
"id": 950,
"parameterSlots": 2,
"returnSlots": 0
},
"@setMintable_4344": {
"entryPoint": 2084,
"id": 4344,
"parameterSlots": 1,
"returnSlots": 0
},
"@supportsInterface_1847": {
"entryPoint": 3932,
"id": 1847,
"parameterSlots": 1,
"returnSlots": 1
},
"@supportsInterface_776": {
"entryPoint": 1398,
"id": 776,
"parameterSlots": 1,
"returnSlots": 1
},
"@symbol_856": {
"entryPoint": 2568,
"id": 856,
"parameterSlots": 0,
"returnSlots": 1
},
"@toString_2902": {
"entryPoint": 6843,
"id": 2902,
"parameterSlots": 1,
"returnSlots": 1
},
"@tokenURI_892": {
"entryPoint": 3542,
"id": 892,
"parameterSlots": 1,
"returnSlots": 1
},
"@transferFrom_1020": {
"entryPoint": 1829,
"id": 1020,
"parameterSlots": 3,
"returnSlots": 0
},
"@transferOwnership_164": {
"entryPoint": 3800,
"id": 164,
"parameterSlots": 1,
"returnSlots": 0
},
"@upgradeToAndCall_2117": {
"entryPoint": 7855,
"id": 2117,
"parameterSlots": 2,
"returnSlots": 0
},
"@upgradeToAndCall_540": {
"entryPoint": 2203,
"id": 540,
"parameterSlots": 2,
"returnSlots": 0
},
"@verifyCallResultFromTarget_2683": {
"entryPoint": 9451,
"id": 2683,
"parameterSlots": 3,
"returnSlots": 1
},
"abi_decode_available_length_t_bytes_memory_ptr": {
"entryPoint": 10667,
"id": null,
"parameterSlots": 3,
"returnSlots": 1
},
"abi_decode_t_address": {
"entryPoint": 10230,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_bool": {
"entryPoint": 10414,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_bytes32_fromMemory": {
"entryPoint": 11726,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_bytes4": {
"entryPoint": 9742,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_bytes4_fromMemory": {
"entryPoint": 11945,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_bytes_memory_ptr": {
"entryPoint": 10732,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_uint256": {
"entryPoint": 10057,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_address": {
"entryPoint": 10916,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_addresst_address": {
"entryPoint": 11189,
"id": null,
"parameterSlots": 2,
"returnSlots": 2
},
"abi_decode_tuple_t_addresst_addresst_uint256": {
"entryPoint": 10312,
"id": null,
"parameterSlots": 2,
"returnSlots": 3
},
"abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr": {
"entryPoint": 11061,
"id": null,
"parameterSlots": 2,
"returnSlots": 4
},
"abi_decode_tuple_t_addresst_bool": {
"entryPoint": 10999,
"id": null,
"parameterSlots": 2,
"returnSlots": 2
},
"abi_decode_tuple_t_addresst_bytes_memory_ptr": {
"entryPoint": 10777,
"id": null,
"parameterSlots": 2,
"returnSlots": 2
},
"abi_decode_tuple_t_addresst_uint256": {
"entryPoint": 10250,
"id": null,
"parameterSlots": 2,
"returnSlots": 2
},
"abi_decode_tuple_t_bool": {
"entryPoint": 10434,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_bytes32_fromMemory": {
"entryPoint": 11746,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_bytes4": {
"entryPoint": 9762,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_bytes4_fromMemory": {
"entryPoint": 11965,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_uint256": {
"entryPoint": 10077,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_t_address_to_t_address_fromStack": {
"entryPoint": 10168,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_t_bool_to_t_bool_fromStack": {
"entryPoint": 9816,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_t_bytes32_to_t_bytes32_fromStack": {
"entryPoint": 10876,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack": {
"entryPoint": 11815,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack": {
"entryPoint": 12713,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_t_rational_1_by_1_to_t_uint64_fromStack": {
"entryPoint": 11571,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack": {
"entryPoint": 9938,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack": {
"entryPoint": 11621,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_t_stringliteral_074edb06bc2c283d1123114ebfffa3e3cbf780cc3fcf237b7da0237729f6c25e_to_t_string_memory_ptr_fromStack": {
"entryPoint": 11437,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"abi_encode_t_uint256_to_t_uint256_fromStack": {
"entryPoint": 10959,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
"entryPoint": 12761,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_packed_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed": {
"entryPoint": 11669,
"id": null,
"parameterSlots": 3,
"returnSlots": 1
},
"abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
"entryPoint": 10183,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"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": {
"entryPoint": 11871,
"id": null,
"parameterSlots": 5,
"returnSlots": 1
},
"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": {
"entryPoint": 12053,
"id": null,
"parameterSlots": 3,
"returnSlots": 1
},
"abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed": {
"entryPoint": 11344,
"id": null,
"parameterSlots": 4,
"returnSlots": 1
},
"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
"entryPoint": 9831,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": {
"entryPoint": 10891,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_rational_1_by_1__to_t_uint64__fromStack_reversed": {
"entryPoint": 11586,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
"entryPoint": 9994,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_stringliteral_074edb06bc2c283d1123114ebfffa3e3cbf780cc3fcf237b7da0237729f6c25e__to_t_string_memory_ptr__fromStack_reversed": {
"entryPoint": 11471,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
"entryPoint": 10974,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"allocate_memory": {
"entryPoint": 10579,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"allocate_unbounded": {
"entryPoint": 9660,
"id": null,
"parameterSlots": 0,
"returnSlots": 1
},
"array_allocation_size_t_bytes_memory_ptr": {
"entryPoint": 10605,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"array_dataslot_t_string_storage": {
"entryPoint": 12092,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"array_length_t_bytes_memory_ptr": {
"entryPoint": 11789,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"array_length_t_string_memory_ptr": {
"entryPoint": 9856,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack": {
"entryPoint": 11799,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack": {
"entryPoint": 12703,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"array_storeLengthForEncoding_t_string_memory_ptr_fromStack": {
"entryPoint": 9866,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack": {
"entryPoint": 11611,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"clean_up_bytearray_end_slots_t_string_storage": {
"entryPoint": 12359,
"id": null,
"parameterSlots": 3,
"returnSlots": 0
},
"cleanup_t_address": {
"entryPoint": 10151,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_bool": {
"entryPoint": 9805,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_bytes32": {
"entryPoint": 10867,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_bytes4": {
"entryPoint": 9677,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_rational_1_by_1": {
"entryPoint": 11501,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_uint160": {
"entryPoint": 10120,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_uint256": {
"entryPoint": 10026,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_uint64": {
"entryPoint": 11510,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"clear_storage_range_t_bytes1": {
"entryPoint": 12325,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"convert_t_rational_1_by_1_to_t_uint64": {
"entryPoint": 11538,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"convert_t_uint256_to_t_uint256": {
"entryPoint": 12218,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage": {
"entryPoint": 12496,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"copy_calldata_to_memory_with_cleanup": {
"entryPoint": 10653,
"id": null,
"parameterSlots": 3,
"returnSlots": 0
},
"copy_memory_to_memory_with_cleanup": {
"entryPoint": 9882,
"id": null,
"parameterSlots": 3,
"returnSlots": 0
},
"divide_by_32_ceil": {
"entryPoint": 12110,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"extract_byte_array_length": {
"entryPoint": 11296,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"extract_used_part_and_set_length_of_short_byte_array": {
"entryPoint": 12469,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"finalize_allocation": {
"entryPoint": 10530,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"identity": {
"entryPoint": 11529,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"mask_bytes_dynamic": {
"entryPoint": 12441,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"panic_error_0x12": {
"entryPoint": 12008,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"panic_error_0x22": {
"entryPoint": 11251,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"panic_error_0x41": {
"entryPoint": 10485,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"prepare_store_t_uint256": {
"entryPoint": 12251,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d": {
"entryPoint": 10477,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae": {
"entryPoint": 10481,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": {
"entryPoint": 9673,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": {
"entryPoint": 9669,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"round_up_to_mul_of_32": {
"entryPoint": 9922,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"shift_left_dynamic": {
"entryPoint": 12125,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"shift_right_unsigned_dynamic": {
"entryPoint": 12429,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"storage_set_to_zero_t_uint256": {
"entryPoint": 12301,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"store_literal_in_memory_074edb06bc2c283d1123114ebfffa3e3cbf780cc3fcf237b7da0237729f6c25e": {
"entryPoint": 11397,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"update_byte_slice_dynamic32": {
"entryPoint": 12137,
"id": null,
"parameterSlots": 3,
"returnSlots": 1
},
"update_storage_value_t_uint256_to_t_uint256": {
"entryPoint": 12260,
"id": null,
"parameterSlots": 3,
"returnSlots": 0
},
"validator_revert_t_address": {
"entryPoint": 10208,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"validator_revert_t_bool": {
"entryPoint": 10392,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"validator_revert_t_bytes32": {
"entryPoint": 11704,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"validator_revert_t_bytes4": {
"entryPoint": 9720,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"validator_revert_t_uint256": {
"entryPoint": 10035,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"zero_value_for_split_t_uint256": {
"entryPoint": 12297,
"id": null,
"parameterSlots": 0,
"returnSlots": 1
}
},
"generatedSources": [
{
"ast": {
"nativeSrc": "0:23695:20",
"nodeType": "YulBlock",
"src": "0:23695:20",
"statements": [
{
"body": {
"nativeSrc": "47:35:20",
"nodeType": "YulBlock",
"src": "47:35:20",
"statements": [
{
"nativeSrc": "57:19:20",
"nodeType": "YulAssignment",
"src": "57:19:20",
"value": {
"arguments": [
{
"kind": "number",
"nativeSrc": "73:2:20",
"nodeType": "YulLiteral",
"src": "73:2:20",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nativeSrc": "67:5:20",
"nodeType": "YulIdentifier",
"src": "67:5:20"
},
"nativeSrc": "67:9:20",
"nodeType": "YulFunctionCall",
"src": "67:9:20"
},
"variableNames": [
{
"name": "memPtr",
"nativeSrc": "57:6:20",
"nodeType": "YulIdentifier",
"src": "57:6:20"
}
]
}
]
},
"name": "allocate_unbounded",
"nativeSrc": "7:75:20",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "memPtr",
"nativeSrc": "40:6:20",
"nodeType": "YulTypedName",
"src": "40:6:20",
"type": ""
}
],
"src": "7:75:20"
},
{
"body": {
"nativeSrc": "177:28:20",
"nodeType": "YulBlock",
"src": "177:28:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "194:1:20",
"nodeType": "YulLiteral",
"src": "194:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "197:1:20",
"nodeType": "YulLiteral",
"src": "197:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "187:6:20",
"nodeType": "YulIdentifier",
"src": "187:6:20"
},
"nativeSrc": "187:12:20",
"nodeType": "YulFunctionCall",
"src": "187:12:20"
},
"nativeSrc": "187:12:20",
"nodeType": "YulExpressionStatement",
"src": "187:12:20"
}
]
},
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "88:117:20",
"nodeType": "YulFunctionDefinition",
"src": "88:117:20"
},
{
"body": {
"nativeSrc": "300:28:20",
"nodeType": "YulBlock",
"src": "300:28:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "317:1:20",
"nodeType": "YulLiteral",
"src": "317:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "320:1:20",
"nodeType": "YulLiteral",
"src": "320:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "310:6:20",
"nodeType": "YulIdentifier",
"src": "310:6:20"
},
"nativeSrc": "310:12:20",
"nodeType": "YulFunctionCall",
"src": "310:12:20"
},
"nativeSrc": "310:12:20",
"nodeType": "YulExpressionStatement",
"src": "310:12:20"
}
]
},
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nativeSrc": "211:117:20",
"nodeType": "YulFunctionDefinition",
"src": "211:117:20"
},
{
"body": {
"nativeSrc": "378:105:20",
"nodeType": "YulBlock",
"src": "378:105:20",
"statements": [
{
"nativeSrc": "388:89:20",
"nodeType": "YulAssignment",
"src": "388:89:20",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "403:5:20",
"nodeType": "YulIdentifier",
"src": "403:5:20"
},
{
"kind": "number",
"nativeSrc": "410:66:20",
"nodeType": "YulLiteral",
"src": "410:66:20",
"type": "",
"value": "0xffffffff00000000000000000000000000000000000000000000000000000000"
}
],
"functionName": {
"name": "and",
"nativeSrc": "399:3:20",
"nodeType": "YulIdentifier",
"src": "399:3:20"
},
"nativeSrc": "399:78:20",
"nodeType": "YulFunctionCall",
"src": "399:78:20"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "388:7:20",
"nodeType": "YulIdentifier",
"src": "388:7:20"
}
]
}
]
},
"name": "cleanup_t_bytes4",
"nativeSrc": "334:149:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "360:5:20",
"nodeType": "YulTypedName",
"src": "360:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "370:7:20",
"nodeType": "YulTypedName",
"src": "370:7:20",
"type": ""
}
],
"src": "334:149:20"
},
{
"body": {
"nativeSrc": "531:78:20",
"nodeType": "YulBlock",
"src": "531:78:20",
"statements": [
{
"body": {
"nativeSrc": "587:16:20",
"nodeType": "YulBlock",
"src": "587:16:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "596:1:20",
"nodeType": "YulLiteral",
"src": "596:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "599:1:20",
"nodeType": "YulLiteral",
"src": "599:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "589:6:20",
"nodeType": "YulIdentifier",
"src": "589:6:20"
},
"nativeSrc": "589:12:20",
"nodeType": "YulFunctionCall",
"src": "589:12:20"
},
"nativeSrc": "589:12:20",
"nodeType": "YulExpressionStatement",
"src": "589:12:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "554:5:20",
"nodeType": "YulIdentifier",
"src": "554:5:20"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "578:5:20",
"nodeType": "YulIdentifier",
"src": "578:5:20"
}
],
"functionName": {
"name": "cleanup_t_bytes4",
"nativeSrc": "561:16:20",
"nodeType": "YulIdentifier",
"src": "561:16:20"
},
"nativeSrc": "561:23:20",
"nodeType": "YulFunctionCall",
"src": "561:23:20"
}
],
"functionName": {
"name": "eq",
"nativeSrc": "551:2:20",
"nodeType": "YulIdentifier",
"src": "551:2:20"
},
"nativeSrc": "551:34:20",
"nodeType": "YulFunctionCall",
"src": "551:34:20"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "544:6:20",
"nodeType": "YulIdentifier",
"src": "544:6:20"
},
"nativeSrc": "544:42:20",
"nodeType": "YulFunctionCall",
"src": "544:42:20"
},
"nativeSrc": "541:62:20",
"nodeType": "YulIf",
"src": "541:62:20"
}
]
},
"name": "validator_revert_t_bytes4",
"nativeSrc": "489:120:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "524:5:20",
"nodeType": "YulTypedName",
"src": "524:5:20",
"type": ""
}
],
"src": "489:120:20"
},
{
"body": {
"nativeSrc": "666:86:20",
"nodeType": "YulBlock",
"src": "666:86:20",
"statements": [
{
"nativeSrc": "676:29:20",
"nodeType": "YulAssignment",
"src": "676:29:20",
"value": {
"arguments": [
{
"name": "offset",
"nativeSrc": "698:6:20",
"nodeType": "YulIdentifier",
"src": "698:6:20"
}
],
"functionName": {
"name": "calldataload",
"nativeSrc": "685:12:20",
"nodeType": "YulIdentifier",
"src": "685:12:20"
},
"nativeSrc": "685:20:20",
"nodeType": "YulFunctionCall",
"src": "685:20:20"
},
"variableNames": [
{
"name": "value",
"nativeSrc": "676:5:20",
"nodeType": "YulIdentifier",
"src": "676:5:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nativeSrc": "740:5:20",
"nodeType": "YulIdentifier",
"src": "740:5:20"
}
],
"functionName": {
"name": "validator_revert_t_bytes4",
"nativeSrc": "714:25:20",
"nodeType": "YulIdentifier",
"src": "714:25:20"
},
"nativeSrc": "714:32:20",
"nodeType": "YulFunctionCall",
"src": "714:32:20"
},
"nativeSrc": "714:32:20",
"nodeType": "YulExpressionStatement",
"src": "714:32:20"
}
]
},
"name": "abi_decode_t_bytes4",
"nativeSrc": "615:137:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nativeSrc": "644:6:20",
"nodeType": "YulTypedName",
"src": "644:6:20",
"type": ""
},
{
"name": "end",
"nativeSrc": "652:3:20",
"nodeType": "YulTypedName",
"src": "652:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nativeSrc": "660:5:20",
"nodeType": "YulTypedName",
"src": "660:5:20",
"type": ""
}
],
"src": "615:137:20"
},
{
"body": {
"nativeSrc": "823:262:20",
"nodeType": "YulBlock",
"src": "823:262:20",
"statements": [
{
"body": {
"nativeSrc": "869:83:20",
"nodeType": "YulBlock",
"src": "869:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "871:77:20",
"nodeType": "YulIdentifier",
"src": "871:77:20"
},
"nativeSrc": "871:79:20",
"nodeType": "YulFunctionCall",
"src": "871:79:20"
},
"nativeSrc": "871:79:20",
"nodeType": "YulExpressionStatement",
"src": "871:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "844:7:20",
"nodeType": "YulIdentifier",
"src": "844:7:20"
},
{
"name": "headStart",
"nativeSrc": "853:9:20",
"nodeType": "YulIdentifier",
"src": "853:9:20"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "840:3:20",
"nodeType": "YulIdentifier",
"src": "840:3:20"
},
"nativeSrc": "840:23:20",
"nodeType": "YulFunctionCall",
"src": "840:23:20"
},
{
"kind": "number",
"nativeSrc": "865:2:20",
"nodeType": "YulLiteral",
"src": "865:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "836:3:20",
"nodeType": "YulIdentifier",
"src": "836:3:20"
},
"nativeSrc": "836:32:20",
"nodeType": "YulFunctionCall",
"src": "836:32:20"
},
"nativeSrc": "833:119:20",
"nodeType": "YulIf",
"src": "833:119:20"
},
{
"nativeSrc": "962:116:20",
"nodeType": "YulBlock",
"src": "962:116:20",
"statements": [
{
"nativeSrc": "977:15:20",
"nodeType": "YulVariableDeclaration",
"src": "977:15:20",
"value": {
"kind": "number",
"nativeSrc": "991:1:20",
"nodeType": "YulLiteral",
"src": "991:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "981:6:20",
"nodeType": "YulTypedName",
"src": "981:6:20",
"type": ""
}
]
},
{
"nativeSrc": "1006:62:20",
"nodeType": "YulAssignment",
"src": "1006:62:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "1040:9:20",
"nodeType": "YulIdentifier",
"src": "1040:9:20"
},
{
"name": "offset",
"nativeSrc": "1051:6:20",
"nodeType": "YulIdentifier",
"src": "1051:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1036:3:20",
"nodeType": "YulIdentifier",
"src": "1036:3:20"
},
"nativeSrc": "1036:22:20",
"nodeType": "YulFunctionCall",
"src": "1036:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "1060:7:20",
"nodeType": "YulIdentifier",
"src": "1060:7:20"
}
],
"functionName": {
"name": "abi_decode_t_bytes4",
"nativeSrc": "1016:19:20",
"nodeType": "YulIdentifier",
"src": "1016:19:20"
},
"nativeSrc": "1016:52:20",
"nodeType": "YulFunctionCall",
"src": "1016:52:20"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "1006:6:20",
"nodeType": "YulIdentifier",
"src": "1006:6:20"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_bytes4",
"nativeSrc": "758:327:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "793:9:20",
"nodeType": "YulTypedName",
"src": "793:9:20",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "804:7:20",
"nodeType": "YulTypedName",
"src": "804:7:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "816:6:20",
"nodeType": "YulTypedName",
"src": "816:6:20",
"type": ""
}
],
"src": "758:327:20"
},
{
"body": {
"nativeSrc": "1133:48:20",
"nodeType": "YulBlock",
"src": "1133:48:20",
"statements": [
{
"nativeSrc": "1143:32:20",
"nodeType": "YulAssignment",
"src": "1143:32:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "1168:5:20",
"nodeType": "YulIdentifier",
"src": "1168:5:20"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "1161:6:20",
"nodeType": "YulIdentifier",
"src": "1161:6:20"
},
"nativeSrc": "1161:13:20",
"nodeType": "YulFunctionCall",
"src": "1161:13:20"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "1154:6:20",
"nodeType": "YulIdentifier",
"src": "1154:6:20"
},
"nativeSrc": "1154:21:20",
"nodeType": "YulFunctionCall",
"src": "1154:21:20"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "1143:7:20",
"nodeType": "YulIdentifier",
"src": "1143:7:20"
}
]
}
]
},
"name": "cleanup_t_bool",
"nativeSrc": "1091:90:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "1115:5:20",
"nodeType": "YulTypedName",
"src": "1115:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "1125:7:20",
"nodeType": "YulTypedName",
"src": "1125:7:20",
"type": ""
}
],
"src": "1091:90:20"
},
{
"body": {
"nativeSrc": "1246:50:20",
"nodeType": "YulBlock",
"src": "1246:50:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "1263:3:20",
"nodeType": "YulIdentifier",
"src": "1263:3:20"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "1283:5:20",
"nodeType": "YulIdentifier",
"src": "1283:5:20"
}
],
"functionName": {
"name": "cleanup_t_bool",
"nativeSrc": "1268:14:20",
"nodeType": "YulIdentifier",
"src": "1268:14:20"
},
"nativeSrc": "1268:21:20",
"nodeType": "YulFunctionCall",
"src": "1268:21:20"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "1256:6:20",
"nodeType": "YulIdentifier",
"src": "1256:6:20"
},
"nativeSrc": "1256:34:20",
"nodeType": "YulFunctionCall",
"src": "1256:34:20"
},
"nativeSrc": "1256:34:20",
"nodeType": "YulExpressionStatement",
"src": "1256:34:20"
}
]
},
"name": "abi_encode_t_bool_to_t_bool_fromStack",
"nativeSrc": "1187:109:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "1234:5:20",
"nodeType": "YulTypedName",
"src": "1234:5:20",
"type": ""
},
{
"name": "pos",
"nativeSrc": "1241:3:20",
"nodeType": "YulTypedName",
"src": "1241:3:20",
"type": ""
}
],
"src": "1187:109:20"
},
{
"body": {
"nativeSrc": "1394:118:20",
"nodeType": "YulBlock",
"src": "1394:118:20",
"statements": [
{
"nativeSrc": "1404:26:20",
"nodeType": "YulAssignment",
"src": "1404:26:20",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "1416:9:20",
"nodeType": "YulIdentifier",
"src": "1416:9:20"
},
{
"kind": "number",
"nativeSrc": "1427:2:20",
"nodeType": "YulLiteral",
"src": "1427:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1412:3:20",
"nodeType": "YulIdentifier",
"src": "1412:3:20"
},
"nativeSrc": "1412:18:20",
"nodeType": "YulFunctionCall",
"src": "1412:18:20"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "1404:4:20",
"nodeType": "YulIdentifier",
"src": "1404:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "1478:6:20",
"nodeType": "YulIdentifier",
"src": "1478:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "1491:9:20",
"nodeType": "YulIdentifier",
"src": "1491:9:20"
},
{
"kind": "number",
"nativeSrc": "1502:1:20",
"nodeType": "YulLiteral",
"src": "1502:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1487:3:20",
"nodeType": "YulIdentifier",
"src": "1487:3:20"
},
"nativeSrc": "1487:17:20",
"nodeType": "YulFunctionCall",
"src": "1487:17:20"
}
],
"functionName": {
"name": "abi_encode_t_bool_to_t_bool_fromStack",
"nativeSrc": "1440:37:20",
"nodeType": "YulIdentifier",
"src": "1440:37:20"
},
"nativeSrc": "1440:65:20",
"nodeType": "YulFunctionCall",
"src": "1440:65:20"
},
"nativeSrc": "1440:65:20",
"nodeType": "YulExpressionStatement",
"src": "1440:65:20"
}
]
},
"name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
"nativeSrc": "1302:210:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "1366:9:20",
"nodeType": "YulTypedName",
"src": "1366:9:20",
"type": ""
},
{
"name": "value0",
"nativeSrc": "1378:6:20",
"nodeType": "YulTypedName",
"src": "1378:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "1389:4:20",
"nodeType": "YulTypedName",
"src": "1389:4:20",
"type": ""
}
],
"src": "1302:210:20"
},
{
"body": {
"nativeSrc": "1577:40:20",
"nodeType": "YulBlock",
"src": "1577:40:20",
"statements": [
{
"nativeSrc": "1588:22:20",
"nodeType": "YulAssignment",
"src": "1588:22:20",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "1604:5:20",
"nodeType": "YulIdentifier",
"src": "1604:5:20"
}
],
"functionName": {
"name": "mload",
"nativeSrc": "1598:5:20",
"nodeType": "YulIdentifier",
"src": "1598:5:20"
},
"nativeSrc": "1598:12:20",
"nodeType": "YulFunctionCall",
"src": "1598:12:20"
},
"variableNames": [
{
"name": "length",
"nativeSrc": "1588:6:20",
"nodeType": "YulIdentifier",
"src": "1588:6:20"
}
]
}
]
},
"name": "array_length_t_string_memory_ptr",
"nativeSrc": "1518:99:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "1560:5:20",
"nodeType": "YulTypedName",
"src": "1560:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "length",
"nativeSrc": "1570:6:20",
"nodeType": "YulTypedName",
"src": "1570:6:20",
"type": ""
}
],
"src": "1518:99:20"
},
{
"body": {
"nativeSrc": "1719:73:20",
"nodeType": "YulBlock",
"src": "1719:73:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "1736:3:20",
"nodeType": "YulIdentifier",
"src": "1736:3:20"
},
{
"name": "length",
"nativeSrc": "1741:6:20",
"nodeType": "YulIdentifier",
"src": "1741:6:20"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "1729:6:20",
"nodeType": "YulIdentifier",
"src": "1729:6:20"
},
"nativeSrc": "1729:19:20",
"nodeType": "YulFunctionCall",
"src": "1729:19:20"
},
"nativeSrc": "1729:19:20",
"nodeType": "YulExpressionStatement",
"src": "1729:19:20"
},
{
"nativeSrc": "1757:29:20",
"nodeType": "YulAssignment",
"src": "1757:29:20",
"value": {
"arguments": [
{
"name": "pos",
"nativeSrc": "1776:3:20",
"nodeType": "YulIdentifier",
"src": "1776:3:20"
},
{
"kind": "number",
"nativeSrc": "1781:4:20",
"nodeType": "YulLiteral",
"src": "1781:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1772:3:20",
"nodeType": "YulIdentifier",
"src": "1772:3:20"
},
"nativeSrc": "1772:14:20",
"nodeType": "YulFunctionCall",
"src": "1772:14:20"
},
"variableNames": [
{
"name": "updated_pos",
"nativeSrc": "1757:11:20",
"nodeType": "YulIdentifier",
"src": "1757:11:20"
}
]
}
]
},
"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
"nativeSrc": "1623:169:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nativeSrc": "1691:3:20",
"nodeType": "YulTypedName",
"src": "1691:3:20",
"type": ""
},
{
"name": "length",
"nativeSrc": "1696:6:20",
"nodeType": "YulTypedName",
"src": "1696:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "updated_pos",
"nativeSrc": "1707:11:20",
"nodeType": "YulTypedName",
"src": "1707:11:20",
"type": ""
}
],
"src": "1623:169:20"
},
{
"body": {
"nativeSrc": "1860:184:20",
"nodeType": "YulBlock",
"src": "1860:184:20",
"statements": [
{
"nativeSrc": "1870:10:20",
"nodeType": "YulVariableDeclaration",
"src": "1870:10:20",
"value": {
"kind": "number",
"nativeSrc": "1879:1:20",
"nodeType": "YulLiteral",
"src": "1879:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "i",
"nativeSrc": "1874:1:20",
"nodeType": "YulTypedName",
"src": "1874:1:20",
"type": ""
}
]
},
{
"body": {
"nativeSrc": "1939:63:20",
"nodeType": "YulBlock",
"src": "1939:63:20",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "dst",
"nativeSrc": "1964:3:20",
"nodeType": "YulIdentifier",
"src": "1964:3:20"
},
{
"name": "i",
"nativeSrc": "1969:1:20",
"nodeType": "YulIdentifier",
"src": "1969:1:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1960:3:20",
"nodeType": "YulIdentifier",
"src": "1960:3:20"
},
"nativeSrc": "1960:11:20",
"nodeType": "YulFunctionCall",
"src": "1960:11:20"
},
{
"arguments": [
{
"arguments": [
{
"name": "src",
"nativeSrc": "1983:3:20",
"nodeType": "YulIdentifier",
"src": "1983:3:20"
},
{
"name": "i",
"nativeSrc": "1988:1:20",
"nodeType": "YulIdentifier",
"src": "1988:1:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1979:3:20",
"nodeType": "YulIdentifier",
"src": "1979:3:20"
},
"nativeSrc": "1979:11:20",
"nodeType": "YulFunctionCall",
"src": "1979:11:20"
}
],
"functionName": {
"name": "mload",
"nativeSrc": "1973:5:20",
"nodeType": "YulIdentifier",
"src": "1973:5:20"
},
"nativeSrc": "1973:18:20",
"nodeType": "YulFunctionCall",
"src": "1973:18:20"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "1953:6:20",
"nodeType": "YulIdentifier",
"src": "1953:6:20"
},
"nativeSrc": "1953:39:20",
"nodeType": "YulFunctionCall",
"src": "1953:39:20"
},
"nativeSrc": "1953:39:20",
"nodeType": "YulExpressionStatement",
"src": "1953:39:20"
}
]
},
"condition": {
"arguments": [
{
"name": "i",
"nativeSrc": "1900:1:20",
"nodeType": "YulIdentifier",
"src": "1900:1:20"
},
{
"name": "length",
"nativeSrc": "1903:6:20",
"nodeType": "YulIdentifier",
"src": "1903:6:20"
}
],
"functionName": {
"name": "lt",
"nativeSrc": "1897:2:20",
"nodeType": "YulIdentifier",
"src": "1897:2:20"
},
"nativeSrc": "1897:13:20",
"nodeType": "YulFunctionCall",
"src": "1897:13:20"
},
"nativeSrc": "1889:113:20",
"nodeType": "YulForLoop",
"post": {
"nativeSrc": "1911:19:20",
"nodeType": "YulBlock",
"src": "1911:19:20",
"statements": [
{
"nativeSrc": "1913:15:20",
"nodeType": "YulAssignment",
"src": "1913:15:20",
"value": {
"arguments": [
{
"name": "i",
"nativeSrc": "1922:1:20",
"nodeType": "YulIdentifier",
"src": "1922:1:20"
},
{
"kind": "number",
"nativeSrc": "1925:2:20",
"nodeType": "YulLiteral",
"src": "1925:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1918:3:20",
"nodeType": "YulIdentifier",
"src": "1918:3:20"
},
"nativeSrc": "1918:10:20",
"nodeType": "YulFunctionCall",
"src": "1918:10:20"
},
"variableNames": [
{
"name": "i",
"nativeSrc": "1913:1:20",
"nodeType": "YulIdentifier",
"src": "1913:1:20"
}
]
}
]
},
"pre": {
"nativeSrc": "1893:3:20",
"nodeType": "YulBlock",
"src": "1893:3:20",
"statements": []
},
"src": "1889:113:20"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "dst",
"nativeSrc": "2022:3:20",
"nodeType": "YulIdentifier",
"src": "2022:3:20"
},
{
"name": "length",
"nativeSrc": "2027:6:20",
"nodeType": "YulIdentifier",
"src": "2027:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "2018:3:20",
"nodeType": "YulIdentifier",
"src": "2018:3:20"
},
"nativeSrc": "2018:16:20",
"nodeType": "YulFunctionCall",
"src": "2018:16:20"
},
{
"kind": "number",
"nativeSrc": "2036:1:20",
"nodeType": "YulLiteral",
"src": "2036:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "2011:6:20",
"nodeType": "YulIdentifier",
"src": "2011:6:20"
},
"nativeSrc": "2011:27:20",
"nodeType": "YulFunctionCall",
"src": "2011:27:20"
},
"nativeSrc": "2011:27:20",
"nodeType": "YulExpressionStatement",
"src": "2011:27:20"
}
]
},
"name": "copy_memory_to_memory_with_cleanup",
"nativeSrc": "1798:246:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "src",
"nativeSrc": "1842:3:20",
"nodeType": "YulTypedName",
"src": "1842:3:20",
"type": ""
},
{
"name": "dst",
"nativeSrc": "1847:3:20",
"nodeType": "YulTypedName",
"src": "1847:3:20",
"type": ""
},
{
"name": "length",
"nativeSrc": "1852:6:20",
"nodeType": "YulTypedName",
"src": "1852:6:20",
"type": ""
}
],
"src": "1798:246:20"
},
{
"body": {
"nativeSrc": "2098:54:20",
"nodeType": "YulBlock",
"src": "2098:54:20",
"statements": [
{
"nativeSrc": "2108:38:20",
"nodeType": "YulAssignment",
"src": "2108:38:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "2126:5:20",
"nodeType": "YulIdentifier",
"src": "2126:5:20"
},
{
"kind": "number",
"nativeSrc": "2133:2:20",
"nodeType": "YulLiteral",
"src": "2133:2:20",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "add",
"nativeSrc": "2122:3:20",
"nodeType": "YulIdentifier",
"src": "2122:3:20"
},
"nativeSrc": "2122:14:20",
"nodeType": "YulFunctionCall",
"src": "2122:14:20"
},
{
"arguments": [
{
"kind": "number",
"nativeSrc": "2142:2:20",
"nodeType": "YulLiteral",
"src": "2142:2:20",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "not",
"nativeSrc": "2138:3:20",
"nodeType": "YulIdentifier",
"src": "2138:3:20"
},
"nativeSrc": "2138:7:20",
"nodeType": "YulFunctionCall",
"src": "2138:7:20"
}
],
"functionName": {
"name": "and",
"nativeSrc": "2118:3:20",
"nodeType": "YulIdentifier",
"src": "2118:3:20"
},
"nativeSrc": "2118:28:20",
"nodeType": "YulFunctionCall",
"src": "2118:28:20"
},
"variableNames": [
{
"name": "result",
"nativeSrc": "2108:6:20",
"nodeType": "YulIdentifier",
"src": "2108:6:20"
}
]
}
]
},
"name": "round_up_to_mul_of_32",
"nativeSrc": "2050:102:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "2081:5:20",
"nodeType": "YulTypedName",
"src": "2081:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "result",
"nativeSrc": "2091:6:20",
"nodeType": "YulTypedName",
"src": "2091:6:20",
"type": ""
}
],
"src": "2050:102:20"
},
{
"body": {
"nativeSrc": "2250:285:20",
"nodeType": "YulBlock",
"src": "2250:285:20",
"statements": [
{
"nativeSrc": "2260:53:20",
"nodeType": "YulVariableDeclaration",
"src": "2260:53:20",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "2307:5:20",
"nodeType": "YulIdentifier",
"src": "2307:5:20"
}
],
"functionName": {
"name": "array_length_t_string_memory_ptr",
"nativeSrc": "2274:32:20",
"nodeType": "YulIdentifier",
"src": "2274:32:20"
},
"nativeSrc": "2274:39:20",
"nodeType": "YulFunctionCall",
"src": "2274:39:20"
},
"variables": [
{
"name": "length",
"nativeSrc": "2264:6:20",
"nodeType": "YulTypedName",
"src": "2264:6:20",
"type": ""
}
]
},
{
"nativeSrc": "2322:78:20",
"nodeType": "YulAssignment",
"src": "2322:78:20",
"value": {
"arguments": [
{
"name": "pos",
"nativeSrc": "2388:3:20",
"nodeType": "YulIdentifier",
"src": "2388:3:20"
},
{
"name": "length",
"nativeSrc": "2393:6:20",
"nodeType": "YulIdentifier",
"src": "2393:6:20"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
"nativeSrc": "2329:58:20",
"nodeType": "YulIdentifier",
"src": "2329:58:20"
},
"nativeSrc": "2329:71:20",
"nodeType": "YulFunctionCall",
"src": "2329:71:20"
},
"variableNames": [
{
"name": "pos",
"nativeSrc": "2322:3:20",
"nodeType": "YulIdentifier",
"src": "2322:3:20"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "2448:5:20",
"nodeType": "YulIdentifier",
"src": "2448:5:20"
},
{
"kind": "number",
"nativeSrc": "2455:4:20",
"nodeType": "YulLiteral",
"src": "2455:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "2444:3:20",
"nodeType": "YulIdentifier",
"src": "2444:3:20"
},
"nativeSrc": "2444:16:20",
"nodeType": "YulFunctionCall",
"src": "2444:16:20"
},
{
"name": "pos",
"nativeSrc": "2462:3:20",
"nodeType": "YulIdentifier",
"src": "2462:3:20"
},
{
"name": "length",
"nativeSrc": "2467:6:20",
"nodeType": "YulIdentifier",
"src": "2467:6:20"
}
],
"functionName": {
"name": "copy_memory_to_memory_with_cleanup",
"nativeSrc": "2409:34:20",
"nodeType": "YulIdentifier",
"src": "2409:34:20"
},
"nativeSrc": "2409:65:20",
"nodeType": "YulFunctionCall",
"src": "2409:65:20"
},
"nativeSrc": "2409:65:20",
"nodeType": "YulExpressionStatement",
"src": "2409:65:20"
},
{
"nativeSrc": "2483:46:20",
"nodeType": "YulAssignment",
"src": "2483:46:20",
"value": {
"arguments": [
{
"name": "pos",
"nativeSrc": "2494:3:20",
"nodeType": "YulIdentifier",
"src": "2494:3:20"
},
{
"arguments": [
{
"name": "length",
"nativeSrc": "2521:6:20",
"nodeType": "YulIdentifier",
"src": "2521:6:20"
}
],
"functionName": {
"name": "round_up_to_mul_of_32",
"nativeSrc": "2499:21:20",
"nodeType": "YulIdentifier",
"src": "2499:21:20"
},
"nativeSrc": "2499:29:20",
"nodeType": "YulFunctionCall",
"src": "2499:29:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "2490:3:20",
"nodeType": "YulIdentifier",
"src": "2490:3:20"
},
"nativeSrc": "2490:39:20",
"nodeType": "YulFunctionCall",
"src": "2490:39:20"
},
"variableNames": [
{
"name": "end",
"nativeSrc": "2483:3:20",
"nodeType": "YulIdentifier",
"src": "2483:3:20"
}
]
}
]
},
"name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack",
"nativeSrc": "2158:377:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "2231:5:20",
"nodeType": "YulTypedName",
"src": "2231:5:20",
"type": ""
},
{
"name": "pos",
"nativeSrc": "2238:3:20",
"nodeType": "YulTypedName",
"src": "2238:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nativeSrc": "2246:3:20",
"nodeType": "YulTypedName",
"src": "2246:3:20",
"type": ""
}
],
"src": "2158:377:20"
},
{
"body": {
"nativeSrc": "2659:195:20",
"nodeType": "YulBlock",
"src": "2659:195:20",
"statements": [
{
"nativeSrc": "2669:26:20",
"nodeType": "YulAssignment",
"src": "2669:26:20",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "2681:9:20",
"nodeType": "YulIdentifier",
"src": "2681:9:20"
},
{
"kind": "number",
"nativeSrc": "2692:2:20",
"nodeType": "YulLiteral",
"src": "2692:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "2677:3:20",
"nodeType": "YulIdentifier",
"src": "2677:3:20"
},
"nativeSrc": "2677:18:20",
"nodeType": "YulFunctionCall",
"src": "2677:18:20"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "2669:4:20",
"nodeType": "YulIdentifier",
"src": "2669:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "2716:9:20",
"nodeType": "YulIdentifier",
"src": "2716:9:20"
},
{
"kind": "number",
"nativeSrc": "2727:1:20",
"nodeType": "YulLiteral",
"src": "2727:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "2712:3:20",
"nodeType": "YulIdentifier",
"src": "2712:3:20"
},
"nativeSrc": "2712:17:20",
"nodeType": "YulFunctionCall",
"src": "2712:17:20"
},
{
"arguments": [
{
"name": "tail",
"nativeSrc": "2735:4:20",
"nodeType": "YulIdentifier",
"src": "2735:4:20"
},
{
"name": "headStart",
"nativeSrc": "2741:9:20",
"nodeType": "YulIdentifier",
"src": "2741:9:20"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "2731:3:20",
"nodeType": "YulIdentifier",
"src": "2731:3:20"
},
"nativeSrc": "2731:20:20",
"nodeType": "YulFunctionCall",
"src": "2731:20:20"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "2705:6:20",
"nodeType": "YulIdentifier",
"src": "2705:6:20"
},
"nativeSrc": "2705:47:20",
"nodeType": "YulFunctionCall",
"src": "2705:47:20"
},
"nativeSrc": "2705:47:20",
"nodeType": "YulExpressionStatement",
"src": "2705:47:20"
},
{
"nativeSrc": "2761:86:20",
"nodeType": "YulAssignment",
"src": "2761:86:20",
"value": {
"arguments": [
{
"name": "value0",
"nativeSrc": "2833:6:20",
"nodeType": "YulIdentifier",
"src": "2833:6:20"
},
{
"name": "tail",
"nativeSrc": "2842:4:20",
"nodeType": "YulIdentifier",
"src": "2842:4:20"
}
],
"functionName": {
"name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack",
"nativeSrc": "2769:63:20",
"nodeType": "YulIdentifier",
"src": "2769:63:20"
},
"nativeSrc": "2769:78:20",
"nodeType": "YulFunctionCall",
"src": "2769:78:20"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "2761:4:20",
"nodeType": "YulIdentifier",
"src": "2761:4:20"
}
]
}
]
},
"name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
"nativeSrc": "2541:313:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "2631:9:20",
"nodeType": "YulTypedName",
"src": "2631:9:20",
"type": ""
},
{
"name": "value0",
"nativeSrc": "2643:6:20",
"nodeType": "YulTypedName",
"src": "2643:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "2654:4:20",
"nodeType": "YulTypedName",
"src": "2654:4:20",
"type": ""
}
],
"src": "2541:313:20"
},
{
"body": {
"nativeSrc": "2905:32:20",
"nodeType": "YulBlock",
"src": "2905:32:20",
"statements": [
{
"nativeSrc": "2915:16:20",
"nodeType": "YulAssignment",
"src": "2915:16:20",
"value": {
"name": "value",
"nativeSrc": "2926:5:20",
"nodeType": "YulIdentifier",
"src": "2926:5:20"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "2915:7:20",
"nodeType": "YulIdentifier",
"src": "2915:7:20"
}
]
}
]
},
"name": "cleanup_t_uint256",
"nativeSrc": "2860:77:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "2887:5:20",
"nodeType": "YulTypedName",
"src": "2887:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "2897:7:20",
"nodeType": "YulTypedName",
"src": "2897:7:20",
"type": ""
}
],
"src": "2860:77:20"
},
{
"body": {
"nativeSrc": "2986:79:20",
"nodeType": "YulBlock",
"src": "2986:79:20",
"statements": [
{
"body": {
"nativeSrc": "3043:16:20",
"nodeType": "YulBlock",
"src": "3043:16:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "3052:1:20",
"nodeType": "YulLiteral",
"src": "3052:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "3055:1:20",
"nodeType": "YulLiteral",
"src": "3055:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "3045:6:20",
"nodeType": "YulIdentifier",
"src": "3045:6:20"
},
"nativeSrc": "3045:12:20",
"nodeType": "YulFunctionCall",
"src": "3045:12:20"
},
"nativeSrc": "3045:12:20",
"nodeType": "YulExpressionStatement",
"src": "3045:12:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "3009:5:20",
"nodeType": "YulIdentifier",
"src": "3009:5:20"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "3034:5:20",
"nodeType": "YulIdentifier",
"src": "3034:5:20"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "3016:17:20",
"nodeType": "YulIdentifier",
"src": "3016:17:20"
},
"nativeSrc": "3016:24:20",
"nodeType": "YulFunctionCall",
"src": "3016:24:20"
}
],
"functionName": {
"name": "eq",
"nativeSrc": "3006:2:20",
"nodeType": "YulIdentifier",
"src": "3006:2:20"
},
"nativeSrc": "3006:35:20",
"nodeType": "YulFunctionCall",
"src": "3006:35:20"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "2999:6:20",
"nodeType": "YulIdentifier",
"src": "2999:6:20"
},
"nativeSrc": "2999:43:20",
"nodeType": "YulFunctionCall",
"src": "2999:43:20"
},
"nativeSrc": "2996:63:20",
"nodeType": "YulIf",
"src": "2996:63:20"
}
]
},
"name": "validator_revert_t_uint256",
"nativeSrc": "2943:122:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "2979:5:20",
"nodeType": "YulTypedName",
"src": "2979:5:20",
"type": ""
}
],
"src": "2943:122:20"
},
{
"body": {
"nativeSrc": "3123:87:20",
"nodeType": "YulBlock",
"src": "3123:87:20",
"statements": [
{
"nativeSrc": "3133:29:20",
"nodeType": "YulAssignment",
"src": "3133:29:20",
"value": {
"arguments": [
{
"name": "offset",
"nativeSrc": "3155:6:20",
"nodeType": "YulIdentifier",
"src": "3155:6:20"
}
],
"functionName": {
"name": "calldataload",
"nativeSrc": "3142:12:20",
"nodeType": "YulIdentifier",
"src": "3142:12:20"
},
"nativeSrc": "3142:20:20",
"nodeType": "YulFunctionCall",
"src": "3142:20:20"
},
"variableNames": [
{
"name": "value",
"nativeSrc": "3133:5:20",
"nodeType": "YulIdentifier",
"src": "3133:5:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nativeSrc": "3198:5:20",
"nodeType": "YulIdentifier",
"src": "3198:5:20"
}
],
"functionName": {
"name": "validator_revert_t_uint256",
"nativeSrc": "3171:26:20",
"nodeType": "YulIdentifier",
"src": "3171:26:20"
},
"nativeSrc": "3171:33:20",
"nodeType": "YulFunctionCall",
"src": "3171:33:20"
},
"nativeSrc": "3171:33:20",
"nodeType": "YulExpressionStatement",
"src": "3171:33:20"
}
]
},
"name": "abi_decode_t_uint256",
"nativeSrc": "3071:139:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nativeSrc": "3101:6:20",
"nodeType": "YulTypedName",
"src": "3101:6:20",
"type": ""
},
{
"name": "end",
"nativeSrc": "3109:3:20",
"nodeType": "YulTypedName",
"src": "3109:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nativeSrc": "3117:5:20",
"nodeType": "YulTypedName",
"src": "3117:5:20",
"type": ""
}
],
"src": "3071:139:20"
},
{
"body": {
"nativeSrc": "3282:263:20",
"nodeType": "YulBlock",
"src": "3282:263:20",
"statements": [
{
"body": {
"nativeSrc": "3328:83:20",
"nodeType": "YulBlock",
"src": "3328:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "3330:77:20",
"nodeType": "YulIdentifier",
"src": "3330:77:20"
},
"nativeSrc": "3330:79:20",
"nodeType": "YulFunctionCall",
"src": "3330:79:20"
},
"nativeSrc": "3330:79:20",
"nodeType": "YulExpressionStatement",
"src": "3330:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "3303:7:20",
"nodeType": "YulIdentifier",
"src": "3303:7:20"
},
{
"name": "headStart",
"nativeSrc": "3312:9:20",
"nodeType": "YulIdentifier",
"src": "3312:9:20"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "3299:3:20",
"nodeType": "YulIdentifier",
"src": "3299:3:20"
},
"nativeSrc": "3299:23:20",
"nodeType": "YulFunctionCall",
"src": "3299:23:20"
},
{
"kind": "number",
"nativeSrc": "3324:2:20",
"nodeType": "YulLiteral",
"src": "3324:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "3295:3:20",
"nodeType": "YulIdentifier",
"src": "3295:3:20"
},
"nativeSrc": "3295:32:20",
"nodeType": "YulFunctionCall",
"src": "3295:32:20"
},
"nativeSrc": "3292:119:20",
"nodeType": "YulIf",
"src": "3292:119:20"
},
{
"nativeSrc": "3421:117:20",
"nodeType": "YulBlock",
"src": "3421:117:20",
"statements": [
{
"nativeSrc": "3436:15:20",
"nodeType": "YulVariableDeclaration",
"src": "3436:15:20",
"value": {
"kind": "number",
"nativeSrc": "3450:1:20",
"nodeType": "YulLiteral",
"src": "3450:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "3440:6:20",
"nodeType": "YulTypedName",
"src": "3440:6:20",
"type": ""
}
]
},
{
"nativeSrc": "3465:63:20",
"nodeType": "YulAssignment",
"src": "3465:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "3500:9:20",
"nodeType": "YulIdentifier",
"src": "3500:9:20"
},
{
"name": "offset",
"nativeSrc": "3511:6:20",
"nodeType": "YulIdentifier",
"src": "3511:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "3496:3:20",
"nodeType": "YulIdentifier",
"src": "3496:3:20"
},
"nativeSrc": "3496:22:20",
"nodeType": "YulFunctionCall",
"src": "3496:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "3520:7:20",
"nodeType": "YulIdentifier",
"src": "3520:7:20"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nativeSrc": "3475:20:20",
"nodeType": "YulIdentifier",
"src": "3475:20:20"
},
"nativeSrc": "3475:53:20",
"nodeType": "YulFunctionCall",
"src": "3475:53:20"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "3465:6:20",
"nodeType": "YulIdentifier",
"src": "3465:6:20"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_uint256",
"nativeSrc": "3216:329:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "3252:9:20",
"nodeType": "YulTypedName",
"src": "3252:9:20",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "3263:7:20",
"nodeType": "YulTypedName",
"src": "3263:7:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "3275:6:20",
"nodeType": "YulTypedName",
"src": "3275:6:20",
"type": ""
}
],
"src": "3216:329:20"
},
{
"body": {
"nativeSrc": "3596:81:20",
"nodeType": "YulBlock",
"src": "3596:81:20",
"statements": [
{
"nativeSrc": "3606:65:20",
"nodeType": "YulAssignment",
"src": "3606:65:20",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "3621:5:20",
"nodeType": "YulIdentifier",
"src": "3621:5:20"
},
{
"kind": "number",
"nativeSrc": "3628:42:20",
"nodeType": "YulLiteral",
"src": "3628:42:20",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "and",
"nativeSrc": "3617:3:20",
"nodeType": "YulIdentifier",
"src": "3617:3:20"
},
"nativeSrc": "3617:54:20",
"nodeType": "YulFunctionCall",
"src": "3617:54:20"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "3606:7:20",
"nodeType": "YulIdentifier",
"src": "3606:7:20"
}
]
}
]
},
"name": "cleanup_t_uint160",
"nativeSrc": "3551:126:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "3578:5:20",
"nodeType": "YulTypedName",
"src": "3578:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "3588:7:20",
"nodeType": "YulTypedName",
"src": "3588:7:20",
"type": ""
}
],
"src": "3551:126:20"
},
{
"body": {
"nativeSrc": "3728:51:20",
"nodeType": "YulBlock",
"src": "3728:51:20",
"statements": [
{
"nativeSrc": "3738:35:20",
"nodeType": "YulAssignment",
"src": "3738:35:20",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "3767:5:20",
"nodeType": "YulIdentifier",
"src": "3767:5:20"
}
],
"functionName": {
"name": "cleanup_t_uint160",
"nativeSrc": "3749:17:20",
"nodeType": "YulIdentifier",
"src": "3749:17:20"
},
"nativeSrc": "3749:24:20",
"nodeType": "YulFunctionCall",
"src": "3749:24:20"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "3738:7:20",
"nodeType": "YulIdentifier",
"src": "3738:7:20"
}
]
}
]
},
"name": "cleanup_t_address",
"nativeSrc": "3683:96:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "3710:5:20",
"nodeType": "YulTypedName",
"src": "3710:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "3720:7:20",
"nodeType": "YulTypedName",
"src": "3720:7:20",
"type": ""
}
],
"src": "3683:96:20"
},
{
"body": {
"nativeSrc": "3850:53:20",
"nodeType": "YulBlock",
"src": "3850:53:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "3867:3:20",
"nodeType": "YulIdentifier",
"src": "3867:3:20"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "3890:5:20",
"nodeType": "YulIdentifier",
"src": "3890:5:20"
}
],
"functionName": {
"name": "cleanup_t_address",
"nativeSrc": "3872:17:20",
"nodeType": "YulIdentifier",
"src": "3872:17:20"
},
"nativeSrc": "3872:24:20",
"nodeType": "YulFunctionCall",
"src": "3872:24:20"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "3860:6:20",
"nodeType": "YulIdentifier",
"src": "3860:6:20"
},
"nativeSrc": "3860:37:20",
"nodeType": "YulFunctionCall",
"src": "3860:37:20"
},
"nativeSrc": "3860:37:20",
"nodeType": "YulExpressionStatement",
"src": "3860:37:20"
}
]
},
"name": "abi_encode_t_address_to_t_address_fromStack",
"nativeSrc": "3785:118:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "3838:5:20",
"nodeType": "YulTypedName",
"src": "3838:5:20",
"type": ""
},
{
"name": "pos",
"nativeSrc": "3845:3:20",
"nodeType": "YulTypedName",
"src": "3845:3:20",
"type": ""
}
],
"src": "3785:118:20"
},
{
"body": {
"nativeSrc": "4007:124:20",
"nodeType": "YulBlock",
"src": "4007:124:20",
"statements": [
{
"nativeSrc": "4017:26:20",
"nodeType": "YulAssignment",
"src": "4017:26:20",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "4029:9:20",
"nodeType": "YulIdentifier",
"src": "4029:9:20"
},
{
"kind": "number",
"nativeSrc": "4040:2:20",
"nodeType": "YulLiteral",
"src": "4040:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "4025:3:20",
"nodeType": "YulIdentifier",
"src": "4025:3:20"
},
"nativeSrc": "4025:18:20",
"nodeType": "YulFunctionCall",
"src": "4025:18:20"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "4017:4:20",
"nodeType": "YulIdentifier",
"src": "4017:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "4097:6:20",
"nodeType": "YulIdentifier",
"src": "4097:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "4110:9:20",
"nodeType": "YulIdentifier",
"src": "4110:9:20"
},
{
"kind": "number",
"nativeSrc": "4121:1:20",
"nodeType": "YulLiteral",
"src": "4121:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "4106:3:20",
"nodeType": "YulIdentifier",
"src": "4106:3:20"
},
"nativeSrc": "4106:17:20",
"nodeType": "YulFunctionCall",
"src": "4106:17:20"
}
],
"functionName": {
"name": "abi_encode_t_address_to_t_address_fromStack",
"nativeSrc": "4053:43:20",
"nodeType": "YulIdentifier",
"src": "4053:43:20"
},
"nativeSrc": "4053:71:20",
"nodeType": "YulFunctionCall",
"src": "4053:71:20"
},
"nativeSrc": "4053:71:20",
"nodeType": "YulExpressionStatement",
"src": "4053:71:20"
}
]
},
"name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
"nativeSrc": "3909:222:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "3979:9:20",
"nodeType": "YulTypedName",
"src": "3979:9:20",
"type": ""
},
{
"name": "value0",
"nativeSrc": "3991:6:20",
"nodeType": "YulTypedName",
"src": "3991:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "4002:4:20",
"nodeType": "YulTypedName",
"src": "4002:4:20",
"type": ""
}
],
"src": "3909:222:20"
},
{
"body": {
"nativeSrc": "4180:79:20",
"nodeType": "YulBlock",
"src": "4180:79:20",
"statements": [
{
"body": {
"nativeSrc": "4237:16:20",
"nodeType": "YulBlock",
"src": "4237:16:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "4246:1:20",
"nodeType": "YulLiteral",
"src": "4246:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "4249:1:20",
"nodeType": "YulLiteral",
"src": "4249:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "4239:6:20",
"nodeType": "YulIdentifier",
"src": "4239:6:20"
},
"nativeSrc": "4239:12:20",
"nodeType": "YulFunctionCall",
"src": "4239:12:20"
},
"nativeSrc": "4239:12:20",
"nodeType": "YulExpressionStatement",
"src": "4239:12:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "4203:5:20",
"nodeType": "YulIdentifier",
"src": "4203:5:20"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "4228:5:20",
"nodeType": "YulIdentifier",
"src": "4228:5:20"
}
],
"functionName": {
"name": "cleanup_t_address",
"nativeSrc": "4210:17:20",
"nodeType": "YulIdentifier",
"src": "4210:17:20"
},
"nativeSrc": "4210:24:20",
"nodeType": "YulFunctionCall",
"src": "4210:24:20"
}
],
"functionName": {
"name": "eq",
"nativeSrc": "4200:2:20",
"nodeType": "YulIdentifier",
"src": "4200:2:20"
},
"nativeSrc": "4200:35:20",
"nodeType": "YulFunctionCall",
"src": "4200:35:20"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "4193:6:20",
"nodeType": "YulIdentifier",
"src": "4193:6:20"
},
"nativeSrc": "4193:43:20",
"nodeType": "YulFunctionCall",
"src": "4193:43:20"
},
"nativeSrc": "4190:63:20",
"nodeType": "YulIf",
"src": "4190:63:20"
}
]
},
"name": "validator_revert_t_address",
"nativeSrc": "4137:122:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "4173:5:20",
"nodeType": "YulTypedName",
"src": "4173:5:20",
"type": ""
}
],
"src": "4137:122:20"
},
{
"body": {
"nativeSrc": "4317:87:20",
"nodeType": "YulBlock",
"src": "4317:87:20",
"statements": [
{
"nativeSrc": "4327:29:20",
"nodeType": "YulAssignment",
"src": "4327:29:20",
"value": {
"arguments": [
{
"name": "offset",
"nativeSrc": "4349:6:20",
"nodeType": "YulIdentifier",
"src": "4349:6:20"
}
],
"functionName": {
"name": "calldataload",
"nativeSrc": "4336:12:20",
"nodeType": "YulIdentifier",
"src": "4336:12:20"
},
"nativeSrc": "4336:20:20",
"nodeType": "YulFunctionCall",
"src": "4336:20:20"
},
"variableNames": [
{
"name": "value",
"nativeSrc": "4327:5:20",
"nodeType": "YulIdentifier",
"src": "4327:5:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nativeSrc": "4392:5:20",
"nodeType": "YulIdentifier",
"src": "4392:5:20"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nativeSrc": "4365:26:20",
"nodeType": "YulIdentifier",
"src": "4365:26:20"
},
"nativeSrc": "4365:33:20",
"nodeType": "YulFunctionCall",
"src": "4365:33:20"
},
"nativeSrc": "4365:33:20",
"nodeType": "YulExpressionStatement",
"src": "4365:33:20"
}
]
},
"name": "abi_decode_t_address",
"nativeSrc": "4265:139:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nativeSrc": "4295:6:20",
"nodeType": "YulTypedName",
"src": "4295:6:20",
"type": ""
},
{
"name": "end",
"nativeSrc": "4303:3:20",
"nodeType": "YulTypedName",
"src": "4303:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nativeSrc": "4311:5:20",
"nodeType": "YulTypedName",
"src": "4311:5:20",
"type": ""
}
],
"src": "4265:139:20"
},
{
"body": {
"nativeSrc": "4493:391:20",
"nodeType": "YulBlock",
"src": "4493:391:20",
"statements": [
{
"body": {
"nativeSrc": "4539:83:20",
"nodeType": "YulBlock",
"src": "4539:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "4541:77:20",
"nodeType": "YulIdentifier",
"src": "4541:77:20"
},
"nativeSrc": "4541:79:20",
"nodeType": "YulFunctionCall",
"src": "4541:79:20"
},
"nativeSrc": "4541:79:20",
"nodeType": "YulExpressionStatement",
"src": "4541:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "4514:7:20",
"nodeType": "YulIdentifier",
"src": "4514:7:20"
},
{
"name": "headStart",
"nativeSrc": "4523:9:20",
"nodeType": "YulIdentifier",
"src": "4523:9:20"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "4510:3:20",
"nodeType": "YulIdentifier",
"src": "4510:3:20"
},
"nativeSrc": "4510:23:20",
"nodeType": "YulFunctionCall",
"src": "4510:23:20"
},
{
"kind": "number",
"nativeSrc": "4535:2:20",
"nodeType": "YulLiteral",
"src": "4535:2:20",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "4506:3:20",
"nodeType": "YulIdentifier",
"src": "4506:3:20"
},
"nativeSrc": "4506:32:20",
"nodeType": "YulFunctionCall",
"src": "4506:32:20"
},
"nativeSrc": "4503:119:20",
"nodeType": "YulIf",
"src": "4503:119:20"
},
{
"nativeSrc": "4632:117:20",
"nodeType": "YulBlock",
"src": "4632:117:20",
"statements": [
{
"nativeSrc": "4647:15:20",
"nodeType": "YulVariableDeclaration",
"src": "4647:15:20",
"value": {
"kind": "number",
"nativeSrc": "4661:1:20",
"nodeType": "YulLiteral",
"src": "4661:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "4651:6:20",
"nodeType": "YulTypedName",
"src": "4651:6:20",
"type": ""
}
]
},
{
"nativeSrc": "4676:63:20",
"nodeType": "YulAssignment",
"src": "4676:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "4711:9:20",
"nodeType": "YulIdentifier",
"src": "4711:9:20"
},
{
"name": "offset",
"nativeSrc": "4722:6:20",
"nodeType": "YulIdentifier",
"src": "4722:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "4707:3:20",
"nodeType": "YulIdentifier",
"src": "4707:3:20"
},
"nativeSrc": "4707:22:20",
"nodeType": "YulFunctionCall",
"src": "4707:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "4731:7:20",
"nodeType": "YulIdentifier",
"src": "4731:7:20"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nativeSrc": "4686:20:20",
"nodeType": "YulIdentifier",
"src": "4686:20:20"
},
"nativeSrc": "4686:53:20",
"nodeType": "YulFunctionCall",
"src": "4686:53:20"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "4676:6:20",
"nodeType": "YulIdentifier",
"src": "4676:6:20"
}
]
}
]
},
{
"nativeSrc": "4759:118:20",
"nodeType": "YulBlock",
"src": "4759:118:20",
"statements": [
{
"nativeSrc": "4774:16:20",
"nodeType": "YulVariableDeclaration",
"src": "4774:16:20",
"value": {
"kind": "number",
"nativeSrc": "4788:2:20",
"nodeType": "YulLiteral",
"src": "4788:2:20",
"type": "",
"value": "32"
},
"variables": [
{
"name": "offset",
"nativeSrc": "4778:6:20",
"nodeType": "YulTypedName",
"src": "4778:6:20",
"type": ""
}
]
},
{
"nativeSrc": "4804:63:20",
"nodeType": "YulAssignment",
"src": "4804:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "4839:9:20",
"nodeType": "YulIdentifier",
"src": "4839:9:20"
},
{
"name": "offset",
"nativeSrc": "4850:6:20",
"nodeType": "YulIdentifier",
"src": "4850:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "4835:3:20",
"nodeType": "YulIdentifier",
"src": "4835:3:20"
},
"nativeSrc": "4835:22:20",
"nodeType": "YulFunctionCall",
"src": "4835:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "4859:7:20",
"nodeType": "YulIdentifier",
"src": "4859:7:20"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nativeSrc": "4814:20:20",
"nodeType": "YulIdentifier",
"src": "4814:20:20"
},
"nativeSrc": "4814:53:20",
"nodeType": "YulFunctionCall",
"src": "4814:53:20"
},
"variableNames": [
{
"name": "value1",
"nativeSrc": "4804:6:20",
"nodeType": "YulIdentifier",
"src": "4804:6:20"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_uint256",
"nativeSrc": "4410:474:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "4455:9:20",
"nodeType": "YulTypedName",
"src": "4455:9:20",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "4466:7:20",
"nodeType": "YulTypedName",
"src": "4466:7:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "4478:6:20",
"nodeType": "YulTypedName",
"src": "4478:6:20",
"type": ""
},
{
"name": "value1",
"nativeSrc": "4486:6:20",
"nodeType": "YulTypedName",
"src": "4486:6:20",
"type": ""
}
],
"src": "4410:474:20"
},
{
"body": {
"nativeSrc": "4990:519:20",
"nodeType": "YulBlock",
"src": "4990:519:20",
"statements": [
{
"body": {
"nativeSrc": "5036:83:20",
"nodeType": "YulBlock",
"src": "5036:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "5038:77:20",
"nodeType": "YulIdentifier",
"src": "5038:77:20"
},
"nativeSrc": "5038:79:20",
"nodeType": "YulFunctionCall",
"src": "5038:79:20"
},
"nativeSrc": "5038:79:20",
"nodeType": "YulExpressionStatement",
"src": "5038:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "5011:7:20",
"nodeType": "YulIdentifier",
"src": "5011:7:20"
},
{
"name": "headStart",
"nativeSrc": "5020:9:20",
"nodeType": "YulIdentifier",
"src": "5020:9:20"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "5007:3:20",
"nodeType": "YulIdentifier",
"src": "5007:3:20"
},
"nativeSrc": "5007:23:20",
"nodeType": "YulFunctionCall",
"src": "5007:23:20"
},
{
"kind": "number",
"nativeSrc": "5032:2:20",
"nodeType": "YulLiteral",
"src": "5032:2:20",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "5003:3:20",
"nodeType": "YulIdentifier",
"src": "5003:3:20"
},
"nativeSrc": "5003:32:20",
"nodeType": "YulFunctionCall",
"src": "5003:32:20"
},
"nativeSrc": "5000:119:20",
"nodeType": "YulIf",
"src": "5000:119:20"
},
{
"nativeSrc": "5129:117:20",
"nodeType": "YulBlock",
"src": "5129:117:20",
"statements": [
{
"nativeSrc": "5144:15:20",
"nodeType": "YulVariableDeclaration",
"src": "5144:15:20",
"value": {
"kind": "number",
"nativeSrc": "5158:1:20",
"nodeType": "YulLiteral",
"src": "5158:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "5148:6:20",
"nodeType": "YulTypedName",
"src": "5148:6:20",
"type": ""
}
]
},
{
"nativeSrc": "5173:63:20",
"nodeType": "YulAssignment",
"src": "5173:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "5208:9:20",
"nodeType": "YulIdentifier",
"src": "5208:9:20"
},
{
"name": "offset",
"nativeSrc": "5219:6:20",
"nodeType": "YulIdentifier",
"src": "5219:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "5204:3:20",
"nodeType": "YulIdentifier",
"src": "5204:3:20"
},
"nativeSrc": "5204:22:20",
"nodeType": "YulFunctionCall",
"src": "5204:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "5228:7:20",
"nodeType": "YulIdentifier",
"src": "5228:7:20"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nativeSrc": "5183:20:20",
"nodeType": "YulIdentifier",
"src": "5183:20:20"
},
"nativeSrc": "5183:53:20",
"nodeType": "YulFunctionCall",
"src": "5183:53:20"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "5173:6:20",
"nodeType": "YulIdentifier",
"src": "5173:6:20"
}
]
}
]
},
{
"nativeSrc": "5256:118:20",
"nodeType": "YulBlock",
"src": "5256:118:20",
"statements": [
{
"nativeSrc": "5271:16:20",
"nodeType": "YulVariableDeclaration",
"src": "5271:16:20",
"value": {
"kind": "number",
"nativeSrc": "5285:2:20",
"nodeType": "YulLiteral",
"src": "5285:2:20",
"type": "",
"value": "32"
},
"variables": [
{
"name": "offset",
"nativeSrc": "5275:6:20",
"nodeType": "YulTypedName",
"src": "5275:6:20",
"type": ""
}
]
},
{
"nativeSrc": "5301:63:20",
"nodeType": "YulAssignment",
"src": "5301:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "5336:9:20",
"nodeType": "YulIdentifier",
"src": "5336:9:20"
},
{
"name": "offset",
"nativeSrc": "5347:6:20",
"nodeType": "YulIdentifier",
"src": "5347:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "5332:3:20",
"nodeType": "YulIdentifier",
"src": "5332:3:20"
},
"nativeSrc": "5332:22:20",
"nodeType": "YulFunctionCall",
"src": "5332:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "5356:7:20",
"nodeType": "YulIdentifier",
"src": "5356:7:20"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nativeSrc": "5311:20:20",
"nodeType": "YulIdentifier",
"src": "5311:20:20"
},
"nativeSrc": "5311:53:20",
"nodeType": "YulFunctionCall",
"src": "5311:53:20"
},
"variableNames": [
{
"name": "value1",
"nativeSrc": "5301:6:20",
"nodeType": "YulIdentifier",
"src": "5301:6:20"
}
]
}
]
},
{
"nativeSrc": "5384:118:20",
"nodeType": "YulBlock",
"src": "5384:118:20",
"statements": [
{
"nativeSrc": "5399:16:20",
"nodeType": "YulVariableDeclaration",
"src": "5399:16:20",
"value": {
"kind": "number",
"nativeSrc": "5413:2:20",
"nodeType": "YulLiteral",
"src": "5413:2:20",
"type": "",
"value": "64"
},
"variables": [
{
"name": "offset",
"nativeSrc": "5403:6:20",
"nodeType": "YulTypedName",
"src": "5403:6:20",
"type": ""
}
]
},
{
"nativeSrc": "5429:63:20",
"nodeType": "YulAssignment",
"src": "5429:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "5464:9:20",
"nodeType": "YulIdentifier",
"src": "5464:9:20"
},
{
"name": "offset",
"nativeSrc": "5475:6:20",
"nodeType": "YulIdentifier",
"src": "5475:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "5460:3:20",
"nodeType": "YulIdentifier",
"src": "5460:3:20"
},
"nativeSrc": "5460:22:20",
"nodeType": "YulFunctionCall",
"src": "5460:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "5484:7:20",
"nodeType": "YulIdentifier",
"src": "5484:7:20"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nativeSrc": "5439:20:20",
"nodeType": "YulIdentifier",
"src": "5439:20:20"
},
"nativeSrc": "5439:53:20",
"nodeType": "YulFunctionCall",
"src": "5439:53:20"
},
"variableNames": [
{
"name": "value2",
"nativeSrc": "5429:6:20",
"nodeType": "YulIdentifier",
"src": "5429:6:20"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_addresst_uint256",
"nativeSrc": "4890:619:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "4944:9:20",
"nodeType": "YulTypedName",
"src": "4944:9:20",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "4955:7:20",
"nodeType": "YulTypedName",
"src": "4955:7:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "4967:6:20",
"nodeType": "YulTypedName",
"src": "4967:6:20",
"type": ""
},
{
"name": "value1",
"nativeSrc": "4975:6:20",
"nodeType": "YulTypedName",
"src": "4975:6:20",
"type": ""
},
{
"name": "value2",
"nativeSrc": "4983:6:20",
"nodeType": "YulTypedName",
"src": "4983:6:20",
"type": ""
}
],
"src": "4890:619:20"
},
{
"body": {
"nativeSrc": "5555:76:20",
"nodeType": "YulBlock",
"src": "5555:76:20",
"statements": [
{
"body": {
"nativeSrc": "5609:16:20",
"nodeType": "YulBlock",
"src": "5609:16:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "5618:1:20",
"nodeType": "YulLiteral",
"src": "5618:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "5621:1:20",
"nodeType": "YulLiteral",
"src": "5621:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "5611:6:20",
"nodeType": "YulIdentifier",
"src": "5611:6:20"
},
"nativeSrc": "5611:12:20",
"nodeType": "YulFunctionCall",
"src": "5611:12:20"
},
"nativeSrc": "5611:12:20",
"nodeType": "YulExpressionStatement",
"src": "5611:12:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "5578:5:20",
"nodeType": "YulIdentifier",
"src": "5578:5:20"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "5600:5:20",
"nodeType": "YulIdentifier",
"src": "5600:5:20"
}
],
"functionName": {
"name": "cleanup_t_bool",
"nativeSrc": "5585:14:20",
"nodeType": "YulIdentifier",
"src": "5585:14:20"
},
"nativeSrc": "5585:21:20",
"nodeType": "YulFunctionCall",
"src": "5585:21:20"
}
],
"functionName": {
"name": "eq",
"nativeSrc": "5575:2:20",
"nodeType": "YulIdentifier",
"src": "5575:2:20"
},
"nativeSrc": "5575:32:20",
"nodeType": "YulFunctionCall",
"src": "5575:32:20"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "5568:6:20",
"nodeType": "YulIdentifier",
"src": "5568:6:20"
},
"nativeSrc": "5568:40:20",
"nodeType": "YulFunctionCall",
"src": "5568:40:20"
},
"nativeSrc": "5565:60:20",
"nodeType": "YulIf",
"src": "5565:60:20"
}
]
},
"name": "validator_revert_t_bool",
"nativeSrc": "5515:116:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "5548:5:20",
"nodeType": "YulTypedName",
"src": "5548:5:20",
"type": ""
}
],
"src": "5515:116:20"
},
{
"body": {
"nativeSrc": "5686:84:20",
"nodeType": "YulBlock",
"src": "5686:84:20",
"statements": [
{
"nativeSrc": "5696:29:20",
"nodeType": "YulAssignment",
"src": "5696:29:20",
"value": {
"arguments": [
{
"name": "offset",
"nativeSrc": "5718:6:20",
"nodeType": "YulIdentifier",
"src": "5718:6:20"
}
],
"functionName": {
"name": "calldataload",
"nativeSrc": "5705:12:20",
"nodeType": "YulIdentifier",
"src": "5705:12:20"
},
"nativeSrc": "5705:20:20",
"nodeType": "YulFunctionCall",
"src": "5705:20:20"
},
"variableNames": [
{
"name": "value",
"nativeSrc": "5696:5:20",
"nodeType": "YulIdentifier",
"src": "5696:5:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nativeSrc": "5758:5:20",
"nodeType": "YulIdentifier",
"src": "5758:5:20"
}
],
"functionName": {
"name": "validator_revert_t_bool",
"nativeSrc": "5734:23:20",
"nodeType": "YulIdentifier",
"src": "5734:23:20"
},
"nativeSrc": "5734:30:20",
"nodeType": "YulFunctionCall",
"src": "5734:30:20"
},
"nativeSrc": "5734:30:20",
"nodeType": "YulExpressionStatement",
"src": "5734:30:20"
}
]
},
"name": "abi_decode_t_bool",
"nativeSrc": "5637:133:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nativeSrc": "5664:6:20",
"nodeType": "YulTypedName",
"src": "5664:6:20",
"type": ""
},
{
"name": "end",
"nativeSrc": "5672:3:20",
"nodeType": "YulTypedName",
"src": "5672:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nativeSrc": "5680:5:20",
"nodeType": "YulTypedName",
"src": "5680:5:20",
"type": ""
}
],
"src": "5637:133:20"
},
{
"body": {
"nativeSrc": "5839:260:20",
"nodeType": "YulBlock",
"src": "5839:260:20",
"statements": [
{
"body": {
"nativeSrc": "5885:83:20",
"nodeType": "YulBlock",
"src": "5885:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "5887:77:20",
"nodeType": "YulIdentifier",
"src": "5887:77:20"
},
"nativeSrc": "5887:79:20",
"nodeType": "YulFunctionCall",
"src": "5887:79:20"
},
"nativeSrc": "5887:79:20",
"nodeType": "YulExpressionStatement",
"src": "5887:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "5860:7:20",
"nodeType": "YulIdentifier",
"src": "5860:7:20"
},
{
"name": "headStart",
"nativeSrc": "5869:9:20",
"nodeType": "YulIdentifier",
"src": "5869:9:20"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "5856:3:20",
"nodeType": "YulIdentifier",
"src": "5856:3:20"
},
"nativeSrc": "5856:23:20",
"nodeType": "YulFunctionCall",
"src": "5856:23:20"
},
{
"kind": "number",
"nativeSrc": "5881:2:20",
"nodeType": "YulLiteral",
"src": "5881:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "5852:3:20",
"nodeType": "YulIdentifier",
"src": "5852:3:20"
},
"nativeSrc": "5852:32:20",
"nodeType": "YulFunctionCall",
"src": "5852:32:20"
},
"nativeSrc": "5849:119:20",
"nodeType": "YulIf",
"src": "5849:119:20"
},
{
"nativeSrc": "5978:114:20",
"nodeType": "YulBlock",
"src": "5978:114:20",
"statements": [
{
"nativeSrc": "5993:15:20",
"nodeType": "YulVariableDeclaration",
"src": "5993:15:20",
"value": {
"kind": "number",
"nativeSrc": "6007:1:20",
"nodeType": "YulLiteral",
"src": "6007:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "5997:6:20",
"nodeType": "YulTypedName",
"src": "5997:6:20",
"type": ""
}
]
},
{
"nativeSrc": "6022:60:20",
"nodeType": "YulAssignment",
"src": "6022:60:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "6054:9:20",
"nodeType": "YulIdentifier",
"src": "6054:9:20"
},
{
"name": "offset",
"nativeSrc": "6065:6:20",
"nodeType": "YulIdentifier",
"src": "6065:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "6050:3:20",
"nodeType": "YulIdentifier",
"src": "6050:3:20"
},
"nativeSrc": "6050:22:20",
"nodeType": "YulFunctionCall",
"src": "6050:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "6074:7:20",
"nodeType": "YulIdentifier",
"src": "6074:7:20"
}
],
"functionName": {
"name": "abi_decode_t_bool",
"nativeSrc": "6032:17:20",
"nodeType": "YulIdentifier",
"src": "6032:17:20"
},
"nativeSrc": "6032:50:20",
"nodeType": "YulFunctionCall",
"src": "6032:50:20"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "6022:6:20",
"nodeType": "YulIdentifier",
"src": "6022:6:20"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_bool",
"nativeSrc": "5776:323:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "5809:9:20",
"nodeType": "YulTypedName",
"src": "5809:9:20",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "5820:7:20",
"nodeType": "YulTypedName",
"src": "5820:7:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "5832:6:20",
"nodeType": "YulTypedName",
"src": "5832:6:20",
"type": ""
}
],
"src": "5776:323:20"
},
{
"body": {
"nativeSrc": "6194:28:20",
"nodeType": "YulBlock",
"src": "6194:28:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "6211:1:20",
"nodeType": "YulLiteral",
"src": "6211:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "6214:1:20",
"nodeType": "YulLiteral",
"src": "6214:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "6204:6:20",
"nodeType": "YulIdentifier",
"src": "6204:6:20"
},
"nativeSrc": "6204:12:20",
"nodeType": "YulFunctionCall",
"src": "6204:12:20"
},
"nativeSrc": "6204:12:20",
"nodeType": "YulExpressionStatement",
"src": "6204:12:20"
}
]
},
"name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
"nativeSrc": "6105:117:20",
"nodeType": "YulFunctionDefinition",
"src": "6105:117:20"
},
{
"body": {
"nativeSrc": "6317:28:20",
"nodeType": "YulBlock",
"src": "6317:28:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "6334:1:20",
"nodeType": "YulLiteral",
"src": "6334:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "6337:1:20",
"nodeType": "YulLiteral",
"src": "6337:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "6327:6:20",
"nodeType": "YulIdentifier",
"src": "6327:6:20"
},
"nativeSrc": "6327:12:20",
"nodeType": "YulFunctionCall",
"src": "6327:12:20"
},
"nativeSrc": "6327:12:20",
"nodeType": "YulExpressionStatement",
"src": "6327:12:20"
}
]
},
"name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae",
"nativeSrc": "6228:117:20",
"nodeType": "YulFunctionDefinition",
"src": "6228:117:20"
},
{
"body": {
"nativeSrc": "6379:152:20",
"nodeType": "YulBlock",
"src": "6379:152:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "6396:1:20",
"nodeType": "YulLiteral",
"src": "6396:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "6399:77:20",
"nodeType": "YulLiteral",
"src": "6399:77:20",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "6389:6:20",
"nodeType": "YulIdentifier",
"src": "6389:6:20"
},
"nativeSrc": "6389:88:20",
"nodeType": "YulFunctionCall",
"src": "6389:88:20"
},
"nativeSrc": "6389:88:20",
"nodeType": "YulExpressionStatement",
"src": "6389:88:20"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "6493:1:20",
"nodeType": "YulLiteral",
"src": "6493:1:20",
"type": "",
"value": "4"
},
{
"kind": "number",
"nativeSrc": "6496:4:20",
"nodeType": "YulLiteral",
"src": "6496:4:20",
"type": "",
"value": "0x41"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "6486:6:20",
"nodeType": "YulIdentifier",
"src": "6486:6:20"
},
"nativeSrc": "6486:15:20",
"nodeType": "YulFunctionCall",
"src": "6486:15:20"
},
"nativeSrc": "6486:15:20",
"nodeType": "YulExpressionStatement",
"src": "6486:15:20"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "6517:1:20",
"nodeType": "YulLiteral",
"src": "6517:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "6520:4:20",
"nodeType": "YulLiteral",
"src": "6520:4:20",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "6510:6:20",
"nodeType": "YulIdentifier",
"src": "6510:6:20"
},
"nativeSrc": "6510:15:20",
"nodeType": "YulFunctionCall",
"src": "6510:15:20"
},
"nativeSrc": "6510:15:20",
"nodeType": "YulExpressionStatement",
"src": "6510:15:20"
}
]
},
"name": "panic_error_0x41",
"nativeSrc": "6351:180:20",
"nodeType": "YulFunctionDefinition",
"src": "6351:180:20"
},
{
"body": {
"nativeSrc": "6580:238:20",
"nodeType": "YulBlock",
"src": "6580:238:20",
"statements": [
{
"nativeSrc": "6590:58:20",
"nodeType": "YulVariableDeclaration",
"src": "6590:58:20",
"value": {
"arguments": [
{
"name": "memPtr",
"nativeSrc": "6612:6:20",
"nodeType": "YulIdentifier",
"src": "6612:6:20"
},
{
"arguments": [
{
"name": "size",
"nativeSrc": "6642:4:20",
"nodeType": "YulIdentifier",
"src": "6642:4:20"
}
],
"functionName": {
"name": "round_up_to_mul_of_32",
"nativeSrc": "6620:21:20",
"nodeType": "YulIdentifier",
"src": "6620:21:20"
},
"nativeSrc": "6620:27:20",
"nodeType": "YulFunctionCall",
"src": "6620:27:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "6608:3:20",
"nodeType": "YulIdentifier",
"src": "6608:3:20"
},
"nativeSrc": "6608:40:20",
"nodeType": "YulFunctionCall",
"src": "6608:40:20"
},
"variables": [
{
"name": "newFreePtr",
"nativeSrc": "6594:10:20",
"nodeType": "YulTypedName",
"src": "6594:10:20",
"type": ""
}
]
},
{
"body": {
"nativeSrc": "6759:22:20",
"nodeType": "YulBlock",
"src": "6759:22:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x41",
"nativeSrc": "6761:16:20",
"nodeType": "YulIdentifier",
"src": "6761:16:20"
},
"nativeSrc": "6761:18:20",
"nodeType": "YulFunctionCall",
"src": "6761:18:20"
},
"nativeSrc": "6761:18:20",
"nodeType": "YulExpressionStatement",
"src": "6761:18:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "newFreePtr",
"nativeSrc": "6702:10:20",
"nodeType": "YulIdentifier",
"src": "6702:10:20"
},
{
"kind": "number",
"nativeSrc": "6714:18:20",
"nodeType": "YulLiteral",
"src": "6714:18:20",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nativeSrc": "6699:2:20",
"nodeType": "YulIdentifier",
"src": "6699:2:20"
},
"nativeSrc": "6699:34:20",
"nodeType": "YulFunctionCall",
"src": "6699:34:20"
},
{
"arguments": [
{
"name": "newFreePtr",
"nativeSrc": "6738:10:20",
"nodeType": "YulIdentifier",
"src": "6738:10:20"
},
{
"name": "memPtr",
"nativeSrc": "6750:6:20",
"nodeType": "YulIdentifier",
"src": "6750:6:20"
}
],
"functionName": {
"name": "lt",
"nativeSrc": "6735:2:20",
"nodeType": "YulIdentifier",
"src": "6735:2:20"
},
"nativeSrc": "6735:22:20",
"nodeType": "YulFunctionCall",
"src": "6735:22:20"
}
],
"functionName": {
"name": "or",
"nativeSrc": "6696:2:20",
"nodeType": "YulIdentifier",
"src": "6696:2:20"
},
"nativeSrc": "6696:62:20",
"nodeType": "YulFunctionCall",
"src": "6696:62:20"
},
"nativeSrc": "6693:88:20",
"nodeType": "YulIf",
"src": "6693:88:20"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "6797:2:20",
"nodeType": "YulLiteral",
"src": "6797:2:20",
"type": "",
"value": "64"
},
{
"name": "newFreePtr",
"nativeSrc": "6801:10:20",
"nodeType": "YulIdentifier",
"src": "6801:10:20"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "6790:6:20",
"nodeType": "YulIdentifier",
"src": "6790:6:20"
},
"nativeSrc": "6790:22:20",
"nodeType": "YulFunctionCall",
"src": "6790:22:20"
},
"nativeSrc": "6790:22:20",
"nodeType": "YulExpressionStatement",
"src": "6790:22:20"
}
]
},
"name": "finalize_allocation",
"nativeSrc": "6537:281:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "memPtr",
"nativeSrc": "6566:6:20",
"nodeType": "YulTypedName",
"src": "6566:6:20",
"type": ""
},
{
"name": "size",
"nativeSrc": "6574:4:20",
"nodeType": "YulTypedName",
"src": "6574:4:20",
"type": ""
}
],
"src": "6537:281:20"
},
{
"body": {
"nativeSrc": "6865:88:20",
"nodeType": "YulBlock",
"src": "6865:88:20",
"statements": [
{
"nativeSrc": "6875:30:20",
"nodeType": "YulAssignment",
"src": "6875:30:20",
"value": {
"arguments": [],
"functionName": {
"name": "allocate_unbounded",
"nativeSrc": "6885:18:20",
"nodeType": "YulIdentifier",
"src": "6885:18:20"
},
"nativeSrc": "6885:20:20",
"nodeType": "YulFunctionCall",
"src": "6885:20:20"
},
"variableNames": [
{
"name": "memPtr",
"nativeSrc": "6875:6:20",
"nodeType": "YulIdentifier",
"src": "6875:6:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "memPtr",
"nativeSrc": "6934:6:20",
"nodeType": "YulIdentifier",
"src": "6934:6:20"
},
{
"name": "size",
"nativeSrc": "6942:4:20",
"nodeType": "YulIdentifier",
"src": "6942:4:20"
}
],
"functionName": {
"name": "finalize_allocation",
"nativeSrc": "6914:19:20",
"nodeType": "YulIdentifier",
"src": "6914:19:20"
},
"nativeSrc": "6914:33:20",
"nodeType": "YulFunctionCall",
"src": "6914:33:20"
},
"nativeSrc": "6914:33:20",
"nodeType": "YulExpressionStatement",
"src": "6914:33:20"
}
]
},
"name": "allocate_memory",
"nativeSrc": "6824:129:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "size",
"nativeSrc": "6849:4:20",
"nodeType": "YulTypedName",
"src": "6849:4:20",
"type": ""
}
],
"returnVariables": [
{
"name": "memPtr",
"nativeSrc": "6858:6:20",
"nodeType": "YulTypedName",
"src": "6858:6:20",
"type": ""
}
],
"src": "6824:129:20"
},
{
"body": {
"nativeSrc": "7025:241:20",
"nodeType": "YulBlock",
"src": "7025:241:20",
"statements": [
{
"body": {
"nativeSrc": "7130:22:20",
"nodeType": "YulBlock",
"src": "7130:22:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x41",
"nativeSrc": "7132:16:20",
"nodeType": "YulIdentifier",
"src": "7132:16:20"
},
"nativeSrc": "7132:18:20",
"nodeType": "YulFunctionCall",
"src": "7132:18:20"
},
"nativeSrc": "7132:18:20",
"nodeType": "YulExpressionStatement",
"src": "7132:18:20"
}
]
},
"condition": {
"arguments": [
{
"name": "length",
"nativeSrc": "7102:6:20",
"nodeType": "YulIdentifier",
"src": "7102:6:20"
},
{
"kind": "number",
"nativeSrc": "7110:18:20",
"nodeType": "YulLiteral",
"src": "7110:18:20",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nativeSrc": "7099:2:20",
"nodeType": "YulIdentifier",
"src": "7099:2:20"
},
"nativeSrc": "7099:30:20",
"nodeType": "YulFunctionCall",
"src": "7099:30:20"
},
"nativeSrc": "7096:56:20",
"nodeType": "YulIf",
"src": "7096:56:20"
},
{
"nativeSrc": "7162:37:20",
"nodeType": "YulAssignment",
"src": "7162:37:20",
"value": {
"arguments": [
{
"name": "length",
"nativeSrc": "7192:6:20",
"nodeType": "YulIdentifier",
"src": "7192:6:20"
}
],
"functionName": {
"name": "round_up_to_mul_of_32",
"nativeSrc": "7170:21:20",
"nodeType": "YulIdentifier",
"src": "7170:21:20"
},
"nativeSrc": "7170:29:20",
"nodeType": "YulFunctionCall",
"src": "7170:29:20"
},
"variableNames": [
{
"name": "size",
"nativeSrc": "7162:4:20",
"nodeType": "YulIdentifier",
"src": "7162:4:20"
}
]
},
{
"nativeSrc": "7236:23:20",
"nodeType": "YulAssignment",
"src": "7236:23:20",
"value": {
"arguments": [
{
"name": "size",
"nativeSrc": "7248:4:20",
"nodeType": "YulIdentifier",
"src": "7248:4:20"
},
{
"kind": "number",
"nativeSrc": "7254:4:20",
"nodeType": "YulLiteral",
"src": "7254:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "7244:3:20",
"nodeType": "YulIdentifier",
"src": "7244:3:20"
},
"nativeSrc": "7244:15:20",
"nodeType": "YulFunctionCall",
"src": "7244:15:20"
},
"variableNames": [
{
"name": "size",
"nativeSrc": "7236:4:20",
"nodeType": "YulIdentifier",
"src": "7236:4:20"
}
]
}
]
},
"name": "array_allocation_size_t_bytes_memory_ptr",
"nativeSrc": "6959:307:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "length",
"nativeSrc": "7009:6:20",
"nodeType": "YulTypedName",
"src": "7009:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "size",
"nativeSrc": "7020:4:20",
"nodeType": "YulTypedName",
"src": "7020:4:20",
"type": ""
}
],
"src": "6959:307:20"
},
{
"body": {
"nativeSrc": "7336:82:20",
"nodeType": "YulBlock",
"src": "7336:82:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "dst",
"nativeSrc": "7359:3:20",
"nodeType": "YulIdentifier",
"src": "7359:3:20"
},
{
"name": "src",
"nativeSrc": "7364:3:20",
"nodeType": "YulIdentifier",
"src": "7364:3:20"
},
{
"name": "length",
"nativeSrc": "7369:6:20",
"nodeType": "YulIdentifier",
"src": "7369:6:20"
}
],
"functionName": {
"name": "calldatacopy",
"nativeSrc": "7346:12:20",
"nodeType": "YulIdentifier",
"src": "7346:12:20"
},
"nativeSrc": "7346:30:20",
"nodeType": "YulFunctionCall",
"src": "7346:30:20"
},
"nativeSrc": "7346:30:20",
"nodeType": "YulExpressionStatement",
"src": "7346:30:20"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "dst",
"nativeSrc": "7396:3:20",
"nodeType": "YulIdentifier",
"src": "7396:3:20"
},
{
"name": "length",
"nativeSrc": "7401:6:20",
"nodeType": "YulIdentifier",
"src": "7401:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "7392:3:20",
"nodeType": "YulIdentifier",
"src": "7392:3:20"
},
"nativeSrc": "7392:16:20",
"nodeType": "YulFunctionCall",
"src": "7392:16:20"
},
{
"kind": "number",
"nativeSrc": "7410:1:20",
"nodeType": "YulLiteral",
"src": "7410:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "7385:6:20",
"nodeType": "YulIdentifier",
"src": "7385:6:20"
},
"nativeSrc": "7385:27:20",
"nodeType": "YulFunctionCall",
"src": "7385:27:20"
},
"nativeSrc": "7385:27:20",
"nodeType": "YulExpressionStatement",
"src": "7385:27:20"
}
]
},
"name": "copy_calldata_to_memory_with_cleanup",
"nativeSrc": "7272:146:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "src",
"nativeSrc": "7318:3:20",
"nodeType": "YulTypedName",
"src": "7318:3:20",
"type": ""
},
{
"name": "dst",
"nativeSrc": "7323:3:20",
"nodeType": "YulTypedName",
"src": "7323:3:20",
"type": ""
},
{
"name": "length",
"nativeSrc": "7328:6:20",
"nodeType": "YulTypedName",
"src": "7328:6:20",
"type": ""
}
],
"src": "7272:146:20"
},
{
"body": {
"nativeSrc": "7507:340:20",
"nodeType": "YulBlock",
"src": "7507:340:20",
"statements": [
{
"nativeSrc": "7517:74:20",
"nodeType": "YulAssignment",
"src": "7517:74:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "length",
"nativeSrc": "7583:6:20",
"nodeType": "YulIdentifier",
"src": "7583:6:20"
}
],
"functionName": {
"name": "array_allocation_size_t_bytes_memory_ptr",
"nativeSrc": "7542:40:20",
"nodeType": "YulIdentifier",
"src": "7542:40:20"
},
"nativeSrc": "7542:48:20",
"nodeType": "YulFunctionCall",
"src": "7542:48:20"
}
],
"functionName": {
"name": "allocate_memory",
"nativeSrc": "7526:15:20",
"nodeType": "YulIdentifier",
"src": "7526:15:20"
},
"nativeSrc": "7526:65:20",
"nodeType": "YulFunctionCall",
"src": "7526:65:20"
},
"variableNames": [
{
"name": "array",
"nativeSrc": "7517:5:20",
"nodeType": "YulIdentifier",
"src": "7517:5:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "array",
"nativeSrc": "7607:5:20",
"nodeType": "YulIdentifier",
"src": "7607:5:20"
},
{
"name": "length",
"nativeSrc": "7614:6:20",
"nodeType": "YulIdentifier",
"src": "7614:6:20"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "7600:6:20",
"nodeType": "YulIdentifier",
"src": "7600:6:20"
},
"nativeSrc": "7600:21:20",
"nodeType": "YulFunctionCall",
"src": "7600:21:20"
},
"nativeSrc": "7600:21:20",
"nodeType": "YulExpressionStatement",
"src": "7600:21:20"
},
{
"nativeSrc": "7630:27:20",
"nodeType": "YulVariableDeclaration",
"src": "7630:27:20",
"value": {
"arguments": [
{
"name": "array",
"nativeSrc": "7645:5:20",
"nodeType": "YulIdentifier",
"src": "7645:5:20"
},
{
"kind": "number",
"nativeSrc": "7652:4:20",
"nodeType": "YulLiteral",
"src": "7652:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "7641:3:20",
"nodeType": "YulIdentifier",
"src": "7641:3:20"
},
"nativeSrc": "7641:16:20",
"nodeType": "YulFunctionCall",
"src": "7641:16:20"
},
"variables": [
{
"name": "dst",
"nativeSrc": "7634:3:20",
"nodeType": "YulTypedName",
"src": "7634:3:20",
"type": ""
}
]
},
{
"body": {
"nativeSrc": "7695:83:20",
"nodeType": "YulBlock",
"src": "7695:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae",
"nativeSrc": "7697:77:20",
"nodeType": "YulIdentifier",
"src": "7697:77:20"
},
"nativeSrc": "7697:79:20",
"nodeType": "YulFunctionCall",
"src": "7697:79:20"
},
"nativeSrc": "7697:79:20",
"nodeType": "YulExpressionStatement",
"src": "7697:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "src",
"nativeSrc": "7676:3:20",
"nodeType": "YulIdentifier",
"src": "7676:3:20"
},
{
"name": "length",
"nativeSrc": "7681:6:20",
"nodeType": "YulIdentifier",
"src": "7681:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "7672:3:20",
"nodeType": "YulIdentifier",
"src": "7672:3:20"
},
"nativeSrc": "7672:16:20",
"nodeType": "YulFunctionCall",
"src": "7672:16:20"
},
{
"name": "end",
"nativeSrc": "7690:3:20",
"nodeType": "YulIdentifier",
"src": "7690:3:20"
}
],
"functionName": {
"name": "gt",
"nativeSrc": "7669:2:20",
"nodeType": "YulIdentifier",
"src": "7669:2:20"
},
"nativeSrc": "7669:25:20",
"nodeType": "YulFunctionCall",
"src": "7669:25:20"
},
"nativeSrc": "7666:112:20",
"nodeType": "YulIf",
"src": "7666:112:20"
},
{
"expression": {
"arguments": [
{
"name": "src",
"nativeSrc": "7824:3:20",
"nodeType": "YulIdentifier",
"src": "7824:3:20"
},
{
"name": "dst",
"nativeSrc": "7829:3:20",
"nodeType": "YulIdentifier",
"src": "7829:3:20"
},
{
"name": "length",
"nativeSrc": "7834:6:20",
"nodeType": "YulIdentifier",
"src": "7834:6:20"
}
],
"functionName": {
"name": "copy_calldata_to_memory_with_cleanup",
"nativeSrc": "7787:36:20",
"nodeType": "YulIdentifier",
"src": "7787:36:20"
},
"nativeSrc": "7787:54:20",
"nodeType": "YulFunctionCall",
"src": "7787:54:20"
},
"nativeSrc": "7787:54:20",
"nodeType": "YulExpressionStatement",
"src": "7787:54:20"
}
]
},
"name": "abi_decode_available_length_t_bytes_memory_ptr",
"nativeSrc": "7424:423:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "src",
"nativeSrc": "7480:3:20",
"nodeType": "YulTypedName",
"src": "7480:3:20",
"type": ""
},
{
"name": "length",
"nativeSrc": "7485:6:20",
"nodeType": "YulTypedName",
"src": "7485:6:20",
"type": ""
},
{
"name": "end",
"nativeSrc": "7493:3:20",
"nodeType": "YulTypedName",
"src": "7493:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "array",
"nativeSrc": "7501:5:20",
"nodeType": "YulTypedName",
"src": "7501:5:20",
"type": ""
}
],
"src": "7424:423:20"
},
{
"body": {
"nativeSrc": "7927:277:20",
"nodeType": "YulBlock",
"src": "7927:277:20",
"statements": [
{
"body": {
"nativeSrc": "7976:83:20",
"nodeType": "YulBlock",
"src": "7976:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
"nativeSrc": "7978:77:20",
"nodeType": "YulIdentifier",
"src": "7978:77:20"
},
"nativeSrc": "7978:79:20",
"nodeType": "YulFunctionCall",
"src": "7978:79:20"
},
"nativeSrc": "7978:79:20",
"nodeType": "YulExpressionStatement",
"src": "7978:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "offset",
"nativeSrc": "7955:6:20",
"nodeType": "YulIdentifier",
"src": "7955:6:20"
},
{
"kind": "number",
"nativeSrc": "7963:4:20",
"nodeType": "YulLiteral",
"src": "7963:4:20",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "add",
"nativeSrc": "7951:3:20",
"nodeType": "YulIdentifier",
"src": "7951:3:20"
},
"nativeSrc": "7951:17:20",
"nodeType": "YulFunctionCall",
"src": "7951:17:20"
},
{
"name": "end",
"nativeSrc": "7970:3:20",
"nodeType": "YulIdentifier",
"src": "7970:3:20"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "7947:3:20",
"nodeType": "YulIdentifier",
"src": "7947:3:20"
},
"nativeSrc": "7947:27:20",
"nodeType": "YulFunctionCall",
"src": "7947:27:20"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "7940:6:20",
"nodeType": "YulIdentifier",
"src": "7940:6:20"
},
"nativeSrc": "7940:35:20",
"nodeType": "YulFunctionCall",
"src": "7940:35:20"
},
"nativeSrc": "7937:122:20",
"nodeType": "YulIf",
"src": "7937:122:20"
},
{
"nativeSrc": "8068:34:20",
"nodeType": "YulVariableDeclaration",
"src": "8068:34:20",
"value": {
"arguments": [
{
"name": "offset",
"nativeSrc": "8095:6:20",
"nodeType": "YulIdentifier",
"src": "8095:6:20"
}
],
"functionName": {
"name": "calldataload",
"nativeSrc": "8082:12:20",
"nodeType": "YulIdentifier",
"src": "8082:12:20"
},
"nativeSrc": "8082:20:20",
"nodeType": "YulFunctionCall",
"src": "8082:20:20"
},
"variables": [
{
"name": "length",
"nativeSrc": "8072:6:20",
"nodeType": "YulTypedName",
"src": "8072:6:20",
"type": ""
}
]
},
{
"nativeSrc": "8111:87:20",
"nodeType": "YulAssignment",
"src": "8111:87:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "offset",
"nativeSrc": "8171:6:20",
"nodeType": "YulIdentifier",
"src": "8171:6:20"
},
{
"kind": "number",
"nativeSrc": "8179:4:20",
"nodeType": "YulLiteral",
"src": "8179:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "8167:3:20",
"nodeType": "YulIdentifier",
"src": "8167:3:20"
},
"nativeSrc": "8167:17:20",
"nodeType": "YulFunctionCall",
"src": "8167:17:20"
},
{
"name": "length",
"nativeSrc": "8186:6:20",
"nodeType": "YulIdentifier",
"src": "8186:6:20"
},
{
"name": "end",
"nativeSrc": "8194:3:20",
"nodeType": "YulIdentifier",
"src": "8194:3:20"
}
],
"functionName": {
"name": "abi_decode_available_length_t_bytes_memory_ptr",
"nativeSrc": "8120:46:20",
"nodeType": "YulIdentifier",
"src": "8120:46:20"
},
"nativeSrc": "8120:78:20",
"nodeType": "YulFunctionCall",
"src": "8120:78:20"
},
"variableNames": [
{
"name": "array",
"nativeSrc": "8111:5:20",
"nodeType": "YulIdentifier",
"src": "8111:5:20"
}
]
}
]
},
"name": "abi_decode_t_bytes_memory_ptr",
"nativeSrc": "7866:338:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nativeSrc": "7905:6:20",
"nodeType": "YulTypedName",
"src": "7905:6:20",
"type": ""
},
{
"name": "end",
"nativeSrc": "7913:3:20",
"nodeType": "YulTypedName",
"src": "7913:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "array",
"nativeSrc": "7921:5:20",
"nodeType": "YulTypedName",
"src": "7921:5:20",
"type": ""
}
],
"src": "7866:338:20"
},
{
"body": {
"nativeSrc": "8302:560:20",
"nodeType": "YulBlock",
"src": "8302:560:20",
"statements": [
{
"body": {
"nativeSrc": "8348:83:20",
"nodeType": "YulBlock",
"src": "8348:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "8350:77:20",
"nodeType": "YulIdentifier",
"src": "8350:77:20"
},
"nativeSrc": "8350:79:20",
"nodeType": "YulFunctionCall",
"src": "8350:79:20"
},
"nativeSrc": "8350:79:20",
"nodeType": "YulExpressionStatement",
"src": "8350:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "8323:7:20",
"nodeType": "YulIdentifier",
"src": "8323:7:20"
},
{
"name": "headStart",
"nativeSrc": "8332:9:20",
"nodeType": "YulIdentifier",
"src": "8332:9:20"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "8319:3:20",
"nodeType": "YulIdentifier",
"src": "8319:3:20"
},
"nativeSrc": "8319:23:20",
"nodeType": "YulFunctionCall",
"src": "8319:23:20"
},
{
"kind": "number",
"nativeSrc": "8344:2:20",
"nodeType": "YulLiteral",
"src": "8344:2:20",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "8315:3:20",
"nodeType": "YulIdentifier",
"src": "8315:3:20"
},
"nativeSrc": "8315:32:20",
"nodeType": "YulFunctionCall",
"src": "8315:32:20"
},
"nativeSrc": "8312:119:20",
"nodeType": "YulIf",
"src": "8312:119:20"
},
{
"nativeSrc": "8441:117:20",
"nodeType": "YulBlock",
"src": "8441:117:20",
"statements": [
{
"nativeSrc": "8456:15:20",
"nodeType": "YulVariableDeclaration",
"src": "8456:15:20",
"value": {
"kind": "number",
"nativeSrc": "8470:1:20",
"nodeType": "YulLiteral",
"src": "8470:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "8460:6:20",
"nodeType": "YulTypedName",
"src": "8460:6:20",
"type": ""
}
]
},
{
"nativeSrc": "8485:63:20",
"nodeType": "YulAssignment",
"src": "8485:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "8520:9:20",
"nodeType": "YulIdentifier",
"src": "8520:9:20"
},
{
"name": "offset",
"nativeSrc": "8531:6:20",
"nodeType": "YulIdentifier",
"src": "8531:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "8516:3:20",
"nodeType": "YulIdentifier",
"src": "8516:3:20"
},
"nativeSrc": "8516:22:20",
"nodeType": "YulFunctionCall",
"src": "8516:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "8540:7:20",
"nodeType": "YulIdentifier",
"src": "8540:7:20"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nativeSrc": "8495:20:20",
"nodeType": "YulIdentifier",
"src": "8495:20:20"
},
"nativeSrc": "8495:53:20",
"nodeType": "YulFunctionCall",
"src": "8495:53:20"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "8485:6:20",
"nodeType": "YulIdentifier",
"src": "8485:6:20"
}
]
}
]
},
{
"nativeSrc": "8568:287:20",
"nodeType": "YulBlock",
"src": "8568:287:20",
"statements": [
{
"nativeSrc": "8583:46:20",
"nodeType": "YulVariableDeclaration",
"src": "8583:46:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "8614:9:20",
"nodeType": "YulIdentifier",
"src": "8614:9:20"
},
{
"kind": "number",
"nativeSrc": "8625:2:20",
"nodeType": "YulLiteral",
"src": "8625:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "8610:3:20",
"nodeType": "YulIdentifier",
"src": "8610:3:20"
},
"nativeSrc": "8610:18:20",
"nodeType": "YulFunctionCall",
"src": "8610:18:20"
}
],
"functionName": {
"name": "calldataload",
"nativeSrc": "8597:12:20",
"nodeType": "YulIdentifier",
"src": "8597:12:20"
},
"nativeSrc": "8597:32:20",
"nodeType": "YulFunctionCall",
"src": "8597:32:20"
},
"variables": [
{
"name": "offset",
"nativeSrc": "8587:6:20",
"nodeType": "YulTypedName",
"src": "8587:6:20",
"type": ""
}
]
},
{
"body": {
"nativeSrc": "8676:83:20",
"nodeType": "YulBlock",
"src": "8676:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nativeSrc": "8678:77:20",
"nodeType": "YulIdentifier",
"src": "8678:77:20"
},
"nativeSrc": "8678:79:20",
"nodeType": "YulFunctionCall",
"src": "8678:79:20"
},
"nativeSrc": "8678:79:20",
"nodeType": "YulExpressionStatement",
"src": "8678:79:20"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nativeSrc": "8648:6:20",
"nodeType": "YulIdentifier",
"src": "8648:6:20"
},
{
"kind": "number",
"nativeSrc": "8656:18:20",
"nodeType": "YulLiteral",
"src": "8656:18:20",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nativeSrc": "8645:2:20",
"nodeType": "YulIdentifier",
"src": "8645:2:20"
},
"nativeSrc": "8645:30:20",
"nodeType": "YulFunctionCall",
"src": "8645:30:20"
},
"nativeSrc": "8642:117:20",
"nodeType": "YulIf",
"src": "8642:117:20"
},
{
"nativeSrc": "8773:72:20",
"nodeType": "YulAssignment",
"src": "8773:72:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "8817:9:20",
"nodeType": "YulIdentifier",
"src": "8817:9:20"
},
{
"name": "offset",
"nativeSrc": "8828:6:20",
"nodeType": "YulIdentifier",
"src": "8828:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "8813:3:20",
"nodeType": "YulIdentifier",
"src": "8813:3:20"
},
"nativeSrc": "8813:22:20",
"nodeType": "YulFunctionCall",
"src": "8813:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "8837:7:20",
"nodeType": "YulIdentifier",
"src": "8837:7:20"
}
],
"functionName": {
"name": "abi_decode_t_bytes_memory_ptr",
"nativeSrc": "8783:29:20",
"nodeType": "YulIdentifier",
"src": "8783:29:20"
},
"nativeSrc": "8783:62:20",
"nodeType": "YulFunctionCall",
"src": "8783:62:20"
},
"variableNames": [
{
"name": "value1",
"nativeSrc": "8773:6:20",
"nodeType": "YulIdentifier",
"src": "8773:6:20"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_bytes_memory_ptr",
"nativeSrc": "8210:652:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "8264:9:20",
"nodeType": "YulTypedName",
"src": "8264:9:20",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "8275:7:20",
"nodeType": "YulTypedName",
"src": "8275:7:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "8287:6:20",
"nodeType": "YulTypedName",
"src": "8287:6:20",
"type": ""
},
{
"name": "value1",
"nativeSrc": "8295:6:20",
"nodeType": "YulTypedName",
"src": "8295:6:20",
"type": ""
}
],
"src": "8210:652:20"
},
{
"body": {
"nativeSrc": "8913:32:20",
"nodeType": "YulBlock",
"src": "8913:32:20",
"statements": [
{
"nativeSrc": "8923:16:20",
"nodeType": "YulAssignment",
"src": "8923:16:20",
"value": {
"name": "value",
"nativeSrc": "8934:5:20",
"nodeType": "YulIdentifier",
"src": "8934:5:20"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "8923:7:20",
"nodeType": "YulIdentifier",
"src": "8923:7:20"
}
]
}
]
},
"name": "cleanup_t_bytes32",
"nativeSrc": "8868:77:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "8895:5:20",
"nodeType": "YulTypedName",
"src": "8895:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "8905:7:20",
"nodeType": "YulTypedName",
"src": "8905:7:20",
"type": ""
}
],
"src": "8868:77:20"
},
{
"body": {
"nativeSrc": "9016:53:20",
"nodeType": "YulBlock",
"src": "9016:53:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "9033:3:20",
"nodeType": "YulIdentifier",
"src": "9033:3:20"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "9056:5:20",
"nodeType": "YulIdentifier",
"src": "9056:5:20"
}
],
"functionName": {
"name": "cleanup_t_bytes32",
"nativeSrc": "9038:17:20",
"nodeType": "YulIdentifier",
"src": "9038:17:20"
},
"nativeSrc": "9038:24:20",
"nodeType": "YulFunctionCall",
"src": "9038:24:20"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "9026:6:20",
"nodeType": "YulIdentifier",
"src": "9026:6:20"
},
"nativeSrc": "9026:37:20",
"nodeType": "YulFunctionCall",
"src": "9026:37:20"
},
"nativeSrc": "9026:37:20",
"nodeType": "YulExpressionStatement",
"src": "9026:37:20"
}
]
},
"name": "abi_encode_t_bytes32_to_t_bytes32_fromStack",
"nativeSrc": "8951:118:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "9004:5:20",
"nodeType": "YulTypedName",
"src": "9004:5:20",
"type": ""
},
{
"name": "pos",
"nativeSrc": "9011:3:20",
"nodeType": "YulTypedName",
"src": "9011:3:20",
"type": ""
}
],
"src": "8951:118:20"
},
{
"body": {
"nativeSrc": "9173:124:20",
"nodeType": "YulBlock",
"src": "9173:124:20",
"statements": [
{
"nativeSrc": "9183:26:20",
"nodeType": "YulAssignment",
"src": "9183:26:20",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "9195:9:20",
"nodeType": "YulIdentifier",
"src": "9195:9:20"
},
{
"kind": "number",
"nativeSrc": "9206:2:20",
"nodeType": "YulLiteral",
"src": "9206:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "9191:3:20",
"nodeType": "YulIdentifier",
"src": "9191:3:20"
},
"nativeSrc": "9191:18:20",
"nodeType": "YulFunctionCall",
"src": "9191:18:20"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "9183:4:20",
"nodeType": "YulIdentifier",
"src": "9183:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "9263:6:20",
"nodeType": "YulIdentifier",
"src": "9263:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "9276:9:20",
"nodeType": "YulIdentifier",
"src": "9276:9:20"
},
{
"kind": "number",
"nativeSrc": "9287:1:20",
"nodeType": "YulLiteral",
"src": "9287:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "9272:3:20",
"nodeType": "YulIdentifier",
"src": "9272:3:20"
},
"nativeSrc": "9272:17:20",
"nodeType": "YulFunctionCall",
"src": "9272:17:20"
}
],
"functionName": {
"name": "abi_encode_t_bytes32_to_t_bytes32_fromStack",
"nativeSrc": "9219:43:20",
"nodeType": "YulIdentifier",
"src": "9219:43:20"
},
"nativeSrc": "9219:71:20",
"nodeType": "YulFunctionCall",
"src": "9219:71:20"
},
"nativeSrc": "9219:71:20",
"nodeType": "YulExpressionStatement",
"src": "9219:71:20"
}
]
},
"name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed",
"nativeSrc": "9075:222:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "9145:9:20",
"nodeType": "YulTypedName",
"src": "9145:9:20",
"type": ""
},
{
"name": "value0",
"nativeSrc": "9157:6:20",
"nodeType": "YulTypedName",
"src": "9157:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "9168:4:20",
"nodeType": "YulTypedName",
"src": "9168:4:20",
"type": ""
}
],
"src": "9075:222:20"
},
{
"body": {
"nativeSrc": "9369:263:20",
"nodeType": "YulBlock",
"src": "9369:263:20",
"statements": [
{
"body": {
"nativeSrc": "9415:83:20",
"nodeType": "YulBlock",
"src": "9415:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "9417:77:20",
"nodeType": "YulIdentifier",
"src": "9417:77:20"
},
"nativeSrc": "9417:79:20",
"nodeType": "YulFunctionCall",
"src": "9417:79:20"
},
"nativeSrc": "9417:79:20",
"nodeType": "YulExpressionStatement",
"src": "9417:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "9390:7:20",
"nodeType": "YulIdentifier",
"src": "9390:7:20"
},
{
"name": "headStart",
"nativeSrc": "9399:9:20",
"nodeType": "YulIdentifier",
"src": "9399:9:20"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "9386:3:20",
"nodeType": "YulIdentifier",
"src": "9386:3:20"
},
"nativeSrc": "9386:23:20",
"nodeType": "YulFunctionCall",
"src": "9386:23:20"
},
{
"kind": "number",
"nativeSrc": "9411:2:20",
"nodeType": "YulLiteral",
"src": "9411:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "9382:3:20",
"nodeType": "YulIdentifier",
"src": "9382:3:20"
},
"nativeSrc": "9382:32:20",
"nodeType": "YulFunctionCall",
"src": "9382:32:20"
},
"nativeSrc": "9379:119:20",
"nodeType": "YulIf",
"src": "9379:119:20"
},
{
"nativeSrc": "9508:117:20",
"nodeType": "YulBlock",
"src": "9508:117:20",
"statements": [
{
"nativeSrc": "9523:15:20",
"nodeType": "YulVariableDeclaration",
"src": "9523:15:20",
"value": {
"kind": "number",
"nativeSrc": "9537:1:20",
"nodeType": "YulLiteral",
"src": "9537:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "9527:6:20",
"nodeType": "YulTypedName",
"src": "9527:6:20",
"type": ""
}
]
},
{
"nativeSrc": "9552:63:20",
"nodeType": "YulAssignment",
"src": "9552:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "9587:9:20",
"nodeType": "YulIdentifier",
"src": "9587:9:20"
},
{
"name": "offset",
"nativeSrc": "9598:6:20",
"nodeType": "YulIdentifier",
"src": "9598:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "9583:3:20",
"nodeType": "YulIdentifier",
"src": "9583:3:20"
},
"nativeSrc": "9583:22:20",
"nodeType": "YulFunctionCall",
"src": "9583:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "9607:7:20",
"nodeType": "YulIdentifier",
"src": "9607:7:20"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nativeSrc": "9562:20:20",
"nodeType": "YulIdentifier",
"src": "9562:20:20"
},
"nativeSrc": "9562:53:20",
"nodeType": "YulFunctionCall",
"src": "9562:53:20"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "9552:6:20",
"nodeType": "YulIdentifier",
"src": "9552:6:20"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_address",
"nativeSrc": "9303:329:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "9339:9:20",
"nodeType": "YulTypedName",
"src": "9339:9:20",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "9350:7:20",
"nodeType": "YulTypedName",
"src": "9350:7:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "9362:6:20",
"nodeType": "YulTypedName",
"src": "9362:6:20",
"type": ""
}
],
"src": "9303:329:20"
},
{
"body": {
"nativeSrc": "9703:53:20",
"nodeType": "YulBlock",
"src": "9703:53:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "9720:3:20",
"nodeType": "YulIdentifier",
"src": "9720:3:20"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "9743:5:20",
"nodeType": "YulIdentifier",
"src": "9743:5:20"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "9725:17:20",
"nodeType": "YulIdentifier",
"src": "9725:17:20"
},
"nativeSrc": "9725:24:20",
"nodeType": "YulFunctionCall",
"src": "9725:24:20"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "9713:6:20",
"nodeType": "YulIdentifier",
"src": "9713:6:20"
},
"nativeSrc": "9713:37:20",
"nodeType": "YulFunctionCall",
"src": "9713:37:20"
},
"nativeSrc": "9713:37:20",
"nodeType": "YulExpressionStatement",
"src": "9713:37:20"
}
]
},
"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
"nativeSrc": "9638:118:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "9691:5:20",
"nodeType": "YulTypedName",
"src": "9691:5:20",
"type": ""
},
{
"name": "pos",
"nativeSrc": "9698:3:20",
"nodeType": "YulTypedName",
"src": "9698:3:20",
"type": ""
}
],
"src": "9638:118:20"
},
{
"body": {
"nativeSrc": "9860:124:20",
"nodeType": "YulBlock",
"src": "9860:124:20",
"statements": [
{
"nativeSrc": "9870:26:20",
"nodeType": "YulAssignment",
"src": "9870:26:20",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "9882:9:20",
"nodeType": "YulIdentifier",
"src": "9882:9:20"
},
{
"kind": "number",
"nativeSrc": "9893:2:20",
"nodeType": "YulLiteral",
"src": "9893:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "9878:3:20",
"nodeType": "YulIdentifier",
"src": "9878:3:20"
},
"nativeSrc": "9878:18:20",
"nodeType": "YulFunctionCall",
"src": "9878:18:20"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "9870:4:20",
"nodeType": "YulIdentifier",
"src": "9870:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "9950:6:20",
"nodeType": "YulIdentifier",
"src": "9950:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "9963:9:20",
"nodeType": "YulIdentifier",
"src": "9963:9:20"
},
{
"kind": "number",
"nativeSrc": "9974:1:20",
"nodeType": "YulLiteral",
"src": "9974:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "9959:3:20",
"nodeType": "YulIdentifier",
"src": "9959:3:20"
},
"nativeSrc": "9959:17:20",
"nodeType": "YulFunctionCall",
"src": "9959:17:20"
}
],
"functionName": {
"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
"nativeSrc": "9906:43:20",
"nodeType": "YulIdentifier",
"src": "9906:43:20"
},
"nativeSrc": "9906:71:20",
"nodeType": "YulFunctionCall",
"src": "9906:71:20"
},
"nativeSrc": "9906:71:20",
"nodeType": "YulExpressionStatement",
"src": "9906:71:20"
}
]
},
"name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
"nativeSrc": "9762:222:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "9832:9:20",
"nodeType": "YulTypedName",
"src": "9832:9:20",
"type": ""
},
{
"name": "value0",
"nativeSrc": "9844:6:20",
"nodeType": "YulTypedName",
"src": "9844:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "9855:4:20",
"nodeType": "YulTypedName",
"src": "9855:4:20",
"type": ""
}
],
"src": "9762:222:20"
},
{
"body": {
"nativeSrc": "10070:388:20",
"nodeType": "YulBlock",
"src": "10070:388:20",
"statements": [
{
"body": {
"nativeSrc": "10116:83:20",
"nodeType": "YulBlock",
"src": "10116:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "10118:77:20",
"nodeType": "YulIdentifier",
"src": "10118:77:20"
},
"nativeSrc": "10118:79:20",
"nodeType": "YulFunctionCall",
"src": "10118:79:20"
},
"nativeSrc": "10118:79:20",
"nodeType": "YulExpressionStatement",
"src": "10118:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "10091:7:20",
"nodeType": "YulIdentifier",
"src": "10091:7:20"
},
{
"name": "headStart",
"nativeSrc": "10100:9:20",
"nodeType": "YulIdentifier",
"src": "10100:9:20"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "10087:3:20",
"nodeType": "YulIdentifier",
"src": "10087:3:20"
},
"nativeSrc": "10087:23:20",
"nodeType": "YulFunctionCall",
"src": "10087:23:20"
},
{
"kind": "number",
"nativeSrc": "10112:2:20",
"nodeType": "YulLiteral",
"src": "10112:2:20",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "10083:3:20",
"nodeType": "YulIdentifier",
"src": "10083:3:20"
},
"nativeSrc": "10083:32:20",
"nodeType": "YulFunctionCall",
"src": "10083:32:20"
},
"nativeSrc": "10080:119:20",
"nodeType": "YulIf",
"src": "10080:119:20"
},
{
"nativeSrc": "10209:117:20",
"nodeType": "YulBlock",
"src": "10209:117:20",
"statements": [
{
"nativeSrc": "10224:15:20",
"nodeType": "YulVariableDeclaration",
"src": "10224:15:20",
"value": {
"kind": "number",
"nativeSrc": "10238:1:20",
"nodeType": "YulLiteral",
"src": "10238:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "10228:6:20",
"nodeType": "YulTypedName",
"src": "10228:6:20",
"type": ""
}
]
},
{
"nativeSrc": "10253:63:20",
"nodeType": "YulAssignment",
"src": "10253:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "10288:9:20",
"nodeType": "YulIdentifier",
"src": "10288:9:20"
},
{
"name": "offset",
"nativeSrc": "10299:6:20",
"nodeType": "YulIdentifier",
"src": "10299:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "10284:3:20",
"nodeType": "YulIdentifier",
"src": "10284:3:20"
},
"nativeSrc": "10284:22:20",
"nodeType": "YulFunctionCall",
"src": "10284:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "10308:7:20",
"nodeType": "YulIdentifier",
"src": "10308:7:20"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nativeSrc": "10263:20:20",
"nodeType": "YulIdentifier",
"src": "10263:20:20"
},
"nativeSrc": "10263:53:20",
"nodeType": "YulFunctionCall",
"src": "10263:53:20"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "10253:6:20",
"nodeType": "YulIdentifier",
"src": "10253:6:20"
}
]
}
]
},
{
"nativeSrc": "10336:115:20",
"nodeType": "YulBlock",
"src": "10336:115:20",
"statements": [
{
"nativeSrc": "10351:16:20",
"nodeType": "YulVariableDeclaration",
"src": "10351:16:20",
"value": {
"kind": "number",
"nativeSrc": "10365:2:20",
"nodeType": "YulLiteral",
"src": "10365:2:20",
"type": "",
"value": "32"
},
"variables": [
{
"name": "offset",
"nativeSrc": "10355:6:20",
"nodeType": "YulTypedName",
"src": "10355:6:20",
"type": ""
}
]
},
{
"nativeSrc": "10381:60:20",
"nodeType": "YulAssignment",
"src": "10381:60:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "10413:9:20",
"nodeType": "YulIdentifier",
"src": "10413:9:20"
},
{
"name": "offset",
"nativeSrc": "10424:6:20",
"nodeType": "YulIdentifier",
"src": "10424:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "10409:3:20",
"nodeType": "YulIdentifier",
"src": "10409:3:20"
},
"nativeSrc": "10409:22:20",
"nodeType": "YulFunctionCall",
"src": "10409:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "10433:7:20",
"nodeType": "YulIdentifier",
"src": "10433:7:20"
}
],
"functionName": {
"name": "abi_decode_t_bool",
"nativeSrc": "10391:17:20",
"nodeType": "YulIdentifier",
"src": "10391:17:20"
},
"nativeSrc": "10391:50:20",
"nodeType": "YulFunctionCall",
"src": "10391:50:20"
},
"variableNames": [
{
"name": "value1",
"nativeSrc": "10381:6:20",
"nodeType": "YulIdentifier",
"src": "10381:6:20"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_bool",
"nativeSrc": "9990:468:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "10032:9:20",
"nodeType": "YulTypedName",
"src": "10032:9:20",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "10043:7:20",
"nodeType": "YulTypedName",
"src": "10043:7:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "10055:6:20",
"nodeType": "YulTypedName",
"src": "10055:6:20",
"type": ""
},
{
"name": "value1",
"nativeSrc": "10063:6:20",
"nodeType": "YulTypedName",
"src": "10063:6:20",
"type": ""
}
],
"src": "9990:468:20"
},
{
"body": {
"nativeSrc": "10590:817:20",
"nodeType": "YulBlock",
"src": "10590:817:20",
"statements": [
{
"body": {
"nativeSrc": "10637:83:20",
"nodeType": "YulBlock",
"src": "10637:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "10639:77:20",
"nodeType": "YulIdentifier",
"src": "10639:77:20"
},
"nativeSrc": "10639:79:20",
"nodeType": "YulFunctionCall",
"src": "10639:79:20"
},
"nativeSrc": "10639:79:20",
"nodeType": "YulExpressionStatement",
"src": "10639:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "10611:7:20",
"nodeType": "YulIdentifier",
"src": "10611:7:20"
},
{
"name": "headStart",
"nativeSrc": "10620:9:20",
"nodeType": "YulIdentifier",
"src": "10620:9:20"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "10607:3:20",
"nodeType": "YulIdentifier",
"src": "10607:3:20"
},
"nativeSrc": "10607:23:20",
"nodeType": "YulFunctionCall",
"src": "10607:23:20"
},
{
"kind": "number",
"nativeSrc": "10632:3:20",
"nodeType": "YulLiteral",
"src": "10632:3:20",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "10603:3:20",
"nodeType": "YulIdentifier",
"src": "10603:3:20"
},
"nativeSrc": "10603:33:20",
"nodeType": "YulFunctionCall",
"src": "10603:33:20"
},
"nativeSrc": "10600:120:20",
"nodeType": "YulIf",
"src": "10600:120:20"
},
{
"nativeSrc": "10730:117:20",
"nodeType": "YulBlock",
"src": "10730:117:20",
"statements": [
{
"nativeSrc": "10745:15:20",
"nodeType": "YulVariableDeclaration",
"src": "10745:15:20",
"value": {
"kind": "number",
"nativeSrc": "10759:1:20",
"nodeType": "YulLiteral",
"src": "10759:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "10749:6:20",
"nodeType": "YulTypedName",
"src": "10749:6:20",
"type": ""
}
]
},
{
"nativeSrc": "10774:63:20",
"nodeType": "YulAssignment",
"src": "10774:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "10809:9:20",
"nodeType": "YulIdentifier",
"src": "10809:9:20"
},
{
"name": "offset",
"nativeSrc": "10820:6:20",
"nodeType": "YulIdentifier",
"src": "10820:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "10805:3:20",
"nodeType": "YulIdentifier",
"src": "10805:3:20"
},
"nativeSrc": "10805:22:20",
"nodeType": "YulFunctionCall",
"src": "10805:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "10829:7:20",
"nodeType": "YulIdentifier",
"src": "10829:7:20"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nativeSrc": "10784:20:20",
"nodeType": "YulIdentifier",
"src": "10784:20:20"
},
"nativeSrc": "10784:53:20",
"nodeType": "YulFunctionCall",
"src": "10784:53:20"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "10774:6:20",
"nodeType": "YulIdentifier",
"src": "10774:6:20"
}
]
}
]
},
{
"nativeSrc": "10857:118:20",
"nodeType": "YulBlock",
"src": "10857:118:20",
"statements": [
{
"nativeSrc": "10872:16:20",
"nodeType": "YulVariableDeclaration",
"src": "10872:16:20",
"value": {
"kind": "number",
"nativeSrc": "10886:2:20",
"nodeType": "YulLiteral",
"src": "10886:2:20",
"type": "",
"value": "32"
},
"variables": [
{
"name": "offset",
"nativeSrc": "10876:6:20",
"nodeType": "YulTypedName",
"src": "10876:6:20",
"type": ""
}
]
},
{
"nativeSrc": "10902:63:20",
"nodeType": "YulAssignment",
"src": "10902:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "10937:9:20",
"nodeType": "YulIdentifier",
"src": "10937:9:20"
},
{
"name": "offset",
"nativeSrc": "10948:6:20",
"nodeType": "YulIdentifier",
"src": "10948:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "10933:3:20",
"nodeType": "YulIdentifier",
"src": "10933:3:20"
},
"nativeSrc": "10933:22:20",
"nodeType": "YulFunctionCall",
"src": "10933:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "10957:7:20",
"nodeType": "YulIdentifier",
"src": "10957:7:20"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nativeSrc": "10912:20:20",
"nodeType": "YulIdentifier",
"src": "10912:20:20"
},
"nativeSrc": "10912:53:20",
"nodeType": "YulFunctionCall",
"src": "10912:53:20"
},
"variableNames": [
{
"name": "value1",
"nativeSrc": "10902:6:20",
"nodeType": "YulIdentifier",
"src": "10902:6:20"
}
]
}
]
},
{
"nativeSrc": "10985:118:20",
"nodeType": "YulBlock",
"src": "10985:118:20",
"statements": [
{
"nativeSrc": "11000:16:20",
"nodeType": "YulVariableDeclaration",
"src": "11000:16:20",
"value": {
"kind": "number",
"nativeSrc": "11014:2:20",
"nodeType": "YulLiteral",
"src": "11014:2:20",
"type": "",
"value": "64"
},
"variables": [
{
"name": "offset",
"nativeSrc": "11004:6:20",
"nodeType": "YulTypedName",
"src": "11004:6:20",
"type": ""
}
]
},
{
"nativeSrc": "11030:63:20",
"nodeType": "YulAssignment",
"src": "11030:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "11065:9:20",
"nodeType": "YulIdentifier",
"src": "11065:9:20"
},
{
"name": "offset",
"nativeSrc": "11076:6:20",
"nodeType": "YulIdentifier",
"src": "11076:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "11061:3:20",
"nodeType": "YulIdentifier",
"src": "11061:3:20"
},
"nativeSrc": "11061:22:20",
"nodeType": "YulFunctionCall",
"src": "11061:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "11085:7:20",
"nodeType": "YulIdentifier",
"src": "11085:7:20"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nativeSrc": "11040:20:20",
"nodeType": "YulIdentifier",
"src": "11040:20:20"
},
"nativeSrc": "11040:53:20",
"nodeType": "YulFunctionCall",
"src": "11040:53:20"
},
"variableNames": [
{
"name": "value2",
"nativeSrc": "11030:6:20",
"nodeType": "YulIdentifier",
"src": "11030:6:20"
}
]
}
]
},
{
"nativeSrc": "11113:287:20",
"nodeType": "YulBlock",
"src": "11113:287:20",
"statements": [
{
"nativeSrc": "11128:46:20",
"nodeType": "YulVariableDeclaration",
"src": "11128:46:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "11159:9:20",
"nodeType": "YulIdentifier",
"src": "11159:9:20"
},
{
"kind": "number",
"nativeSrc": "11170:2:20",
"nodeType": "YulLiteral",
"src": "11170:2:20",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nativeSrc": "11155:3:20",
"nodeType": "YulIdentifier",
"src": "11155:3:20"
},
"nativeSrc": "11155:18:20",
"nodeType": "YulFunctionCall",
"src": "11155:18:20"
}
],
"functionName": {
"name": "calldataload",
"nativeSrc": "11142:12:20",
"nodeType": "YulIdentifier",
"src": "11142:12:20"
},
"nativeSrc": "11142:32:20",
"nodeType": "YulFunctionCall",
"src": "11142:32:20"
},
"variables": [
{
"name": "offset",
"nativeSrc": "11132:6:20",
"nodeType": "YulTypedName",
"src": "11132:6:20",
"type": ""
}
]
},
{
"body": {
"nativeSrc": "11221:83:20",
"nodeType": "YulBlock",
"src": "11221:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nativeSrc": "11223:77:20",
"nodeType": "YulIdentifier",
"src": "11223:77:20"
},
"nativeSrc": "11223:79:20",
"nodeType": "YulFunctionCall",
"src": "11223:79:20"
},
"nativeSrc": "11223:79:20",
"nodeType": "YulExpressionStatement",
"src": "11223:79:20"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nativeSrc": "11193:6:20",
"nodeType": "YulIdentifier",
"src": "11193:6:20"
},
{
"kind": "number",
"nativeSrc": "11201:18:20",
"nodeType": "YulLiteral",
"src": "11201:18:20",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nativeSrc": "11190:2:20",
"nodeType": "YulIdentifier",
"src": "11190:2:20"
},
"nativeSrc": "11190:30:20",
"nodeType": "YulFunctionCall",
"src": "11190:30:20"
},
"nativeSrc": "11187:117:20",
"nodeType": "YulIf",
"src": "11187:117:20"
},
{
"nativeSrc": "11318:72:20",
"nodeType": "YulAssignment",
"src": "11318:72:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "11362:9:20",
"nodeType": "YulIdentifier",
"src": "11362:9:20"
},
{
"name": "offset",
"nativeSrc": "11373:6:20",
"nodeType": "YulIdentifier",
"src": "11373:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "11358:3:20",
"nodeType": "YulIdentifier",
"src": "11358:3:20"
},
"nativeSrc": "11358:22:20",
"nodeType": "YulFunctionCall",
"src": "11358:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "11382:7:20",
"nodeType": "YulIdentifier",
"src": "11382:7:20"
}
],
"functionName": {
"name": "abi_decode_t_bytes_memory_ptr",
"nativeSrc": "11328:29:20",
"nodeType": "YulIdentifier",
"src": "11328:29:20"
},
"nativeSrc": "11328:62:20",
"nodeType": "YulFunctionCall",
"src": "11328:62:20"
},
"variableNames": [
{
"name": "value3",
"nativeSrc": "11318:6:20",
"nodeType": "YulIdentifier",
"src": "11318:6:20"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr",
"nativeSrc": "10464:943:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "10536:9:20",
"nodeType": "YulTypedName",
"src": "10536:9:20",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "10547:7:20",
"nodeType": "YulTypedName",
"src": "10547:7:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "10559:6:20",
"nodeType": "YulTypedName",
"src": "10559:6:20",
"type": ""
},
{
"name": "value1",
"nativeSrc": "10567:6:20",
"nodeType": "YulTypedName",
"src": "10567:6:20",
"type": ""
},
{
"name": "value2",
"nativeSrc": "10575:6:20",
"nodeType": "YulTypedName",
"src": "10575:6:20",
"type": ""
},
{
"name": "value3",
"nativeSrc": "10583:6:20",
"nodeType": "YulTypedName",
"src": "10583:6:20",
"type": ""
}
],
"src": "10464:943:20"
},
{
"body": {
"nativeSrc": "11496:391:20",
"nodeType": "YulBlock",
"src": "11496:391:20",
"statements": [
{
"body": {
"nativeSrc": "11542:83:20",
"nodeType": "YulBlock",
"src": "11542:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "11544:77:20",
"nodeType": "YulIdentifier",
"src": "11544:77:20"
},
"nativeSrc": "11544:79:20",
"nodeType": "YulFunctionCall",
"src": "11544:79:20"
},
"nativeSrc": "11544:79:20",
"nodeType": "YulExpressionStatement",
"src": "11544:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "11517:7:20",
"nodeType": "YulIdentifier",
"src": "11517:7:20"
},
{
"name": "headStart",
"nativeSrc": "11526:9:20",
"nodeType": "YulIdentifier",
"src": "11526:9:20"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "11513:3:20",
"nodeType": "YulIdentifier",
"src": "11513:3:20"
},
"nativeSrc": "11513:23:20",
"nodeType": "YulFunctionCall",
"src": "11513:23:20"
},
{
"kind": "number",
"nativeSrc": "11538:2:20",
"nodeType": "YulLiteral",
"src": "11538:2:20",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "11509:3:20",
"nodeType": "YulIdentifier",
"src": "11509:3:20"
},
"nativeSrc": "11509:32:20",
"nodeType": "YulFunctionCall",
"src": "11509:32:20"
},
"nativeSrc": "11506:119:20",
"nodeType": "YulIf",
"src": "11506:119:20"
},
{
"nativeSrc": "11635:117:20",
"nodeType": "YulBlock",
"src": "11635:117:20",
"statements": [
{
"nativeSrc": "11650:15:20",
"nodeType": "YulVariableDeclaration",
"src": "11650:15:20",
"value": {
"kind": "number",
"nativeSrc": "11664:1:20",
"nodeType": "YulLiteral",
"src": "11664:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "11654:6:20",
"nodeType": "YulTypedName",
"src": "11654:6:20",
"type": ""
}
]
},
{
"nativeSrc": "11679:63:20",
"nodeType": "YulAssignment",
"src": "11679:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "11714:9:20",
"nodeType": "YulIdentifier",
"src": "11714:9:20"
},
{
"name": "offset",
"nativeSrc": "11725:6:20",
"nodeType": "YulIdentifier",
"src": "11725:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "11710:3:20",
"nodeType": "YulIdentifier",
"src": "11710:3:20"
},
"nativeSrc": "11710:22:20",
"nodeType": "YulFunctionCall",
"src": "11710:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "11734:7:20",
"nodeType": "YulIdentifier",
"src": "11734:7:20"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nativeSrc": "11689:20:20",
"nodeType": "YulIdentifier",
"src": "11689:20:20"
},
"nativeSrc": "11689:53:20",
"nodeType": "YulFunctionCall",
"src": "11689:53:20"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "11679:6:20",
"nodeType": "YulIdentifier",
"src": "11679:6:20"
}
]
}
]
},
{
"nativeSrc": "11762:118:20",
"nodeType": "YulBlock",
"src": "11762:118:20",
"statements": [
{
"nativeSrc": "11777:16:20",
"nodeType": "YulVariableDeclaration",
"src": "11777:16:20",
"value": {
"kind": "number",
"nativeSrc": "11791:2:20",
"nodeType": "YulLiteral",
"src": "11791:2:20",
"type": "",
"value": "32"
},
"variables": [
{
"name": "offset",
"nativeSrc": "11781:6:20",
"nodeType": "YulTypedName",
"src": "11781:6:20",
"type": ""
}
]
},
{
"nativeSrc": "11807:63:20",
"nodeType": "YulAssignment",
"src": "11807:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "11842:9:20",
"nodeType": "YulIdentifier",
"src": "11842:9:20"
},
{
"name": "offset",
"nativeSrc": "11853:6:20",
"nodeType": "YulIdentifier",
"src": "11853:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "11838:3:20",
"nodeType": "YulIdentifier",
"src": "11838:3:20"
},
"nativeSrc": "11838:22:20",
"nodeType": "YulFunctionCall",
"src": "11838:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "11862:7:20",
"nodeType": "YulIdentifier",
"src": "11862:7:20"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nativeSrc": "11817:20:20",
"nodeType": "YulIdentifier",
"src": "11817:20:20"
},
"nativeSrc": "11817:53:20",
"nodeType": "YulFunctionCall",
"src": "11817:53:20"
},
"variableNames": [
{
"name": "value1",
"nativeSrc": "11807:6:20",
"nodeType": "YulIdentifier",
"src": "11807:6:20"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_address",
"nativeSrc": "11413:474:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "11458:9:20",
"nodeType": "YulTypedName",
"src": "11458:9:20",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "11469:7:20",
"nodeType": "YulTypedName",
"src": "11469:7:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "11481:6:20",
"nodeType": "YulTypedName",
"src": "11481:6:20",
"type": ""
},
{
"name": "value1",
"nativeSrc": "11489:6:20",
"nodeType": "YulTypedName",
"src": "11489:6:20",
"type": ""
}
],
"src": "11413:474:20"
},
{
"body": {
"nativeSrc": "11921:152:20",
"nodeType": "YulBlock",
"src": "11921:152:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "11938:1:20",
"nodeType": "YulLiteral",
"src": "11938:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "11941:77:20",
"nodeType": "YulLiteral",
"src": "11941:77:20",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "11931:6:20",
"nodeType": "YulIdentifier",
"src": "11931:6:20"
},
"nativeSrc": "11931:88:20",
"nodeType": "YulFunctionCall",
"src": "11931:88:20"
},
"nativeSrc": "11931:88:20",
"nodeType": "YulExpressionStatement",
"src": "11931:88:20"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "12035:1:20",
"nodeType": "YulLiteral",
"src": "12035:1:20",
"type": "",
"value": "4"
},
{
"kind": "number",
"nativeSrc": "12038:4:20",
"nodeType": "YulLiteral",
"src": "12038:4:20",
"type": "",
"value": "0x22"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "12028:6:20",
"nodeType": "YulIdentifier",
"src": "12028:6:20"
},
"nativeSrc": "12028:15:20",
"nodeType": "YulFunctionCall",
"src": "12028:15:20"
},
"nativeSrc": "12028:15:20",
"nodeType": "YulExpressionStatement",
"src": "12028:15:20"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "12059:1:20",
"nodeType": "YulLiteral",
"src": "12059:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "12062:4:20",
"nodeType": "YulLiteral",
"src": "12062:4:20",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "12052:6:20",
"nodeType": "YulIdentifier",
"src": "12052:6:20"
},
"nativeSrc": "12052:15:20",
"nodeType": "YulFunctionCall",
"src": "12052:15:20"
},
"nativeSrc": "12052:15:20",
"nodeType": "YulExpressionStatement",
"src": "12052:15:20"
}
]
},
"name": "panic_error_0x22",
"nativeSrc": "11893:180:20",
"nodeType": "YulFunctionDefinition",
"src": "11893:180:20"
},
{
"body": {
"nativeSrc": "12130:269:20",
"nodeType": "YulBlock",
"src": "12130:269:20",
"statements": [
{
"nativeSrc": "12140:22:20",
"nodeType": "YulAssignment",
"src": "12140:22:20",
"value": {
"arguments": [
{
"name": "data",
"nativeSrc": "12154:4:20",
"nodeType": "YulIdentifier",
"src": "12154:4:20"
},
{
"kind": "number",
"nativeSrc": "12160:1:20",
"nodeType": "YulLiteral",
"src": "12160:1:20",
"type": "",
"value": "2"
}
],
"functionName": {
"name": "div",
"nativeSrc": "12150:3:20",
"nodeType": "YulIdentifier",
"src": "12150:3:20"
},
"nativeSrc": "12150:12:20",
"nodeType": "YulFunctionCall",
"src": "12150:12:20"
},
"variableNames": [
{
"name": "length",
"nativeSrc": "12140:6:20",
"nodeType": "YulIdentifier",
"src": "12140:6:20"
}
]
},
{
"nativeSrc": "12171:38:20",
"nodeType": "YulVariableDeclaration",
"src": "12171:38:20",
"value": {
"arguments": [
{
"name": "data",
"nativeSrc": "12201:4:20",
"nodeType": "YulIdentifier",
"src": "12201:4:20"
},
{
"kind": "number",
"nativeSrc": "12207:1:20",
"nodeType": "YulLiteral",
"src": "12207:1:20",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "and",
"nativeSrc": "12197:3:20",
"nodeType": "YulIdentifier",
"src": "12197:3:20"
},
"nativeSrc": "12197:12:20",
"nodeType": "YulFunctionCall",
"src": "12197:12:20"
},
"variables": [
{
"name": "outOfPlaceEncoding",
"nativeSrc": "12175:18:20",
"nodeType": "YulTypedName",
"src": "12175:18:20",
"type": ""
}
]
},
{
"body": {
"nativeSrc": "12248:51:20",
"nodeType": "YulBlock",
"src": "12248:51:20",
"statements": [
{
"nativeSrc": "12262:27:20",
"nodeType": "YulAssignment",
"src": "12262:27:20",
"value": {
"arguments": [
{
"name": "length",
"nativeSrc": "12276:6:20",
"nodeType": "YulIdentifier",
"src": "12276:6:20"
},
{
"kind": "number",
"nativeSrc": "12284:4:20",
"nodeType": "YulLiteral",
"src": "12284:4:20",
"type": "",
"value": "0x7f"
}
],
"functionName": {
"name": "and",
"nativeSrc": "12272:3:20",
"nodeType": "YulIdentifier",
"src": "12272:3:20"
},
"nativeSrc": "12272:17:20",
"nodeType": "YulFunctionCall",
"src": "12272:17:20"
},
"variableNames": [
{
"name": "length",
"nativeSrc": "12262:6:20",
"nodeType": "YulIdentifier",
"src": "12262:6:20"
}
]
}
]
},
"condition": {
"arguments": [
{
"name": "outOfPlaceEncoding",
"nativeSrc": "12228:18:20",
"nodeType": "YulIdentifier",
"src": "12228:18:20"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "12221:6:20",
"nodeType": "YulIdentifier",
"src": "12221:6:20"
},
"nativeSrc": "12221:26:20",
"nodeType": "YulFunctionCall",
"src": "12221:26:20"
},
"nativeSrc": "12218:81:20",
"nodeType": "YulIf",
"src": "12218:81:20"
},
{
"body": {
"nativeSrc": "12351:42:20",
"nodeType": "YulBlock",
"src": "12351:42:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x22",
"nativeSrc": "12365:16:20",
"nodeType": "YulIdentifier",
"src": "12365:16:20"
},
"nativeSrc": "12365:18:20",
"nodeType": "YulFunctionCall",
"src": "12365:18:20"
},
"nativeSrc": "12365:18:20",
"nodeType": "YulExpressionStatement",
"src": "12365:18:20"
}
]
},
"condition": {
"arguments": [
{
"name": "outOfPlaceEncoding",
"nativeSrc": "12315:18:20",
"nodeType": "YulIdentifier",
"src": "12315:18:20"
},
{
"arguments": [
{
"name": "length",
"nativeSrc": "12338:6:20",
"nodeType": "YulIdentifier",
"src": "12338:6:20"
},
{
"kind": "number",
"nativeSrc": "12346:2:20",
"nodeType": "YulLiteral",
"src": "12346:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "lt",
"nativeSrc": "12335:2:20",
"nodeType": "YulIdentifier",
"src": "12335:2:20"
},
"nativeSrc": "12335:14:20",
"nodeType": "YulFunctionCall",
"src": "12335:14:20"
}
],
"functionName": {
"name": "eq",
"nativeSrc": "12312:2:20",
"nodeType": "YulIdentifier",
"src": "12312:2:20"
},
"nativeSrc": "12312:38:20",
"nodeType": "YulFunctionCall",
"src": "12312:38:20"
},
"nativeSrc": "12309:84:20",
"nodeType": "YulIf",
"src": "12309:84:20"
}
]
},
"name": "extract_byte_array_length",
"nativeSrc": "12079:320:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "data",
"nativeSrc": "12114:4:20",
"nodeType": "YulTypedName",
"src": "12114:4:20",
"type": ""
}
],
"returnVariables": [
{
"name": "length",
"nativeSrc": "12123:6:20",
"nodeType": "YulTypedName",
"src": "12123:6:20",
"type": ""
}
],
"src": "12079:320:20"
},
{
"body": {
"nativeSrc": "12559:288:20",
"nodeType": "YulBlock",
"src": "12559:288:20",
"statements": [
{
"nativeSrc": "12569:26:20",
"nodeType": "YulAssignment",
"src": "12569:26:20",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "12581:9:20",
"nodeType": "YulIdentifier",
"src": "12581:9:20"
},
{
"kind": "number",
"nativeSrc": "12592:2:20",
"nodeType": "YulLiteral",
"src": "12592:2:20",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nativeSrc": "12577:3:20",
"nodeType": "YulIdentifier",
"src": "12577:3:20"
},
"nativeSrc": "12577:18:20",
"nodeType": "YulFunctionCall",
"src": "12577:18:20"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "12569:4:20",
"nodeType": "YulIdentifier",
"src": "12569:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "12649:6:20",
"nodeType": "YulIdentifier",
"src": "12649:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "12662:9:20",
"nodeType": "YulIdentifier",
"src": "12662:9:20"
},
{
"kind": "number",
"nativeSrc": "12673:1:20",
"nodeType": "YulLiteral",
"src": "12673:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "12658:3:20",
"nodeType": "YulIdentifier",
"src": "12658:3:20"
},
"nativeSrc": "12658:17:20",
"nodeType": "YulFunctionCall",
"src": "12658:17:20"
}
],
"functionName": {
"name": "abi_encode_t_address_to_t_address_fromStack",
"nativeSrc": "12605:43:20",
"nodeType": "YulIdentifier",
"src": "12605:43:20"
},
"nativeSrc": "12605:71:20",
"nodeType": "YulFunctionCall",
"src": "12605:71:20"
},
"nativeSrc": "12605:71:20",
"nodeType": "YulExpressionStatement",
"src": "12605:71:20"
},
{
"expression": {
"arguments": [
{
"name": "value1",
"nativeSrc": "12730:6:20",
"nodeType": "YulIdentifier",
"src": "12730:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "12743:9:20",
"nodeType": "YulIdentifier",
"src": "12743:9:20"
},
{
"kind": "number",
"nativeSrc": "12754:2:20",
"nodeType": "YulLiteral",
"src": "12754:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "12739:3:20",
"nodeType": "YulIdentifier",
"src": "12739:3:20"
},
"nativeSrc": "12739:18:20",
"nodeType": "YulFunctionCall",
"src": "12739:18:20"
}
],
"functionName": {
"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
"nativeSrc": "12686:43:20",
"nodeType": "YulIdentifier",
"src": "12686:43:20"
},
"nativeSrc": "12686:72:20",
"nodeType": "YulFunctionCall",
"src": "12686:72:20"
},
"nativeSrc": "12686:72:20",
"nodeType": "YulExpressionStatement",
"src": "12686:72:20"
},
{
"expression": {
"arguments": [
{
"name": "value2",
"nativeSrc": "12812:6:20",
"nodeType": "YulIdentifier",
"src": "12812:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "12825:9:20",
"nodeType": "YulIdentifier",
"src": "12825:9:20"
},
{
"kind": "number",
"nativeSrc": "12836:2:20",
"nodeType": "YulLiteral",
"src": "12836:2:20",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nativeSrc": "12821:3:20",
"nodeType": "YulIdentifier",
"src": "12821:3:20"
},
"nativeSrc": "12821:18:20",
"nodeType": "YulFunctionCall",
"src": "12821:18:20"
}
],
"functionName": {
"name": "abi_encode_t_address_to_t_address_fromStack",
"nativeSrc": "12768:43:20",
"nodeType": "YulIdentifier",
"src": "12768:43:20"
},
"nativeSrc": "12768:72:20",
"nodeType": "YulFunctionCall",
"src": "12768:72:20"
},
"nativeSrc": "12768:72:20",
"nodeType": "YulExpressionStatement",
"src": "12768:72:20"
}
]
},
"name": "abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed",
"nativeSrc": "12405:442:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "12515:9:20",
"nodeType": "YulTypedName",
"src": "12515:9:20",
"type": ""
},
{
"name": "value2",
"nativeSrc": "12527:6:20",
"nodeType": "YulTypedName",
"src": "12527:6:20",
"type": ""
},
{
"name": "value1",
"nativeSrc": "12535:6:20",
"nodeType": "YulTypedName",
"src": "12535:6:20",
"type": ""
},
{
"name": "value0",
"nativeSrc": "12543:6:20",
"nodeType": "YulTypedName",
"src": "12543:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "12554:4:20",
"nodeType": "YulTypedName",
"src": "12554:4:20",
"type": ""
}
],
"src": "12405:442:20"
},
{
"body": {
"nativeSrc": "12959:66:20",
"nodeType": "YulBlock",
"src": "12959:66:20",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "memPtr",
"nativeSrc": "12981:6:20",
"nodeType": "YulIdentifier",
"src": "12981:6:20"
},
{
"kind": "number",
"nativeSrc": "12989:1:20",
"nodeType": "YulLiteral",
"src": "12989:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "12977:3:20",
"nodeType": "YulIdentifier",
"src": "12977:3:20"
},
"nativeSrc": "12977:14:20",
"nodeType": "YulFunctionCall",
"src": "12977:14:20"
},
{
"hexValue": "4d696e74696e67206973206e6f7420656e61626c6564",
"kind": "string",
"nativeSrc": "12993:24:20",
"nodeType": "YulLiteral",
"src": "12993:24:20",
"type": "",
"value": "Minting is not enabled"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "12970:6:20",
"nodeType": "YulIdentifier",
"src": "12970:6:20"
},
"nativeSrc": "12970:48:20",
"nodeType": "YulFunctionCall",
"src": "12970:48:20"
},
"nativeSrc": "12970:48:20",
"nodeType": "YulExpressionStatement",
"src": "12970:48:20"
}
]
},
"name": "store_literal_in_memory_074edb06bc2c283d1123114ebfffa3e3cbf780cc3fcf237b7da0237729f6c25e",
"nativeSrc": "12853:172:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "memPtr",
"nativeSrc": "12951:6:20",
"nodeType": "YulTypedName",
"src": "12951:6:20",
"type": ""
}
],
"src": "12853:172:20"
},
{
"body": {
"nativeSrc": "13177:220:20",
"nodeType": "YulBlock",
"src": "13177:220:20",
"statements": [
{
"nativeSrc": "13187:74:20",
"nodeType": "YulAssignment",
"src": "13187:74:20",
"value": {
"arguments": [
{
"name": "pos",
"nativeSrc": "13253:3:20",
"nodeType": "YulIdentifier",
"src": "13253:3:20"
},
{
"kind": "number",
"nativeSrc": "13258:2:20",
"nodeType": "YulLiteral",
"src": "13258:2:20",
"type": "",
"value": "22"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
"nativeSrc": "13194:58:20",
"nodeType": "YulIdentifier",
"src": "13194:58:20"
},
"nativeSrc": "13194:67:20",
"nodeType": "YulFunctionCall",
"src": "13194:67:20"
},
"variableNames": [
{
"name": "pos",
"nativeSrc": "13187:3:20",
"nodeType": "YulIdentifier",
"src": "13187:3:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "13359:3:20",
"nodeType": "YulIdentifier",
"src": "13359:3:20"
}
],
"functionName": {
"name": "store_literal_in_memory_074edb06bc2c283d1123114ebfffa3e3cbf780cc3fcf237b7da0237729f6c25e",
"nativeSrc": "13270:88:20",
"nodeType": "YulIdentifier",
"src": "13270:88:20"
},
"nativeSrc": "13270:93:20",
"nodeType": "YulFunctionCall",
"src": "13270:93:20"
},
"nativeSrc": "13270:93:20",
"nodeType": "YulExpressionStatement",
"src": "13270:93:20"
},
{
"nativeSrc": "13372:19:20",
"nodeType": "YulAssignment",
"src": "13372:19:20",
"value": {
"arguments": [
{
"name": "pos",
"nativeSrc": "13383:3:20",
"nodeType": "YulIdentifier",
"src": "13383:3:20"
},
{
"kind": "number",
"nativeSrc": "13388:2:20",
"nodeType": "YulLiteral",
"src": "13388:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "13379:3:20",
"nodeType": "YulIdentifier",
"src": "13379:3:20"
},
"nativeSrc": "13379:12:20",
"nodeType": "YulFunctionCall",
"src": "13379:12:20"
},
"variableNames": [
{
"name": "end",
"nativeSrc": "13372:3:20",
"nodeType": "YulIdentifier",
"src": "13372:3:20"
}
]
}
]
},
"name": "abi_encode_t_stringliteral_074edb06bc2c283d1123114ebfffa3e3cbf780cc3fcf237b7da0237729f6c25e_to_t_string_memory_ptr_fromStack",
"nativeSrc": "13031:366:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nativeSrc": "13165:3:20",
"nodeType": "YulTypedName",
"src": "13165:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nativeSrc": "13173:3:20",
"nodeType": "YulTypedName",
"src": "13173:3:20",
"type": ""
}
],
"src": "13031:366:20"
},
{
"body": {
"nativeSrc": "13574:248:20",
"nodeType": "YulBlock",
"src": "13574:248:20",
"statements": [
{
"nativeSrc": "13584:26:20",
"nodeType": "YulAssignment",
"src": "13584:26:20",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "13596:9:20",
"nodeType": "YulIdentifier",
"src": "13596:9:20"
},
{
"kind": "number",
"nativeSrc": "13607:2:20",
"nodeType": "YulLiteral",
"src": "13607:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "13592:3:20",
"nodeType": "YulIdentifier",
"src": "13592:3:20"
},
"nativeSrc": "13592:18:20",
"nodeType": "YulFunctionCall",
"src": "13592:18:20"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "13584:4:20",
"nodeType": "YulIdentifier",
"src": "13584:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "13631:9:20",
"nodeType": "YulIdentifier",
"src": "13631:9:20"
},
{
"kind": "number",
"nativeSrc": "13642:1:20",
"nodeType": "YulLiteral",
"src": "13642:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "13627:3:20",
"nodeType": "YulIdentifier",
"src": "13627:3:20"
},
"nativeSrc": "13627:17:20",
"nodeType": "YulFunctionCall",
"src": "13627:17:20"
},
{
"arguments": [
{
"name": "tail",
"nativeSrc": "13650:4:20",
"nodeType": "YulIdentifier",
"src": "13650:4:20"
},
{
"name": "headStart",
"nativeSrc": "13656:9:20",
"nodeType": "YulIdentifier",
"src": "13656:9:20"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "13646:3:20",
"nodeType": "YulIdentifier",
"src": "13646:3:20"
},
"nativeSrc": "13646:20:20",
"nodeType": "YulFunctionCall",
"src": "13646:20:20"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "13620:6:20",
"nodeType": "YulIdentifier",
"src": "13620:6:20"
},
"nativeSrc": "13620:47:20",
"nodeType": "YulFunctionCall",
"src": "13620:47:20"
},
"nativeSrc": "13620:47:20",
"nodeType": "YulExpressionStatement",
"src": "13620:47:20"
},
{
"nativeSrc": "13676:139:20",
"nodeType": "YulAssignment",
"src": "13676:139:20",
"value": {
"arguments": [
{
"name": "tail",
"nativeSrc": "13810:4:20",
"nodeType": "YulIdentifier",
"src": "13810:4:20"
}
],
"functionName": {
"name": "abi_encode_t_stringliteral_074edb06bc2c283d1123114ebfffa3e3cbf780cc3fcf237b7da0237729f6c25e_to_t_string_memory_ptr_fromStack",
"nativeSrc": "13684:124:20",
"nodeType": "YulIdentifier",
"src": "13684:124:20"
},
"nativeSrc": "13684:131:20",
"nodeType": "YulFunctionCall",
"src": "13684:131:20"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "13676:4:20",
"nodeType": "YulIdentifier",
"src": "13676:4:20"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_074edb06bc2c283d1123114ebfffa3e3cbf780cc3fcf237b7da0237729f6c25e__to_t_string_memory_ptr__fromStack_reversed",
"nativeSrc": "13403:419:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "13554:9:20",
"nodeType": "YulTypedName",
"src": "13554:9:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "13569:4:20",
"nodeType": "YulTypedName",
"src": "13569:4:20",
"type": ""
}
],
"src": "13403:419:20"
},
{
"body": {
"nativeSrc": "13881:32:20",
"nodeType": "YulBlock",
"src": "13881:32:20",
"statements": [
{
"nativeSrc": "13891:16:20",
"nodeType": "YulAssignment",
"src": "13891:16:20",
"value": {
"name": "value",
"nativeSrc": "13902:5:20",
"nodeType": "YulIdentifier",
"src": "13902:5:20"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "13891:7:20",
"nodeType": "YulIdentifier",
"src": "13891:7:20"
}
]
}
]
},
"name": "cleanup_t_rational_1_by_1",
"nativeSrc": "13828:85:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "13863:5:20",
"nodeType": "YulTypedName",
"src": "13863:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "13873:7:20",
"nodeType": "YulTypedName",
"src": "13873:7:20",
"type": ""
}
],
"src": "13828:85:20"
},
{
"body": {
"nativeSrc": "13963:57:20",
"nodeType": "YulBlock",
"src": "13963:57:20",
"statements": [
{
"nativeSrc": "13973:41:20",
"nodeType": "YulAssignment",
"src": "13973:41:20",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "13988:5:20",
"nodeType": "YulIdentifier",
"src": "13988:5:20"
},
{
"kind": "number",
"nativeSrc": "13995:18:20",
"nodeType": "YulLiteral",
"src": "13995:18:20",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "and",
"nativeSrc": "13984:3:20",
"nodeType": "YulIdentifier",
"src": "13984:3:20"
},
"nativeSrc": "13984:30:20",
"nodeType": "YulFunctionCall",
"src": "13984:30:20"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "13973:7:20",
"nodeType": "YulIdentifier",
"src": "13973:7:20"
}
]
}
]
},
"name": "cleanup_t_uint64",
"nativeSrc": "13919:101:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "13945:5:20",
"nodeType": "YulTypedName",
"src": "13945:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "13955:7:20",
"nodeType": "YulTypedName",
"src": "13955:7:20",
"type": ""
}
],
"src": "13919:101:20"
},
{
"body": {
"nativeSrc": "14058:28:20",
"nodeType": "YulBlock",
"src": "14058:28:20",
"statements": [
{
"nativeSrc": "14068:12:20",
"nodeType": "YulAssignment",
"src": "14068:12:20",
"value": {
"name": "value",
"nativeSrc": "14075:5:20",
"nodeType": "YulIdentifier",
"src": "14075:5:20"
},
"variableNames": [
{
"name": "ret",
"nativeSrc": "14068:3:20",
"nodeType": "YulIdentifier",
"src": "14068:3:20"
}
]
}
]
},
"name": "identity",
"nativeSrc": "14026:60:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "14044:5:20",
"nodeType": "YulTypedName",
"src": "14044:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "ret",
"nativeSrc": "14054:3:20",
"nodeType": "YulTypedName",
"src": "14054:3:20",
"type": ""
}
],
"src": "14026:60:20"
},
{
"body": {
"nativeSrc": "14159:89:20",
"nodeType": "YulBlock",
"src": "14159:89:20",
"statements": [
{
"nativeSrc": "14169:73:20",
"nodeType": "YulAssignment",
"src": "14169:73:20",
"value": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "14234:5:20",
"nodeType": "YulIdentifier",
"src": "14234:5:20"
}
],
"functionName": {
"name": "cleanup_t_rational_1_by_1",
"nativeSrc": "14208:25:20",
"nodeType": "YulIdentifier",
"src": "14208:25:20"
},
"nativeSrc": "14208:32:20",
"nodeType": "YulFunctionCall",
"src": "14208:32:20"
}
],
"functionName": {
"name": "identity",
"nativeSrc": "14199:8:20",
"nodeType": "YulIdentifier",
"src": "14199:8:20"
},
"nativeSrc": "14199:42:20",
"nodeType": "YulFunctionCall",
"src": "14199:42:20"
}
],
"functionName": {
"name": "cleanup_t_uint64",
"nativeSrc": "14182:16:20",
"nodeType": "YulIdentifier",
"src": "14182:16:20"
},
"nativeSrc": "14182:60:20",
"nodeType": "YulFunctionCall",
"src": "14182:60:20"
},
"variableNames": [
{
"name": "converted",
"nativeSrc": "14169:9:20",
"nodeType": "YulIdentifier",
"src": "14169:9:20"
}
]
}
]
},
"name": "convert_t_rational_1_by_1_to_t_uint64",
"nativeSrc": "14092:156:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "14139:5:20",
"nodeType": "YulTypedName",
"src": "14139:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "converted",
"nativeSrc": "14149:9:20",
"nodeType": "YulTypedName",
"src": "14149:9:20",
"type": ""
}
],
"src": "14092:156:20"
},
{
"body": {
"nativeSrc": "14326:73:20",
"nodeType": "YulBlock",
"src": "14326:73:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "14343:3:20",
"nodeType": "YulIdentifier",
"src": "14343:3:20"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "14386:5:20",
"nodeType": "YulIdentifier",
"src": "14386:5:20"
}
],
"functionName": {
"name": "convert_t_rational_1_by_1_to_t_uint64",
"nativeSrc": "14348:37:20",
"nodeType": "YulIdentifier",
"src": "14348:37:20"
},
"nativeSrc": "14348:44:20",
"nodeType": "YulFunctionCall",
"src": "14348:44:20"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "14336:6:20",
"nodeType": "YulIdentifier",
"src": "14336:6:20"
},
"nativeSrc": "14336:57:20",
"nodeType": "YulFunctionCall",
"src": "14336:57:20"
},
"nativeSrc": "14336:57:20",
"nodeType": "YulExpressionStatement",
"src": "14336:57:20"
}
]
},
"name": "abi_encode_t_rational_1_by_1_to_t_uint64_fromStack",
"nativeSrc": "14254:145:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "14314:5:20",
"nodeType": "YulTypedName",
"src": "14314:5:20",
"type": ""
},
{
"name": "pos",
"nativeSrc": "14321:3:20",
"nodeType": "YulTypedName",
"src": "14321:3:20",
"type": ""
}
],
"src": "14254:145:20"
},
{
"body": {
"nativeSrc": "14510:131:20",
"nodeType": "YulBlock",
"src": "14510:131:20",
"statements": [
{
"nativeSrc": "14520:26:20",
"nodeType": "YulAssignment",
"src": "14520:26:20",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "14532:9:20",
"nodeType": "YulIdentifier",
"src": "14532:9:20"
},
{
"kind": "number",
"nativeSrc": "14543:2:20",
"nodeType": "YulLiteral",
"src": "14543:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "14528:3:20",
"nodeType": "YulIdentifier",
"src": "14528:3:20"
},
"nativeSrc": "14528:18:20",
"nodeType": "YulFunctionCall",
"src": "14528:18:20"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "14520:4:20",
"nodeType": "YulIdentifier",
"src": "14520:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "14607:6:20",
"nodeType": "YulIdentifier",
"src": "14607:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "14620:9:20",
"nodeType": "YulIdentifier",
"src": "14620:9:20"
},
{
"kind": "number",
"nativeSrc": "14631:1:20",
"nodeType": "YulLiteral",
"src": "14631:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "14616:3:20",
"nodeType": "YulIdentifier",
"src": "14616:3:20"
},
"nativeSrc": "14616:17:20",
"nodeType": "YulFunctionCall",
"src": "14616:17:20"
}
],
"functionName": {
"name": "abi_encode_t_rational_1_by_1_to_t_uint64_fromStack",
"nativeSrc": "14556:50:20",
"nodeType": "YulIdentifier",
"src": "14556:50:20"
},
"nativeSrc": "14556:78:20",
"nodeType": "YulFunctionCall",
"src": "14556:78:20"
},
"nativeSrc": "14556:78:20",
"nodeType": "YulExpressionStatement",
"src": "14556:78:20"
}
]
},
"name": "abi_encode_tuple_t_rational_1_by_1__to_t_uint64__fromStack_reversed",
"nativeSrc": "14405:236:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "14482:9:20",
"nodeType": "YulTypedName",
"src": "14482:9:20",
"type": ""
},
{
"name": "value0",
"nativeSrc": "14494:6:20",
"nodeType": "YulTypedName",
"src": "14494:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "14505:4:20",
"nodeType": "YulTypedName",
"src": "14505:4:20",
"type": ""
}
],
"src": "14405:236:20"
},
{
"body": {
"nativeSrc": "14761:34:20",
"nodeType": "YulBlock",
"src": "14761:34:20",
"statements": [
{
"nativeSrc": "14771:18:20",
"nodeType": "YulAssignment",
"src": "14771:18:20",
"value": {
"name": "pos",
"nativeSrc": "14786:3:20",
"nodeType": "YulIdentifier",
"src": "14786:3:20"
},
"variableNames": [
{
"name": "updated_pos",
"nativeSrc": "14771:11:20",
"nodeType": "YulIdentifier",
"src": "14771:11:20"
}
]
}
]
},
"name": "array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack",
"nativeSrc": "14647:148:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nativeSrc": "14733:3:20",
"nodeType": "YulTypedName",
"src": "14733:3:20",
"type": ""
},
{
"name": "length",
"nativeSrc": "14738:6:20",
"nodeType": "YulTypedName",
"src": "14738:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "updated_pos",
"nativeSrc": "14749:11:20",
"nodeType": "YulTypedName",
"src": "14749:11:20",
"type": ""
}
],
"src": "14647:148:20"
},
{
"body": {
"nativeSrc": "14911:280:20",
"nodeType": "YulBlock",
"src": "14911:280:20",
"statements": [
{
"nativeSrc": "14921:53:20",
"nodeType": "YulVariableDeclaration",
"src": "14921:53:20",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "14968:5:20",
"nodeType": "YulIdentifier",
"src": "14968:5:20"
}
],
"functionName": {
"name": "array_length_t_string_memory_ptr",
"nativeSrc": "14935:32:20",
"nodeType": "YulIdentifier",
"src": "14935:32:20"
},
"nativeSrc": "14935:39:20",
"nodeType": "YulFunctionCall",
"src": "14935:39:20"
},
"variables": [
{
"name": "length",
"nativeSrc": "14925:6:20",
"nodeType": "YulTypedName",
"src": "14925:6:20",
"type": ""
}
]
},
{
"nativeSrc": "14983:96:20",
"nodeType": "YulAssignment",
"src": "14983:96:20",
"value": {
"arguments": [
{
"name": "pos",
"nativeSrc": "15067:3:20",
"nodeType": "YulIdentifier",
"src": "15067:3:20"
},
{
"name": "length",
"nativeSrc": "15072:6:20",
"nodeType": "YulIdentifier",
"src": "15072:6:20"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack",
"nativeSrc": "14990:76:20",
"nodeType": "YulIdentifier",
"src": "14990:76:20"
},
"nativeSrc": "14990:89:20",
"nodeType": "YulFunctionCall",
"src": "14990:89:20"
},
"variableNames": [
{
"name": "pos",
"nativeSrc": "14983:3:20",
"nodeType": "YulIdentifier",
"src": "14983:3:20"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "15127:5:20",
"nodeType": "YulIdentifier",
"src": "15127:5:20"
},
{
"kind": "number",
"nativeSrc": "15134:4:20",
"nodeType": "YulLiteral",
"src": "15134:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "15123:3:20",
"nodeType": "YulIdentifier",
"src": "15123:3:20"
},
"nativeSrc": "15123:16:20",
"nodeType": "YulFunctionCall",
"src": "15123:16:20"
},
{
"name": "pos",
"nativeSrc": "15141:3:20",
"nodeType": "YulIdentifier",
"src": "15141:3:20"
},
{
"name": "length",
"nativeSrc": "15146:6:20",
"nodeType": "YulIdentifier",
"src": "15146:6:20"
}
],
"functionName": {
"name": "copy_memory_to_memory_with_cleanup",
"nativeSrc": "15088:34:20",
"nodeType": "YulIdentifier",
"src": "15088:34:20"
},
"nativeSrc": "15088:65:20",
"nodeType": "YulFunctionCall",
"src": "15088:65:20"
},
"nativeSrc": "15088:65:20",
"nodeType": "YulExpressionStatement",
"src": "15088:65:20"
},
{
"nativeSrc": "15162:23:20",
"nodeType": "YulAssignment",
"src": "15162:23:20",
"value": {
"arguments": [
{
"name": "pos",
"nativeSrc": "15173:3:20",
"nodeType": "YulIdentifier",
"src": "15173:3:20"
},
{
"name": "length",
"nativeSrc": "15178:6:20",
"nodeType": "YulIdentifier",
"src": "15178:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "15169:3:20",
"nodeType": "YulIdentifier",
"src": "15169:3:20"
},
"nativeSrc": "15169:16:20",
"nodeType": "YulFunctionCall",
"src": "15169:16:20"
},
"variableNames": [
{
"name": "end",
"nativeSrc": "15162:3:20",
"nodeType": "YulIdentifier",
"src": "15162:3:20"
}
]
}
]
},
"name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack",
"nativeSrc": "14801:390:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "14892:5:20",
"nodeType": "YulTypedName",
"src": "14892:5:20",
"type": ""
},
{
"name": "pos",
"nativeSrc": "14899:3:20",
"nodeType": "YulTypedName",
"src": "14899:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nativeSrc": "14907:3:20",
"nodeType": "YulTypedName",
"src": "14907:3:20",
"type": ""
}
],
"src": "14801:390:20"
},
{
"body": {
"nativeSrc": "15381:251:20",
"nodeType": "YulBlock",
"src": "15381:251:20",
"statements": [
{
"nativeSrc": "15392:102:20",
"nodeType": "YulAssignment",
"src": "15392:102:20",
"value": {
"arguments": [
{
"name": "value0",
"nativeSrc": "15481:6:20",
"nodeType": "YulIdentifier",
"src": "15481:6:20"
},
{
"name": "pos",
"nativeSrc": "15490:3:20",
"nodeType": "YulIdentifier",
"src": "15490:3:20"
}
],
"functionName": {
"name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack",
"nativeSrc": "15399:81:20",
"nodeType": "YulIdentifier",
"src": "15399:81:20"
},
"nativeSrc": "15399:95:20",
"nodeType": "YulFunctionCall",
"src": "15399:95:20"
},
"variableNames": [
{
"name": "pos",
"nativeSrc": "15392:3:20",
"nodeType": "YulIdentifier",
"src": "15392:3:20"
}
]
},
{
"nativeSrc": "15504:102:20",
"nodeType": "YulAssignment",
"src": "15504:102:20",
"value": {
"arguments": [
{
"name": "value1",
"nativeSrc": "15593:6:20",
"nodeType": "YulIdentifier",
"src": "15593:6:20"
},
{
"name": "pos",
"nativeSrc": "15602:3:20",
"nodeType": "YulIdentifier",
"src": "15602:3:20"
}
],
"functionName": {
"name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack",
"nativeSrc": "15511:81:20",
"nodeType": "YulIdentifier",
"src": "15511:81:20"
},
"nativeSrc": "15511:95:20",
"nodeType": "YulFunctionCall",
"src": "15511:95:20"
},
"variableNames": [
{
"name": "pos",
"nativeSrc": "15504:3:20",
"nodeType": "YulIdentifier",
"src": "15504:3:20"
}
]
},
{
"nativeSrc": "15616:10:20",
"nodeType": "YulAssignment",
"src": "15616:10:20",
"value": {
"name": "pos",
"nativeSrc": "15623:3:20",
"nodeType": "YulIdentifier",
"src": "15623:3:20"
},
"variableNames": [
{
"name": "end",
"nativeSrc": "15616:3:20",
"nodeType": "YulIdentifier",
"src": "15616:3:20"
}
]
}
]
},
"name": "abi_encode_tuple_packed_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
"nativeSrc": "15197:435:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nativeSrc": "15352:3:20",
"nodeType": "YulTypedName",
"src": "15352:3:20",
"type": ""
},
{
"name": "value1",
"nativeSrc": "15358:6:20",
"nodeType": "YulTypedName",
"src": "15358:6:20",
"type": ""
},
{
"name": "value0",
"nativeSrc": "15366:6:20",
"nodeType": "YulTypedName",
"src": "15366:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nativeSrc": "15377:3:20",
"nodeType": "YulTypedName",
"src": "15377:3:20",
"type": ""
}
],
"src": "15197:435:20"
},
{
"body": {
"nativeSrc": "15681:79:20",
"nodeType": "YulBlock",
"src": "15681:79:20",
"statements": [
{
"body": {
"nativeSrc": "15738:16:20",
"nodeType": "YulBlock",
"src": "15738:16:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "15747:1:20",
"nodeType": "YulLiteral",
"src": "15747:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "15750:1:20",
"nodeType": "YulLiteral",
"src": "15750:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "15740:6:20",
"nodeType": "YulIdentifier",
"src": "15740:6:20"
},
"nativeSrc": "15740:12:20",
"nodeType": "YulFunctionCall",
"src": "15740:12:20"
},
"nativeSrc": "15740:12:20",
"nodeType": "YulExpressionStatement",
"src": "15740:12:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "15704:5:20",
"nodeType": "YulIdentifier",
"src": "15704:5:20"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "15729:5:20",
"nodeType": "YulIdentifier",
"src": "15729:5:20"
}
],
"functionName": {
"name": "cleanup_t_bytes32",
"nativeSrc": "15711:17:20",
"nodeType": "YulIdentifier",
"src": "15711:17:20"
},
"nativeSrc": "15711:24:20",
"nodeType": "YulFunctionCall",
"src": "15711:24:20"
}
],
"functionName": {
"name": "eq",
"nativeSrc": "15701:2:20",
"nodeType": "YulIdentifier",
"src": "15701:2:20"
},
"nativeSrc": "15701:35:20",
"nodeType": "YulFunctionCall",
"src": "15701:35:20"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "15694:6:20",
"nodeType": "YulIdentifier",
"src": "15694:6:20"
},
"nativeSrc": "15694:43:20",
"nodeType": "YulFunctionCall",
"src": "15694:43:20"
},
"nativeSrc": "15691:63:20",
"nodeType": "YulIf",
"src": "15691:63:20"
}
]
},
"name": "validator_revert_t_bytes32",
"nativeSrc": "15638:122:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "15674:5:20",
"nodeType": "YulTypedName",
"src": "15674:5:20",
"type": ""
}
],
"src": "15638:122:20"
},
{
"body": {
"nativeSrc": "15829:80:20",
"nodeType": "YulBlock",
"src": "15829:80:20",
"statements": [
{
"nativeSrc": "15839:22:20",
"nodeType": "YulAssignment",
"src": "15839:22:20",
"value": {
"arguments": [
{
"name": "offset",
"nativeSrc": "15854:6:20",
"nodeType": "YulIdentifier",
"src": "15854:6:20"
}
],
"functionName": {
"name": "mload",
"nativeSrc": "15848:5:20",
"nodeType": "YulIdentifier",
"src": "15848:5:20"
},
"nativeSrc": "15848:13:20",
"nodeType": "YulFunctionCall",
"src": "15848:13:20"
},
"variableNames": [
{
"name": "value",
"nativeSrc": "15839:5:20",
"nodeType": "YulIdentifier",
"src": "15839:5:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nativeSrc": "15897:5:20",
"nodeType": "YulIdentifier",
"src": "15897:5:20"
}
],
"functionName": {
"name": "validator_revert_t_bytes32",
"nativeSrc": "15870:26:20",
"nodeType": "YulIdentifier",
"src": "15870:26:20"
},
"nativeSrc": "15870:33:20",
"nodeType": "YulFunctionCall",
"src": "15870:33:20"
},
"nativeSrc": "15870:33:20",
"nodeType": "YulExpressionStatement",
"src": "15870:33:20"
}
]
},
"name": "abi_decode_t_bytes32_fromMemory",
"nativeSrc": "15766:143:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nativeSrc": "15807:6:20",
"nodeType": "YulTypedName",
"src": "15807:6:20",
"type": ""
},
{
"name": "end",
"nativeSrc": "15815:3:20",
"nodeType": "YulTypedName",
"src": "15815:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nativeSrc": "15823:5:20",
"nodeType": "YulTypedName",
"src": "15823:5:20",
"type": ""
}
],
"src": "15766:143:20"
},
{
"body": {
"nativeSrc": "15992:274:20",
"nodeType": "YulBlock",
"src": "15992:274:20",
"statements": [
{
"body": {
"nativeSrc": "16038:83:20",
"nodeType": "YulBlock",
"src": "16038:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "16040:77:20",
"nodeType": "YulIdentifier",
"src": "16040:77:20"
},
"nativeSrc": "16040:79:20",
"nodeType": "YulFunctionCall",
"src": "16040:79:20"
},
"nativeSrc": "16040:79:20",
"nodeType": "YulExpressionStatement",
"src": "16040:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "16013:7:20",
"nodeType": "YulIdentifier",
"src": "16013:7:20"
},
{
"name": "headStart",
"nativeSrc": "16022:9:20",
"nodeType": "YulIdentifier",
"src": "16022:9:20"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "16009:3:20",
"nodeType": "YulIdentifier",
"src": "16009:3:20"
},
"nativeSrc": "16009:23:20",
"nodeType": "YulFunctionCall",
"src": "16009:23:20"
},
{
"kind": "number",
"nativeSrc": "16034:2:20",
"nodeType": "YulLiteral",
"src": "16034:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "16005:3:20",
"nodeType": "YulIdentifier",
"src": "16005:3:20"
},
"nativeSrc": "16005:32:20",
"nodeType": "YulFunctionCall",
"src": "16005:32:20"
},
"nativeSrc": "16002:119:20",
"nodeType": "YulIf",
"src": "16002:119:20"
},
{
"nativeSrc": "16131:128:20",
"nodeType": "YulBlock",
"src": "16131:128:20",
"statements": [
{
"nativeSrc": "16146:15:20",
"nodeType": "YulVariableDeclaration",
"src": "16146:15:20",
"value": {
"kind": "number",
"nativeSrc": "16160:1:20",
"nodeType": "YulLiteral",
"src": "16160:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "16150:6:20",
"nodeType": "YulTypedName",
"src": "16150:6:20",
"type": ""
}
]
},
{
"nativeSrc": "16175:74:20",
"nodeType": "YulAssignment",
"src": "16175:74:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "16221:9:20",
"nodeType": "YulIdentifier",
"src": "16221:9:20"
},
{
"name": "offset",
"nativeSrc": "16232:6:20",
"nodeType": "YulIdentifier",
"src": "16232:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "16217:3:20",
"nodeType": "YulIdentifier",
"src": "16217:3:20"
},
"nativeSrc": "16217:22:20",
"nodeType": "YulFunctionCall",
"src": "16217:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "16241:7:20",
"nodeType": "YulIdentifier",
"src": "16241:7:20"
}
],
"functionName": {
"name": "abi_decode_t_bytes32_fromMemory",
"nativeSrc": "16185:31:20",
"nodeType": "YulIdentifier",
"src": "16185:31:20"
},
"nativeSrc": "16185:64:20",
"nodeType": "YulFunctionCall",
"src": "16185:64:20"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "16175:6:20",
"nodeType": "YulIdentifier",
"src": "16175:6:20"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_bytes32_fromMemory",
"nativeSrc": "15915:351:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "15962:9:20",
"nodeType": "YulTypedName",
"src": "15962:9:20",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "15973:7:20",
"nodeType": "YulTypedName",
"src": "15973:7:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "15985:6:20",
"nodeType": "YulTypedName",
"src": "15985:6:20",
"type": ""
}
],
"src": "15915:351:20"
},
{
"body": {
"nativeSrc": "16330:40:20",
"nodeType": "YulBlock",
"src": "16330:40:20",
"statements": [
{
"nativeSrc": "16341:22:20",
"nodeType": "YulAssignment",
"src": "16341:22:20",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "16357:5:20",
"nodeType": "YulIdentifier",
"src": "16357:5:20"
}
],
"functionName": {
"name": "mload",
"nativeSrc": "16351:5:20",
"nodeType": "YulIdentifier",
"src": "16351:5:20"
},
"nativeSrc": "16351:12:20",
"nodeType": "YulFunctionCall",
"src": "16351:12:20"
},
"variableNames": [
{
"name": "length",
"nativeSrc": "16341:6:20",
"nodeType": "YulIdentifier",
"src": "16341:6:20"
}
]
}
]
},
"name": "array_length_t_bytes_memory_ptr",
"nativeSrc": "16272:98:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "16313:5:20",
"nodeType": "YulTypedName",
"src": "16313:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "length",
"nativeSrc": "16323:6:20",
"nodeType": "YulTypedName",
"src": "16323:6:20",
"type": ""
}
],
"src": "16272:98:20"
},
{
"body": {
"nativeSrc": "16471:73:20",
"nodeType": "YulBlock",
"src": "16471:73:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "16488:3:20",
"nodeType": "YulIdentifier",
"src": "16488:3:20"
},
{
"name": "length",
"nativeSrc": "16493:6:20",
"nodeType": "YulIdentifier",
"src": "16493:6:20"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "16481:6:20",
"nodeType": "YulIdentifier",
"src": "16481:6:20"
},
"nativeSrc": "16481:19:20",
"nodeType": "YulFunctionCall",
"src": "16481:19:20"
},
"nativeSrc": "16481:19:20",
"nodeType": "YulExpressionStatement",
"src": "16481:19:20"
},
{
"nativeSrc": "16509:29:20",
"nodeType": "YulAssignment",
"src": "16509:29:20",
"value": {
"arguments": [
{
"name": "pos",
"nativeSrc": "16528:3:20",
"nodeType": "YulIdentifier",
"src": "16528:3:20"
},
{
"kind": "number",
"nativeSrc": "16533:4:20",
"nodeType": "YulLiteral",
"src": "16533:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "16524:3:20",
"nodeType": "YulIdentifier",
"src": "16524:3:20"
},
"nativeSrc": "16524:14:20",
"nodeType": "YulFunctionCall",
"src": "16524:14:20"
},
"variableNames": [
{
"name": "updated_pos",
"nativeSrc": "16509:11:20",
"nodeType": "YulIdentifier",
"src": "16509:11:20"
}
]
}
]
},
"name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack",
"nativeSrc": "16376:168:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nativeSrc": "16443:3:20",
"nodeType": "YulTypedName",
"src": "16443:3:20",
"type": ""
},
{
"name": "length",
"nativeSrc": "16448:6:20",
"nodeType": "YulTypedName",
"src": "16448:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "updated_pos",
"nativeSrc": "16459:11:20",
"nodeType": "YulTypedName",
"src": "16459:11:20",
"type": ""
}
],
"src": "16376:168:20"
},
{
"body": {
"nativeSrc": "16640:283:20",
"nodeType": "YulBlock",
"src": "16640:283:20",
"statements": [
{
"nativeSrc": "16650:52:20",
"nodeType": "YulVariableDeclaration",
"src": "16650:52:20",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "16696:5:20",
"nodeType": "YulIdentifier",
"src": "16696:5:20"
}
],
"functionName": {
"name": "array_length_t_bytes_memory_ptr",
"nativeSrc": "16664:31:20",
"nodeType": "YulIdentifier",
"src": "16664:31:20"
},
"nativeSrc": "16664:38:20",
"nodeType": "YulFunctionCall",
"src": "16664:38:20"
},
"variables": [
{
"name": "length",
"nativeSrc": "16654:6:20",
"nodeType": "YulTypedName",
"src": "16654:6:20",
"type": ""
}
]
},
{
"nativeSrc": "16711:77:20",
"nodeType": "YulAssignment",
"src": "16711:77:20",
"value": {
"arguments": [
{
"name": "pos",
"nativeSrc": "16776:3:20",
"nodeType": "YulIdentifier",
"src": "16776:3:20"
},
{
"name": "length",
"nativeSrc": "16781:6:20",
"nodeType": "YulIdentifier",
"src": "16781:6:20"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack",
"nativeSrc": "16718:57:20",
"nodeType": "YulIdentifier",
"src": "16718:57:20"
},
"nativeSrc": "16718:70:20",
"nodeType": "YulFunctionCall",
"src": "16718:70:20"
},
"variableNames": [
{
"name": "pos",
"nativeSrc": "16711:3:20",
"nodeType": "YulIdentifier",
"src": "16711:3:20"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "16836:5:20",
"nodeType": "YulIdentifier",
"src": "16836:5:20"
},
{
"kind": "number",
"nativeSrc": "16843:4:20",
"nodeType": "YulLiteral",
"src": "16843:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "16832:3:20",
"nodeType": "YulIdentifier",
"src": "16832:3:20"
},
"nativeSrc": "16832:16:20",
"nodeType": "YulFunctionCall",
"src": "16832:16:20"
},
{
"name": "pos",
"nativeSrc": "16850:3:20",
"nodeType": "YulIdentifier",
"src": "16850:3:20"
},
{
"name": "length",
"nativeSrc": "16855:6:20",
"nodeType": "YulIdentifier",
"src": "16855:6:20"
}
],
"functionName": {
"name": "copy_memory_to_memory_with_cleanup",
"nativeSrc": "16797:34:20",
"nodeType": "YulIdentifier",
"src": "16797:34:20"
},
"nativeSrc": "16797:65:20",
"nodeType": "YulFunctionCall",
"src": "16797:65:20"
},
"nativeSrc": "16797:65:20",
"nodeType": "YulExpressionStatement",
"src": "16797:65:20"
},
{
"nativeSrc": "16871:46:20",
"nodeType": "YulAssignment",
"src": "16871:46:20",
"value": {
"arguments": [
{
"name": "pos",
"nativeSrc": "16882:3:20",
"nodeType": "YulIdentifier",
"src": "16882:3:20"
},
{
"arguments": [
{
"name": "length",
"nativeSrc": "16909:6:20",
"nodeType": "YulIdentifier",
"src": "16909:6:20"
}
],
"functionName": {
"name": "round_up_to_mul_of_32",
"nativeSrc": "16887:21:20",
"nodeType": "YulIdentifier",
"src": "16887:21:20"
},
"nativeSrc": "16887:29:20",
"nodeType": "YulFunctionCall",
"src": "16887:29:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "16878:3:20",
"nodeType": "YulIdentifier",
"src": "16878:3:20"
},
"nativeSrc": "16878:39:20",
"nodeType": "YulFunctionCall",
"src": "16878:39:20"
},
"variableNames": [
{
"name": "end",
"nativeSrc": "16871:3:20",
"nodeType": "YulIdentifier",
"src": "16871:3:20"
}
]
}
]
},
"name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack",
"nativeSrc": "16550:373:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "16621:5:20",
"nodeType": "YulTypedName",
"src": "16621:5:20",
"type": ""
},
{
"name": "pos",
"nativeSrc": "16628:3:20",
"nodeType": "YulTypedName",
"src": "16628:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nativeSrc": "16636:3:20",
"nodeType": "YulTypedName",
"src": "16636:3:20",
"type": ""
}
],
"src": "16550:373:20"
},
{
"body": {
"nativeSrc": "17129:440:20",
"nodeType": "YulBlock",
"src": "17129:440:20",
"statements": [
{
"nativeSrc": "17139:27:20",
"nodeType": "YulAssignment",
"src": "17139:27:20",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "17151:9:20",
"nodeType": "YulIdentifier",
"src": "17151:9:20"
},
{
"kind": "number",
"nativeSrc": "17162:3:20",
"nodeType": "YulLiteral",
"src": "17162:3:20",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nativeSrc": "17147:3:20",
"nodeType": "YulIdentifier",
"src": "17147:3:20"
},
"nativeSrc": "17147:19:20",
"nodeType": "YulFunctionCall",
"src": "17147:19:20"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "17139:4:20",
"nodeType": "YulIdentifier",
"src": "17139:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "17220:6:20",
"nodeType": "YulIdentifier",
"src": "17220:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "17233:9:20",
"nodeType": "YulIdentifier",
"src": "17233:9:20"
},
{
"kind": "number",
"nativeSrc": "17244:1:20",
"nodeType": "YulLiteral",
"src": "17244:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "17229:3:20",
"nodeType": "YulIdentifier",
"src": "17229:3:20"
},
"nativeSrc": "17229:17:20",
"nodeType": "YulFunctionCall",
"src": "17229:17:20"
}
],
"functionName": {
"name": "abi_encode_t_address_to_t_address_fromStack",
"nativeSrc": "17176:43:20",
"nodeType": "YulIdentifier",
"src": "17176:43:20"
},
"nativeSrc": "17176:71:20",
"nodeType": "YulFunctionCall",
"src": "17176:71:20"
},
"nativeSrc": "17176:71:20",
"nodeType": "YulExpressionStatement",
"src": "17176:71:20"
},
{
"expression": {
"arguments": [
{
"name": "value1",
"nativeSrc": "17301:6:20",
"nodeType": "YulIdentifier",
"src": "17301:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "17314:9:20",
"nodeType": "YulIdentifier",
"src": "17314:9:20"
},
{
"kind": "number",
"nativeSrc": "17325:2:20",
"nodeType": "YulLiteral",
"src": "17325:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "17310:3:20",
"nodeType": "YulIdentifier",
"src": "17310:3:20"
},
"nativeSrc": "17310:18:20",
"nodeType": "YulFunctionCall",
"src": "17310:18:20"
}
],
"functionName": {
"name": "abi_encode_t_address_to_t_address_fromStack",
"nativeSrc": "17257:43:20",
"nodeType": "YulIdentifier",
"src": "17257:43:20"
},
"nativeSrc": "17257:72:20",
"nodeType": "YulFunctionCall",
"src": "17257:72:20"
},
"nativeSrc": "17257:72:20",
"nodeType": "YulExpressionStatement",
"src": "17257:72:20"
},
{
"expression": {
"arguments": [
{
"name": "value2",
"nativeSrc": "17383:6:20",
"nodeType": "YulIdentifier",
"src": "17383:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "17396:9:20",
"nodeType": "YulIdentifier",
"src": "17396:9:20"
},
{
"kind": "number",
"nativeSrc": "17407:2:20",
"nodeType": "YulLiteral",
"src": "17407:2:20",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nativeSrc": "17392:3:20",
"nodeType": "YulIdentifier",
"src": "17392:3:20"
},
"nativeSrc": "17392:18:20",
"nodeType": "YulFunctionCall",
"src": "17392:18:20"
}
],
"functionName": {
"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
"nativeSrc": "17339:43:20",
"nodeType": "YulIdentifier",
"src": "17339:43:20"
},
"nativeSrc": "17339:72:20",
"nodeType": "YulFunctionCall",
"src": "17339:72:20"
},
"nativeSrc": "17339:72:20",
"nodeType": "YulExpressionStatement",
"src": "17339:72:20"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "17432:9:20",
"nodeType": "YulIdentifier",
"src": "17432:9:20"
},
{
"kind": "number",
"nativeSrc": "17443:2:20",
"nodeType": "YulLiteral",
"src": "17443:2:20",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nativeSrc": "17428:3:20",
"nodeType": "YulIdentifier",
"src": "17428:3:20"
},
"nativeSrc": "17428:18:20",
"nodeType": "YulFunctionCall",
"src": "17428:18:20"
},
{
"arguments": [
{
"name": "tail",
"nativeSrc": "17452:4:20",
"nodeType": "YulIdentifier",
"src": "17452:4:20"
},
{
"name": "headStart",
"nativeSrc": "17458:9:20",
"nodeType": "YulIdentifier",
"src": "17458:9:20"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "17448:3:20",
"nodeType": "YulIdentifier",
"src": "17448:3:20"
},
"nativeSrc": "17448:20:20",
"nodeType": "YulFunctionCall",
"src": "17448:20:20"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "17421:6:20",
"nodeType": "YulIdentifier",
"src": "17421:6:20"
},
"nativeSrc": "17421:48:20",
"nodeType": "YulFunctionCall",
"src": "17421:48:20"
},
"nativeSrc": "17421:48:20",
"nodeType": "YulExpressionStatement",
"src": "17421:48:20"
},
{
"nativeSrc": "17478:84:20",
"nodeType": "YulAssignment",
"src": "17478:84:20",
"value": {
"arguments": [
{
"name": "value3",
"nativeSrc": "17548:6:20",
"nodeType": "YulIdentifier",
"src": "17548:6:20"
},
{
"name": "tail",
"nativeSrc": "17557:4:20",
"nodeType": "YulIdentifier",
"src": "17557:4:20"
}
],
"functionName": {
"name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack",
"nativeSrc": "17486:61:20",
"nodeType": "YulIdentifier",
"src": "17486:61:20"
},
"nativeSrc": "17486:76:20",
"nodeType": "YulFunctionCall",
"src": "17486:76:20"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "17478:4:20",
"nodeType": "YulIdentifier",
"src": "17478:4:20"
}
]
}
]
},
"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",
"nativeSrc": "16929:640:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "17077:9:20",
"nodeType": "YulTypedName",
"src": "17077:9:20",
"type": ""
},
{
"name": "value3",
"nativeSrc": "17089:6:20",
"nodeType": "YulTypedName",
"src": "17089:6:20",
"type": ""
},
{
"name": "value2",
"nativeSrc": "17097:6:20",
"nodeType": "YulTypedName",
"src": "17097:6:20",
"type": ""
},
{
"name": "value1",
"nativeSrc": "17105:6:20",
"nodeType": "YulTypedName",
"src": "17105:6:20",
"type": ""
},
{
"name": "value0",
"nativeSrc": "17113:6:20",
"nodeType": "YulTypedName",
"src": "17113:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "17124:4:20",
"nodeType": "YulTypedName",
"src": "17124:4:20",
"type": ""
}
],
"src": "16929:640:20"
},
{
"body": {
"nativeSrc": "17637:79:20",
"nodeType": "YulBlock",
"src": "17637:79:20",
"statements": [
{
"nativeSrc": "17647:22:20",
"nodeType": "YulAssignment",
"src": "17647:22:20",
"value": {
"arguments": [
{
"name": "offset",
"nativeSrc": "17662:6:20",
"nodeType": "YulIdentifier",
"src": "17662:6:20"
}
],
"functionName": {
"name": "mload",
"nativeSrc": "17656:5:20",
"nodeType": "YulIdentifier",
"src": "17656:5:20"
},
"nativeSrc": "17656:13:20",
"nodeType": "YulFunctionCall",
"src": "17656:13:20"
},
"variableNames": [
{
"name": "value",
"nativeSrc": "17647:5:20",
"nodeType": "YulIdentifier",
"src": "17647:5:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nativeSrc": "17704:5:20",
"nodeType": "YulIdentifier",
"src": "17704:5:20"
}
],
"functionName": {
"name": "validator_revert_t_bytes4",
"nativeSrc": "17678:25:20",
"nodeType": "YulIdentifier",
"src": "17678:25:20"
},
"nativeSrc": "17678:32:20",
"nodeType": "YulFunctionCall",
"src": "17678:32:20"
},
"nativeSrc": "17678:32:20",
"nodeType": "YulExpressionStatement",
"src": "17678:32:20"
}
]
},
"name": "abi_decode_t_bytes4_fromMemory",
"nativeSrc": "17575:141:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nativeSrc": "17615:6:20",
"nodeType": "YulTypedName",
"src": "17615:6:20",
"type": ""
},
{
"name": "end",
"nativeSrc": "17623:3:20",
"nodeType": "YulTypedName",
"src": "17623:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nativeSrc": "17631:5:20",
"nodeType": "YulTypedName",
"src": "17631:5:20",
"type": ""
}
],
"src": "17575:141:20"
},
{
"body": {
"nativeSrc": "17798:273:20",
"nodeType": "YulBlock",
"src": "17798:273:20",
"statements": [
{
"body": {
"nativeSrc": "17844:83:20",
"nodeType": "YulBlock",
"src": "17844:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "17846:77:20",
"nodeType": "YulIdentifier",
"src": "17846:77:20"
},
"nativeSrc": "17846:79:20",
"nodeType": "YulFunctionCall",
"src": "17846:79:20"
},
"nativeSrc": "17846:79:20",
"nodeType": "YulExpressionStatement",
"src": "17846:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "17819:7:20",
"nodeType": "YulIdentifier",
"src": "17819:7:20"
},
{
"name": "headStart",
"nativeSrc": "17828:9:20",
"nodeType": "YulIdentifier",
"src": "17828:9:20"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "17815:3:20",
"nodeType": "YulIdentifier",
"src": "17815:3:20"
},
"nativeSrc": "17815:23:20",
"nodeType": "YulFunctionCall",
"src": "17815:23:20"
},
{
"kind": "number",
"nativeSrc": "17840:2:20",
"nodeType": "YulLiteral",
"src": "17840:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "17811:3:20",
"nodeType": "YulIdentifier",
"src": "17811:3:20"
},
"nativeSrc": "17811:32:20",
"nodeType": "YulFunctionCall",
"src": "17811:32:20"
},
"nativeSrc": "17808:119:20",
"nodeType": "YulIf",
"src": "17808:119:20"
},
{
"nativeSrc": "17937:127:20",
"nodeType": "YulBlock",
"src": "17937:127:20",
"statements": [
{
"nativeSrc": "17952:15:20",
"nodeType": "YulVariableDeclaration",
"src": "17952:15:20",
"value": {
"kind": "number",
"nativeSrc": "17966:1:20",
"nodeType": "YulLiteral",
"src": "17966:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "17956:6:20",
"nodeType": "YulTypedName",
"src": "17956:6:20",
"type": ""
}
]
},
{
"nativeSrc": "17981:73:20",
"nodeType": "YulAssignment",
"src": "17981:73:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "18026:9:20",
"nodeType": "YulIdentifier",
"src": "18026:9:20"
},
{
"name": "offset",
"nativeSrc": "18037:6:20",
"nodeType": "YulIdentifier",
"src": "18037:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "18022:3:20",
"nodeType": "YulIdentifier",
"src": "18022:3:20"
},
"nativeSrc": "18022:22:20",
"nodeType": "YulFunctionCall",
"src": "18022:22:20"
},
{
"name": "dataEnd",
"nativeSrc": "18046:7:20",
"nodeType": "YulIdentifier",
"src": "18046:7:20"
}
],
"functionName": {
"name": "abi_decode_t_bytes4_fromMemory",
"nativeSrc": "17991:30:20",
"nodeType": "YulIdentifier",
"src": "17991:30:20"
},
"nativeSrc": "17991:63:20",
"nodeType": "YulFunctionCall",
"src": "17991:63:20"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "17981:6:20",
"nodeType": "YulIdentifier",
"src": "17981:6:20"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_bytes4_fromMemory",
"nativeSrc": "17722:349:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "17768:9:20",
"nodeType": "YulTypedName",
"src": "17768:9:20",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "17779:7:20",
"nodeType": "YulTypedName",
"src": "17779:7:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "17791:6:20",
"nodeType": "YulTypedName",
"src": "17791:6:20",
"type": ""
}
],
"src": "17722:349:20"
},
{
"body": {
"nativeSrc": "18105:152:20",
"nodeType": "YulBlock",
"src": "18105:152:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "18122:1:20",
"nodeType": "YulLiteral",
"src": "18122:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "18125:77:20",
"nodeType": "YulLiteral",
"src": "18125:77:20",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "18115:6:20",
"nodeType": "YulIdentifier",
"src": "18115:6:20"
},
"nativeSrc": "18115:88:20",
"nodeType": "YulFunctionCall",
"src": "18115:88:20"
},
"nativeSrc": "18115:88:20",
"nodeType": "YulExpressionStatement",
"src": "18115:88:20"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "18219:1:20",
"nodeType": "YulLiteral",
"src": "18219:1:20",
"type": "",
"value": "4"
},
{
"kind": "number",
"nativeSrc": "18222:4:20",
"nodeType": "YulLiteral",
"src": "18222:4:20",
"type": "",
"value": "0x12"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "18212:6:20",
"nodeType": "YulIdentifier",
"src": "18212:6:20"
},
"nativeSrc": "18212:15:20",
"nodeType": "YulFunctionCall",
"src": "18212:15:20"
},
"nativeSrc": "18212:15:20",
"nodeType": "YulExpressionStatement",
"src": "18212:15:20"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "18243:1:20",
"nodeType": "YulLiteral",
"src": "18243:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "18246:4:20",
"nodeType": "YulLiteral",
"src": "18246:4:20",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "18236:6:20",
"nodeType": "YulIdentifier",
"src": "18236:6:20"
},
"nativeSrc": "18236:15:20",
"nodeType": "YulFunctionCall",
"src": "18236:15:20"
},
"nativeSrc": "18236:15:20",
"nodeType": "YulExpressionStatement",
"src": "18236:15:20"
}
]
},
"name": "panic_error_0x12",
"nativeSrc": "18077:180:20",
"nodeType": "YulFunctionDefinition",
"src": "18077:180:20"
},
{
"body": {
"nativeSrc": "18389:206:20",
"nodeType": "YulBlock",
"src": "18389:206:20",
"statements": [
{
"nativeSrc": "18399:26:20",
"nodeType": "YulAssignment",
"src": "18399:26:20",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "18411:9:20",
"nodeType": "YulIdentifier",
"src": "18411:9:20"
},
{
"kind": "number",
"nativeSrc": "18422:2:20",
"nodeType": "YulLiteral",
"src": "18422:2:20",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nativeSrc": "18407:3:20",
"nodeType": "YulIdentifier",
"src": "18407:3:20"
},
"nativeSrc": "18407:18:20",
"nodeType": "YulFunctionCall",
"src": "18407:18:20"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "18399:4:20",
"nodeType": "YulIdentifier",
"src": "18399:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "18479:6:20",
"nodeType": "YulIdentifier",
"src": "18479:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "18492:9:20",
"nodeType": "YulIdentifier",
"src": "18492:9:20"
},
{
"kind": "number",
"nativeSrc": "18503:1:20",
"nodeType": "YulLiteral",
"src": "18503:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "18488:3:20",
"nodeType": "YulIdentifier",
"src": "18488:3:20"
},
"nativeSrc": "18488:17:20",
"nodeType": "YulFunctionCall",
"src": "18488:17:20"
}
],
"functionName": {
"name": "abi_encode_t_address_to_t_address_fromStack",
"nativeSrc": "18435:43:20",
"nodeType": "YulIdentifier",
"src": "18435:43:20"
},
"nativeSrc": "18435:71:20",
"nodeType": "YulFunctionCall",
"src": "18435:71:20"
},
"nativeSrc": "18435:71:20",
"nodeType": "YulExpressionStatement",
"src": "18435:71:20"
},
{
"expression": {
"arguments": [
{
"name": "value1",
"nativeSrc": "18560:6:20",
"nodeType": "YulIdentifier",
"src": "18560:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "18573:9:20",
"nodeType": "YulIdentifier",
"src": "18573:9:20"
},
{
"kind": "number",
"nativeSrc": "18584:2:20",
"nodeType": "YulLiteral",
"src": "18584:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "18569:3:20",
"nodeType": "YulIdentifier",
"src": "18569:3:20"
},
"nativeSrc": "18569:18:20",
"nodeType": "YulFunctionCall",
"src": "18569:18:20"
}
],
"functionName": {
"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
"nativeSrc": "18516:43:20",
"nodeType": "YulIdentifier",
"src": "18516:43:20"
},
"nativeSrc": "18516:72:20",
"nodeType": "YulFunctionCall",
"src": "18516:72:20"
},
"nativeSrc": "18516:72:20",
"nodeType": "YulExpressionStatement",
"src": "18516:72:20"
}
]
},
"name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
"nativeSrc": "18263:332:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "18353:9:20",
"nodeType": "YulTypedName",
"src": "18353:9:20",
"type": ""
},
{
"name": "value1",
"nativeSrc": "18365:6:20",
"nodeType": "YulTypedName",
"src": "18365:6:20",
"type": ""
},
{
"name": "value0",
"nativeSrc": "18373:6:20",
"nodeType": "YulTypedName",
"src": "18373:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "18384:4:20",
"nodeType": "YulTypedName",
"src": "18384:4:20",
"type": ""
}
],
"src": "18263:332:20"
},
{
"body": {
"nativeSrc": "18655:87:20",
"nodeType": "YulBlock",
"src": "18655:87:20",
"statements": [
{
"nativeSrc": "18665:11:20",
"nodeType": "YulAssignment",
"src": "18665:11:20",
"value": {
"name": "ptr",
"nativeSrc": "18673:3:20",
"nodeType": "YulIdentifier",
"src": "18673:3:20"
},
"variableNames": [
{
"name": "data",
"nativeSrc": "18665:4:20",
"nodeType": "YulIdentifier",
"src": "18665:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "18693:1:20",
"nodeType": "YulLiteral",
"src": "18693:1:20",
"type": "",
"value": "0"
},
{
"name": "ptr",
"nativeSrc": "18696:3:20",
"nodeType": "YulIdentifier",
"src": "18696:3:20"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "18686:6:20",
"nodeType": "YulIdentifier",
"src": "18686:6:20"
},
"nativeSrc": "18686:14:20",
"nodeType": "YulFunctionCall",
"src": "18686:14:20"
},
"nativeSrc": "18686:14:20",
"nodeType": "YulExpressionStatement",
"src": "18686:14:20"
},
{
"nativeSrc": "18709:26:20",
"nodeType": "YulAssignment",
"src": "18709:26:20",
"value": {
"arguments": [
{
"kind": "number",
"nativeSrc": "18727:1:20",
"nodeType": "YulLiteral",
"src": "18727:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "18730:4:20",
"nodeType": "YulLiteral",
"src": "18730:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "keccak256",
"nativeSrc": "18717:9:20",
"nodeType": "YulIdentifier",
"src": "18717:9:20"
},
"nativeSrc": "18717:18:20",
"nodeType": "YulFunctionCall",
"src": "18717:18:20"
},
"variableNames": [
{
"name": "data",
"nativeSrc": "18709:4:20",
"nodeType": "YulIdentifier",
"src": "18709:4:20"
}
]
}
]
},
"name": "array_dataslot_t_string_storage",
"nativeSrc": "18601:141:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "ptr",
"nativeSrc": "18642:3:20",
"nodeType": "YulTypedName",
"src": "18642:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "data",
"nativeSrc": "18650:4:20",
"nodeType": "YulTypedName",
"src": "18650:4:20",
"type": ""
}
],
"src": "18601:141:20"
},
{
"body": {
"nativeSrc": "18792:49:20",
"nodeType": "YulBlock",
"src": "18792:49:20",
"statements": [
{
"nativeSrc": "18802:33:20",
"nodeType": "YulAssignment",
"src": "18802:33:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "18820:5:20",
"nodeType": "YulIdentifier",
"src": "18820:5:20"
},
{
"kind": "number",
"nativeSrc": "18827:2:20",
"nodeType": "YulLiteral",
"src": "18827:2:20",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "add",
"nativeSrc": "18816:3:20",
"nodeType": "YulIdentifier",
"src": "18816:3:20"
},
"nativeSrc": "18816:14:20",
"nodeType": "YulFunctionCall",
"src": "18816:14:20"
},
{
"kind": "number",
"nativeSrc": "18832:2:20",
"nodeType": "YulLiteral",
"src": "18832:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "div",
"nativeSrc": "18812:3:20",
"nodeType": "YulIdentifier",
"src": "18812:3:20"
},
"nativeSrc": "18812:23:20",
"nodeType": "YulFunctionCall",
"src": "18812:23:20"
},
"variableNames": [
{
"name": "result",
"nativeSrc": "18802:6:20",
"nodeType": "YulIdentifier",
"src": "18802:6:20"
}
]
}
]
},
"name": "divide_by_32_ceil",
"nativeSrc": "18748:93:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "18775:5:20",
"nodeType": "YulTypedName",
"src": "18775:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "result",
"nativeSrc": "18785:6:20",
"nodeType": "YulTypedName",
"src": "18785:6:20",
"type": ""
}
],
"src": "18748:93:20"
},
{
"body": {
"nativeSrc": "18900:54:20",
"nodeType": "YulBlock",
"src": "18900:54:20",
"statements": [
{
"nativeSrc": "18910:37:20",
"nodeType": "YulAssignment",
"src": "18910:37:20",
"value": {
"arguments": [
{
"name": "bits",
"nativeSrc": "18935:4:20",
"nodeType": "YulIdentifier",
"src": "18935:4:20"
},
{
"name": "value",
"nativeSrc": "18941:5:20",
"nodeType": "YulIdentifier",
"src": "18941:5:20"
}
],
"functionName": {
"name": "shl",
"nativeSrc": "18931:3:20",
"nodeType": "YulIdentifier",
"src": "18931:3:20"
},
"nativeSrc": "18931:16:20",
"nodeType": "YulFunctionCall",
"src": "18931:16:20"
},
"variableNames": [
{
"name": "newValue",
"nativeSrc": "18910:8:20",
"nodeType": "YulIdentifier",
"src": "18910:8:20"
}
]
}
]
},
"name": "shift_left_dynamic",
"nativeSrc": "18847:107:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "bits",
"nativeSrc": "18875:4:20",
"nodeType": "YulTypedName",
"src": "18875:4:20",
"type": ""
},
{
"name": "value",
"nativeSrc": "18881:5:20",
"nodeType": "YulTypedName",
"src": "18881:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "newValue",
"nativeSrc": "18891:8:20",
"nodeType": "YulTypedName",
"src": "18891:8:20",
"type": ""
}
],
"src": "18847:107:20"
},
{
"body": {
"nativeSrc": "19036:317:20",
"nodeType": "YulBlock",
"src": "19036:317:20",
"statements": [
{
"nativeSrc": "19046:35:20",
"nodeType": "YulVariableDeclaration",
"src": "19046:35:20",
"value": {
"arguments": [
{
"name": "shiftBytes",
"nativeSrc": "19067:10:20",
"nodeType": "YulIdentifier",
"src": "19067:10:20"
},
{
"kind": "number",
"nativeSrc": "19079:1:20",
"nodeType": "YulLiteral",
"src": "19079:1:20",
"type": "",
"value": "8"
}
],
"functionName": {
"name": "mul",
"nativeSrc": "19063:3:20",
"nodeType": "YulIdentifier",
"src": "19063:3:20"
},
"nativeSrc": "19063:18:20",
"nodeType": "YulFunctionCall",
"src": "19063:18:20"
},
"variables": [
{
"name": "shiftBits",
"nativeSrc": "19050:9:20",
"nodeType": "YulTypedName",
"src": "19050:9:20",
"type": ""
}
]
},
{
"nativeSrc": "19090:109:20",
"nodeType": "YulVariableDeclaration",
"src": "19090:109:20",
"value": {
"arguments": [
{
"name": "shiftBits",
"nativeSrc": "19121:9:20",
"nodeType": "YulIdentifier",
"src": "19121:9:20"
},
{
"kind": "number",
"nativeSrc": "19132:66:20",
"nodeType": "YulLiteral",
"src": "19132:66:20",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "shift_left_dynamic",
"nativeSrc": "19102:18:20",
"nodeType": "YulIdentifier",
"src": "19102:18:20"
},
"nativeSrc": "19102:97:20",
"nodeType": "YulFunctionCall",
"src": "19102:97:20"
},
"variables": [
{
"name": "mask",
"nativeSrc": "19094:4:20",
"nodeType": "YulTypedName",
"src": "19094:4:20",
"type": ""
}
]
},
{
"nativeSrc": "19208:51:20",
"nodeType": "YulAssignment",
"src": "19208:51:20",
"value": {
"arguments": [
{
"name": "shiftBits",
"nativeSrc": "19239:9:20",
"nodeType": "YulIdentifier",
"src": "19239:9:20"
},
{
"name": "toInsert",
"nativeSrc": "19250:8:20",
"nodeType": "YulIdentifier",
"src": "19250:8:20"
}
],
"functionName": {
"name": "shift_left_dynamic",
"nativeSrc": "19220:18:20",
"nodeType": "YulIdentifier",
"src": "19220:18:20"
},
"nativeSrc": "19220:39:20",
"nodeType": "YulFunctionCall",
"src": "19220:39:20"
},
"variableNames": [
{
"name": "toInsert",
"nativeSrc": "19208:8:20",
"nodeType": "YulIdentifier",
"src": "19208:8:20"
}
]
},
{
"nativeSrc": "19268:30:20",
"nodeType": "YulAssignment",
"src": "19268:30:20",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "19281:5:20",
"nodeType": "YulIdentifier",
"src": "19281:5:20"
},
{
"arguments": [
{
"name": "mask",
"nativeSrc": "19292:4:20",
"nodeType": "YulIdentifier",
"src": "19292:4:20"
}
],
"functionName": {
"name": "not",
"nativeSrc": "19288:3:20",
"nodeType": "YulIdentifier",
"src": "19288:3:20"
},
"nativeSrc": "19288:9:20",
"nodeType": "YulFunctionCall",
"src": "19288:9:20"
}
],
"functionName": {
"name": "and",
"nativeSrc": "19277:3:20",
"nodeType": "YulIdentifier",
"src": "19277:3:20"
},
"nativeSrc": "19277:21:20",
"nodeType": "YulFunctionCall",
"src": "19277:21:20"
},
"variableNames": [
{
"name": "value",
"nativeSrc": "19268:5:20",
"nodeType": "YulIdentifier",
"src": "19268:5:20"
}
]
},
{
"nativeSrc": "19307:40:20",
"nodeType": "YulAssignment",
"src": "19307:40:20",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "19320:5:20",
"nodeType": "YulIdentifier",
"src": "19320:5:20"
},
{
"arguments": [
{
"name": "toInsert",
"nativeSrc": "19331:8:20",
"nodeType": "YulIdentifier",
"src": "19331:8:20"
},
{
"name": "mask",
"nativeSrc": "19341:4:20",
"nodeType": "YulIdentifier",
"src": "19341:4:20"
}
],
"functionName": {
"name": "and",
"nativeSrc": "19327:3:20",
"nodeType": "YulIdentifier",
"src": "19327:3:20"
},
"nativeSrc": "19327:19:20",
"nodeType": "YulFunctionCall",
"src": "19327:19:20"
}
],
"functionName": {
"name": "or",
"nativeSrc": "19317:2:20",
"nodeType": "YulIdentifier",
"src": "19317:2:20"
},
"nativeSrc": "19317:30:20",
"nodeType": "YulFunctionCall",
"src": "19317:30:20"
},
"variableNames": [
{
"name": "result",
"nativeSrc": "19307:6:20",
"nodeType": "YulIdentifier",
"src": "19307:6:20"
}
]
}
]
},
"name": "update_byte_slice_dynamic32",
"nativeSrc": "18960:393:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "18997:5:20",
"nodeType": "YulTypedName",
"src": "18997:5:20",
"type": ""
},
{
"name": "shiftBytes",
"nativeSrc": "19004:10:20",
"nodeType": "YulTypedName",
"src": "19004:10:20",
"type": ""
},
{
"name": "toInsert",
"nativeSrc": "19016:8:20",
"nodeType": "YulTypedName",
"src": "19016:8:20",
"type": ""
}
],
"returnVariables": [
{
"name": "result",
"nativeSrc": "19029:6:20",
"nodeType": "YulTypedName",
"src": "19029:6:20",
"type": ""
}
],
"src": "18960:393:20"
},
{
"body": {
"nativeSrc": "19419:82:20",
"nodeType": "YulBlock",
"src": "19419:82:20",
"statements": [
{
"nativeSrc": "19429:66:20",
"nodeType": "YulAssignment",
"src": "19429:66:20",
"value": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "19487:5:20",
"nodeType": "YulIdentifier",
"src": "19487:5:20"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "19469:17:20",
"nodeType": "YulIdentifier",
"src": "19469:17:20"
},
"nativeSrc": "19469:24:20",
"nodeType": "YulFunctionCall",
"src": "19469:24:20"
}
],
"functionName": {
"name": "identity",
"nativeSrc": "19460:8:20",
"nodeType": "YulIdentifier",
"src": "19460:8:20"
},
"nativeSrc": "19460:34:20",
"nodeType": "YulFunctionCall",
"src": "19460:34:20"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "19442:17:20",
"nodeType": "YulIdentifier",
"src": "19442:17:20"
},
"nativeSrc": "19442:53:20",
"nodeType": "YulFunctionCall",
"src": "19442:53:20"
},
"variableNames": [
{
"name": "converted",
"nativeSrc": "19429:9:20",
"nodeType": "YulIdentifier",
"src": "19429:9:20"
}
]
}
]
},
"name": "convert_t_uint256_to_t_uint256",
"nativeSrc": "19359:142:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "19399:5:20",
"nodeType": "YulTypedName",
"src": "19399:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "converted",
"nativeSrc": "19409:9:20",
"nodeType": "YulTypedName",
"src": "19409:9:20",
"type": ""
}
],
"src": "19359:142:20"
},
{
"body": {
"nativeSrc": "19554:28:20",
"nodeType": "YulBlock",
"src": "19554:28:20",
"statements": [
{
"nativeSrc": "19564:12:20",
"nodeType": "YulAssignment",
"src": "19564:12:20",
"value": {
"name": "value",
"nativeSrc": "19571:5:20",
"nodeType": "YulIdentifier",
"src": "19571:5:20"
},
"variableNames": [
{
"name": "ret",
"nativeSrc": "19564:3:20",
"nodeType": "YulIdentifier",
"src": "19564:3:20"
}
]
}
]
},
"name": "prepare_store_t_uint256",
"nativeSrc": "19507:75:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "19540:5:20",
"nodeType": "YulTypedName",
"src": "19540:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "ret",
"nativeSrc": "19550:3:20",
"nodeType": "YulTypedName",
"src": "19550:3:20",
"type": ""
}
],
"src": "19507:75:20"
},
{
"body": {
"nativeSrc": "19664:193:20",
"nodeType": "YulBlock",
"src": "19664:193:20",
"statements": [
{
"nativeSrc": "19674:63:20",
"nodeType": "YulVariableDeclaration",
"src": "19674:63:20",
"value": {
"arguments": [
{
"name": "value_0",
"nativeSrc": "19729:7:20",
"nodeType": "YulIdentifier",
"src": "19729:7:20"
}
],
"functionName": {
"name": "convert_t_uint256_to_t_uint256",
"nativeSrc": "19698:30:20",
"nodeType": "YulIdentifier",
"src": "19698:30:20"
},
"nativeSrc": "19698:39:20",
"nodeType": "YulFunctionCall",
"src": "19698:39:20"
},
"variables": [
{
"name": "convertedValue_0",
"nativeSrc": "19678:16:20",
"nodeType": "YulTypedName",
"src": "19678:16:20",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "slot",
"nativeSrc": "19753:4:20",
"nodeType": "YulIdentifier",
"src": "19753:4:20"
},
{
"arguments": [
{
"arguments": [
{
"name": "slot",
"nativeSrc": "19793:4:20",
"nodeType": "YulIdentifier",
"src": "19793:4:20"
}
],
"functionName": {
"name": "sload",
"nativeSrc": "19787:5:20",
"nodeType": "YulIdentifier",
"src": "19787:5:20"
},
"nativeSrc": "19787:11:20",
"nodeType": "YulFunctionCall",
"src": "19787:11:20"
},
{
"name": "offset",
"nativeSrc": "19800:6:20",
"nodeType": "YulIdentifier",
"src": "19800:6:20"
},
{
"arguments": [
{
"name": "convertedValue_0",
"nativeSrc": "19832:16:20",
"nodeType": "YulIdentifier",
"src": "19832:16:20"
}
],
"functionName": {
"name": "prepare_store_t_uint256",
"nativeSrc": "19808:23:20",
"nodeType": "YulIdentifier",
"src": "19808:23:20"
},
"nativeSrc": "19808:41:20",
"nodeType": "YulFunctionCall",
"src": "19808:41:20"
}
],
"functionName": {
"name": "update_byte_slice_dynamic32",
"nativeSrc": "19759:27:20",
"nodeType": "YulIdentifier",
"src": "19759:27:20"
},
"nativeSrc": "19759:91:20",
"nodeType": "YulFunctionCall",
"src": "19759:91:20"
}
],
"functionName": {
"name": "sstore",
"nativeSrc": "19746:6:20",
"nodeType": "YulIdentifier",
"src": "19746:6:20"
},
"nativeSrc": "19746:105:20",
"nodeType": "YulFunctionCall",
"src": "19746:105:20"
},
"nativeSrc": "19746:105:20",
"nodeType": "YulExpressionStatement",
"src": "19746:105:20"
}
]
},
"name": "update_storage_value_t_uint256_to_t_uint256",
"nativeSrc": "19588:269:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "slot",
"nativeSrc": "19641:4:20",
"nodeType": "YulTypedName",
"src": "19641:4:20",
"type": ""
},
{
"name": "offset",
"nativeSrc": "19647:6:20",
"nodeType": "YulTypedName",
"src": "19647:6:20",
"type": ""
},
{
"name": "value_0",
"nativeSrc": "19655:7:20",
"nodeType": "YulTypedName",
"src": "19655:7:20",
"type": ""
}
],
"src": "19588:269:20"
},
{
"body": {
"nativeSrc": "19912:24:20",
"nodeType": "YulBlock",
"src": "19912:24:20",
"statements": [
{
"nativeSrc": "19922:8:20",
"nodeType": "YulAssignment",
"src": "19922:8:20",
"value": {
"kind": "number",
"nativeSrc": "19929:1:20",
"nodeType": "YulLiteral",
"src": "19929:1:20",
"type": "",
"value": "0"
},
"variableNames": [
{
"name": "ret",
"nativeSrc": "19922:3:20",
"nodeType": "YulIdentifier",
"src": "19922:3:20"
}
]
}
]
},
"name": "zero_value_for_split_t_uint256",
"nativeSrc": "19863:73:20",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "ret",
"nativeSrc": "19908:3:20",
"nodeType": "YulTypedName",
"src": "19908:3:20",
"type": ""
}
],
"src": "19863:73:20"
},
{
"body": {
"nativeSrc": "19995:136:20",
"nodeType": "YulBlock",
"src": "19995:136:20",
"statements": [
{
"nativeSrc": "20005:46:20",
"nodeType": "YulVariableDeclaration",
"src": "20005:46:20",
"value": {
"arguments": [],
"functionName": {
"name": "zero_value_for_split_t_uint256",
"nativeSrc": "20019:30:20",
"nodeType": "YulIdentifier",
"src": "20019:30:20"
},
"nativeSrc": "20019:32:20",
"nodeType": "YulFunctionCall",
"src": "20019:32:20"
},
"variables": [
{
"name": "zero_0",
"nativeSrc": "20009:6:20",
"nodeType": "YulTypedName",
"src": "20009:6:20",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "slot",
"nativeSrc": "20104:4:20",
"nodeType": "YulIdentifier",
"src": "20104:4:20"
},
{
"name": "offset",
"nativeSrc": "20110:6:20",
"nodeType": "YulIdentifier",
"src": "20110:6:20"
},
{
"name": "zero_0",
"nativeSrc": "20118:6:20",
"nodeType": "YulIdentifier",
"src": "20118:6:20"
}
],
"functionName": {
"name": "update_storage_value_t_uint256_to_t_uint256",
"nativeSrc": "20060:43:20",
"nodeType": "YulIdentifier",
"src": "20060:43:20"
},
"nativeSrc": "20060:65:20",
"nodeType": "YulFunctionCall",
"src": "20060:65:20"
},
"nativeSrc": "20060:65:20",
"nodeType": "YulExpressionStatement",
"src": "20060:65:20"
}
]
},
"name": "storage_set_to_zero_t_uint256",
"nativeSrc": "19942:189:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "slot",
"nativeSrc": "19981:4:20",
"nodeType": "YulTypedName",
"src": "19981:4:20",
"type": ""
},
{
"name": "offset",
"nativeSrc": "19987:6:20",
"nodeType": "YulTypedName",
"src": "19987:6:20",
"type": ""
}
],
"src": "19942:189:20"
},
{
"body": {
"nativeSrc": "20187:136:20",
"nodeType": "YulBlock",
"src": "20187:136:20",
"statements": [
{
"body": {
"nativeSrc": "20254:63:20",
"nodeType": "YulBlock",
"src": "20254:63:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "start",
"nativeSrc": "20298:5:20",
"nodeType": "YulIdentifier",
"src": "20298:5:20"
},
{
"kind": "number",
"nativeSrc": "20305:1:20",
"nodeType": "YulLiteral",
"src": "20305:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "storage_set_to_zero_t_uint256",
"nativeSrc": "20268:29:20",
"nodeType": "YulIdentifier",
"src": "20268:29:20"
},
"nativeSrc": "20268:39:20",
"nodeType": "YulFunctionCall",
"src": "20268:39:20"
},
"nativeSrc": "20268:39:20",
"nodeType": "YulExpressionStatement",
"src": "20268:39:20"
}
]
},
"condition": {
"arguments": [
{
"name": "start",
"nativeSrc": "20207:5:20",
"nodeType": "YulIdentifier",
"src": "20207:5:20"
},
{
"name": "end",
"nativeSrc": "20214:3:20",
"nodeType": "YulIdentifier",
"src": "20214:3:20"
}
],
"functionName": {
"name": "lt",
"nativeSrc": "20204:2:20",
"nodeType": "YulIdentifier",
"src": "20204:2:20"
},
"nativeSrc": "20204:14:20",
"nodeType": "YulFunctionCall",
"src": "20204:14:20"
},
"nativeSrc": "20197:120:20",
"nodeType": "YulForLoop",
"post": {
"nativeSrc": "20219:26:20",
"nodeType": "YulBlock",
"src": "20219:26:20",
"statements": [
{
"nativeSrc": "20221:22:20",
"nodeType": "YulAssignment",
"src": "20221:22:20",
"value": {
"arguments": [
{
"name": "start",
"nativeSrc": "20234:5:20",
"nodeType": "YulIdentifier",
"src": "20234:5:20"
},
{
"kind": "number",
"nativeSrc": "20241:1:20",
"nodeType": "YulLiteral",
"src": "20241:1:20",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "add",
"nativeSrc": "20230:3:20",
"nodeType": "YulIdentifier",
"src": "20230:3:20"
},
"nativeSrc": "20230:13:20",
"nodeType": "YulFunctionCall",
"src": "20230:13:20"
},
"variableNames": [
{
"name": "start",
"nativeSrc": "20221:5:20",
"nodeType": "YulIdentifier",
"src": "20221:5:20"
}
]
}
]
},
"pre": {
"nativeSrc": "20201:2:20",
"nodeType": "YulBlock",
"src": "20201:2:20",
"statements": []
},
"src": "20197:120:20"
}
]
},
"name": "clear_storage_range_t_bytes1",
"nativeSrc": "20137:186:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "start",
"nativeSrc": "20175:5:20",
"nodeType": "YulTypedName",
"src": "20175:5:20",
"type": ""
},
{
"name": "end",
"nativeSrc": "20182:3:20",
"nodeType": "YulTypedName",
"src": "20182:3:20",
"type": ""
}
],
"src": "20137:186:20"
},
{
"body": {
"nativeSrc": "20408:464:20",
"nodeType": "YulBlock",
"src": "20408:464:20",
"statements": [
{
"body": {
"nativeSrc": "20434:431:20",
"nodeType": "YulBlock",
"src": "20434:431:20",
"statements": [
{
"nativeSrc": "20448:54:20",
"nodeType": "YulVariableDeclaration",
"src": "20448:54:20",
"value": {
"arguments": [
{
"name": "array",
"nativeSrc": "20496:5:20",
"nodeType": "YulIdentifier",
"src": "20496:5:20"
}
],
"functionName": {
"name": "array_dataslot_t_string_storage",
"nativeSrc": "20464:31:20",
"nodeType": "YulIdentifier",
"src": "20464:31:20"
},
"nativeSrc": "20464:38:20",
"nodeType": "YulFunctionCall",
"src": "20464:38:20"
},
"variables": [
{
"name": "dataArea",
"nativeSrc": "20452:8:20",
"nodeType": "YulTypedName",
"src": "20452:8:20",
"type": ""
}
]
},
{
"nativeSrc": "20515:63:20",
"nodeType": "YulVariableDeclaration",
"src": "20515:63:20",
"value": {
"arguments": [
{
"name": "dataArea",
"nativeSrc": "20538:8:20",
"nodeType": "YulIdentifier",
"src": "20538:8:20"
},
{
"arguments": [
{
"name": "startIndex",
"nativeSrc": "20566:10:20",
"nodeType": "YulIdentifier",
"src": "20566:10:20"
}
],
"functionName": {
"name": "divide_by_32_ceil",
"nativeSrc": "20548:17:20",
"nodeType": "YulIdentifier",
"src": "20548:17:20"
},
"nativeSrc": "20548:29:20",
"nodeType": "YulFunctionCall",
"src": "20548:29:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "20534:3:20",
"nodeType": "YulIdentifier",
"src": "20534:3:20"
},
"nativeSrc": "20534:44:20",
"nodeType": "YulFunctionCall",
"src": "20534:44:20"
},
"variables": [
{
"name": "deleteStart",
"nativeSrc": "20519:11:20",
"nodeType": "YulTypedName",
"src": "20519:11:20",
"type": ""
}
]
},
{
"body": {
"nativeSrc": "20735:27:20",
"nodeType": "YulBlock",
"src": "20735:27:20",
"statements": [
{
"nativeSrc": "20737:23:20",
"nodeType": "YulAssignment",
"src": "20737:23:20",
"value": {
"name": "dataArea",
"nativeSrc": "20752:8:20",
"nodeType": "YulIdentifier",
"src": "20752:8:20"
},
"variableNames": [
{
"name": "deleteStart",
"nativeSrc": "20737:11:20",
"nodeType": "YulIdentifier",
"src": "20737:11:20"
}
]
}
]
},
"condition": {
"arguments": [
{
"name": "startIndex",
"nativeSrc": "20719:10:20",
"nodeType": "YulIdentifier",
"src": "20719:10:20"
},
{
"kind": "number",
"nativeSrc": "20731:2:20",
"nodeType": "YulLiteral",
"src": "20731:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "lt",
"nativeSrc": "20716:2:20",
"nodeType": "YulIdentifier",
"src": "20716:2:20"
},
"nativeSrc": "20716:18:20",
"nodeType": "YulFunctionCall",
"src": "20716:18:20"
},
"nativeSrc": "20713:49:20",
"nodeType": "YulIf",
"src": "20713:49:20"
},
{
"expression": {
"arguments": [
{
"name": "deleteStart",
"nativeSrc": "20804:11:20",
"nodeType": "YulIdentifier",
"src": "20804:11:20"
},
{
"arguments": [
{
"name": "dataArea",
"nativeSrc": "20821:8:20",
"nodeType": "YulIdentifier",
"src": "20821:8:20"
},
{
"arguments": [
{
"name": "len",
"nativeSrc": "20849:3:20",
"nodeType": "YulIdentifier",
"src": "20849:3:20"
}
],
"functionName": {
"name": "divide_by_32_ceil",
"nativeSrc": "20831:17:20",
"nodeType": "YulIdentifier",
"src": "20831:17:20"
},
"nativeSrc": "20831:22:20",
"nodeType": "YulFunctionCall",
"src": "20831:22:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "20817:3:20",
"nodeType": "YulIdentifier",
"src": "20817:3:20"
},
"nativeSrc": "20817:37:20",
"nodeType": "YulFunctionCall",
"src": "20817:37:20"
}
],
"functionName": {
"name": "clear_storage_range_t_bytes1",
"nativeSrc": "20775:28:20",
"nodeType": "YulIdentifier",
"src": "20775:28:20"
},
"nativeSrc": "20775:80:20",
"nodeType": "YulFunctionCall",
"src": "20775:80:20"
},
"nativeSrc": "20775:80:20",
"nodeType": "YulExpressionStatement",
"src": "20775:80:20"
}
]
},
"condition": {
"arguments": [
{
"name": "len",
"nativeSrc": "20425:3:20",
"nodeType": "YulIdentifier",
"src": "20425:3:20"
},
{
"kind": "number",
"nativeSrc": "20430:2:20",
"nodeType": "YulLiteral",
"src": "20430:2:20",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "gt",
"nativeSrc": "20422:2:20",
"nodeType": "YulIdentifier",
"src": "20422:2:20"
},
"nativeSrc": "20422:11:20",
"nodeType": "YulFunctionCall",
"src": "20422:11:20"
},
"nativeSrc": "20419:446:20",
"nodeType": "YulIf",
"src": "20419:446:20"
}
]
},
"name": "clean_up_bytearray_end_slots_t_string_storage",
"nativeSrc": "20329:543:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "array",
"nativeSrc": "20384:5:20",
"nodeType": "YulTypedName",
"src": "20384:5:20",
"type": ""
},
{
"name": "len",
"nativeSrc": "20391:3:20",
"nodeType": "YulTypedName",
"src": "20391:3:20",
"type": ""
},
{
"name": "startIndex",
"nativeSrc": "20396:10:20",
"nodeType": "YulTypedName",
"src": "20396:10:20",
"type": ""
}
],
"src": "20329:543:20"
},
{
"body": {
"nativeSrc": "20941:54:20",
"nodeType": "YulBlock",
"src": "20941:54:20",
"statements": [
{
"nativeSrc": "20951:37:20",
"nodeType": "YulAssignment",
"src": "20951:37:20",
"value": {
"arguments": [
{
"name": "bits",
"nativeSrc": "20976:4:20",
"nodeType": "YulIdentifier",
"src": "20976:4:20"
},
{
"name": "value",
"nativeSrc": "20982:5:20",
"nodeType": "YulIdentifier",
"src": "20982:5:20"
}
],
"functionName": {
"name": "shr",
"nativeSrc": "20972:3:20",
"nodeType": "YulIdentifier",
"src": "20972:3:20"
},
"nativeSrc": "20972:16:20",
"nodeType": "YulFunctionCall",
"src": "20972:16:20"
},
"variableNames": [
{
"name": "newValue",
"nativeSrc": "20951:8:20",
"nodeType": "YulIdentifier",
"src": "20951:8:20"
}
]
}
]
},
"name": "shift_right_unsigned_dynamic",
"nativeSrc": "20878:117:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "bits",
"nativeSrc": "20916:4:20",
"nodeType": "YulTypedName",
"src": "20916:4:20",
"type": ""
},
{
"name": "value",
"nativeSrc": "20922:5:20",
"nodeType": "YulTypedName",
"src": "20922:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "newValue",
"nativeSrc": "20932:8:20",
"nodeType": "YulTypedName",
"src": "20932:8:20",
"type": ""
}
],
"src": "20878:117:20"
},
{
"body": {
"nativeSrc": "21052:118:20",
"nodeType": "YulBlock",
"src": "21052:118:20",
"statements": [
{
"nativeSrc": "21062:68:20",
"nodeType": "YulVariableDeclaration",
"src": "21062:68:20",
"value": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nativeSrc": "21111:1:20",
"nodeType": "YulLiteral",
"src": "21111:1:20",
"type": "",
"value": "8"
},
{
"name": "bytes",
"nativeSrc": "21114:5:20",
"nodeType": "YulIdentifier",
"src": "21114:5:20"
}
],
"functionName": {
"name": "mul",
"nativeSrc": "21107:3:20",
"nodeType": "YulIdentifier",
"src": "21107:3:20"
},
"nativeSrc": "21107:13:20",
"nodeType": "YulFunctionCall",
"src": "21107:13:20"
},
{
"arguments": [
{
"kind": "number",
"nativeSrc": "21126:1:20",
"nodeType": "YulLiteral",
"src": "21126:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "not",
"nativeSrc": "21122:3:20",
"nodeType": "YulIdentifier",
"src": "21122:3:20"
},
"nativeSrc": "21122:6:20",
"nodeType": "YulFunctionCall",
"src": "21122:6:20"
}
],
"functionName": {
"name": "shift_right_unsigned_dynamic",
"nativeSrc": "21078:28:20",
"nodeType": "YulIdentifier",
"src": "21078:28:20"
},
"nativeSrc": "21078:51:20",
"nodeType": "YulFunctionCall",
"src": "21078:51:20"
}
],
"functionName": {
"name": "not",
"nativeSrc": "21074:3:20",
"nodeType": "YulIdentifier",
"src": "21074:3:20"
},
"nativeSrc": "21074:56:20",
"nodeType": "YulFunctionCall",
"src": "21074:56:20"
},
"variables": [
{
"name": "mask",
"nativeSrc": "21066:4:20",
"nodeType": "YulTypedName",
"src": "21066:4:20",
"type": ""
}
]
},
{
"nativeSrc": "21139:25:20",
"nodeType": "YulAssignment",
"src": "21139:25:20",
"value": {
"arguments": [
{
"name": "data",
"nativeSrc": "21153:4:20",
"nodeType": "YulIdentifier",
"src": "21153:4:20"
},
{
"name": "mask",
"nativeSrc": "21159:4:20",
"nodeType": "YulIdentifier",
"src": "21159:4:20"
}
],
"functionName": {
"name": "and",
"nativeSrc": "21149:3:20",
"nodeType": "YulIdentifier",
"src": "21149:3:20"
},
"nativeSrc": "21149:15:20",
"nodeType": "YulFunctionCall",
"src": "21149:15:20"
},
"variableNames": [
{
"name": "result",
"nativeSrc": "21139:6:20",
"nodeType": "YulIdentifier",
"src": "21139:6:20"
}
]
}
]
},
"name": "mask_bytes_dynamic",
"nativeSrc": "21001:169:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "data",
"nativeSrc": "21029:4:20",
"nodeType": "YulTypedName",
"src": "21029:4:20",
"type": ""
},
{
"name": "bytes",
"nativeSrc": "21035:5:20",
"nodeType": "YulTypedName",
"src": "21035:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "result",
"nativeSrc": "21045:6:20",
"nodeType": "YulTypedName",
"src": "21045:6:20",
"type": ""
}
],
"src": "21001:169:20"
},
{
"body": {
"nativeSrc": "21256:214:20",
"nodeType": "YulBlock",
"src": "21256:214:20",
"statements": [
{
"nativeSrc": "21389:37:20",
"nodeType": "YulAssignment",
"src": "21389:37:20",
"value": {
"arguments": [
{
"name": "data",
"nativeSrc": "21416:4:20",
"nodeType": "YulIdentifier",
"src": "21416:4:20"
},
{
"name": "len",
"nativeSrc": "21422:3:20",
"nodeType": "YulIdentifier",
"src": "21422:3:20"
}
],
"functionName": {
"name": "mask_bytes_dynamic",
"nativeSrc": "21397:18:20",
"nodeType": "YulIdentifier",
"src": "21397:18:20"
},
"nativeSrc": "21397:29:20",
"nodeType": "YulFunctionCall",
"src": "21397:29:20"
},
"variableNames": [
{
"name": "data",
"nativeSrc": "21389:4:20",
"nodeType": "YulIdentifier",
"src": "21389:4:20"
}
]
},
{
"nativeSrc": "21435:29:20",
"nodeType": "YulAssignment",
"src": "21435:29:20",
"value": {
"arguments": [
{
"name": "data",
"nativeSrc": "21446:4:20",
"nodeType": "YulIdentifier",
"src": "21446:4:20"
},
{
"arguments": [
{
"kind": "number",
"nativeSrc": "21456:1:20",
"nodeType": "YulLiteral",
"src": "21456:1:20",
"type": "",
"value": "2"
},
{
"name": "len",
"nativeSrc": "21459:3:20",
"nodeType": "YulIdentifier",
"src": "21459:3:20"
}
],
"functionName": {
"name": "mul",
"nativeSrc": "21452:3:20",
"nodeType": "YulIdentifier",
"src": "21452:3:20"
},
"nativeSrc": "21452:11:20",
"nodeType": "YulFunctionCall",
"src": "21452:11:20"
}
],
"functionName": {
"name": "or",
"nativeSrc": "21443:2:20",
"nodeType": "YulIdentifier",
"src": "21443:2:20"
},
"nativeSrc": "21443:21:20",
"nodeType": "YulFunctionCall",
"src": "21443:21:20"
},
"variableNames": [
{
"name": "used",
"nativeSrc": "21435:4:20",
"nodeType": "YulIdentifier",
"src": "21435:4:20"
}
]
}
]
},
"name": "extract_used_part_and_set_length_of_short_byte_array",
"nativeSrc": "21175:295:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "data",
"nativeSrc": "21237:4:20",
"nodeType": "YulTypedName",
"src": "21237:4:20",
"type": ""
},
{
"name": "len",
"nativeSrc": "21243:3:20",
"nodeType": "YulTypedName",
"src": "21243:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "used",
"nativeSrc": "21251:4:20",
"nodeType": "YulTypedName",
"src": "21251:4:20",
"type": ""
}
],
"src": "21175:295:20"
},
{
"body": {
"nativeSrc": "21567:1303:20",
"nodeType": "YulBlock",
"src": "21567:1303:20",
"statements": [
{
"nativeSrc": "21578:51:20",
"nodeType": "YulVariableDeclaration",
"src": "21578:51:20",
"value": {
"arguments": [
{
"name": "src",
"nativeSrc": "21625:3:20",
"nodeType": "YulIdentifier",
"src": "21625:3:20"
}
],
"functionName": {
"name": "array_length_t_string_memory_ptr",
"nativeSrc": "21592:32:20",
"nodeType": "YulIdentifier",
"src": "21592:32:20"
},
"nativeSrc": "21592:37:20",
"nodeType": "YulFunctionCall",
"src": "21592:37:20"
},
"variables": [
{
"name": "newLen",
"nativeSrc": "21582:6:20",
"nodeType": "YulTypedName",
"src": "21582:6:20",
"type": ""
}
]
},
{
"body": {
"nativeSrc": "21714:22:20",
"nodeType": "YulBlock",
"src": "21714:22:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x41",
"nativeSrc": "21716:16:20",
"nodeType": "YulIdentifier",
"src": "21716:16:20"
},
"nativeSrc": "21716:18:20",
"nodeType": "YulFunctionCall",
"src": "21716:18:20"
},
"nativeSrc": "21716:18:20",
"nodeType": "YulExpressionStatement",
"src": "21716:18:20"
}
]
},
"condition": {
"arguments": [
{
"name": "newLen",
"nativeSrc": "21686:6:20",
"nodeType": "YulIdentifier",
"src": "21686:6:20"
},
{
"kind": "number",
"nativeSrc": "21694:18:20",
"nodeType": "YulLiteral",
"src": "21694:18:20",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nativeSrc": "21683:2:20",
"nodeType": "YulIdentifier",
"src": "21683:2:20"
},
"nativeSrc": "21683:30:20",
"nodeType": "YulFunctionCall",
"src": "21683:30:20"
},
"nativeSrc": "21680:56:20",
"nodeType": "YulIf",
"src": "21680:56:20"
},
{
"nativeSrc": "21746:52:20",
"nodeType": "YulVariableDeclaration",
"src": "21746:52:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "slot",
"nativeSrc": "21792:4:20",
"nodeType": "YulIdentifier",
"src": "21792:4:20"
}
],
"functionName": {
"name": "sload",
"nativeSrc": "21786:5:20",
"nodeType": "YulIdentifier",
"src": "21786:5:20"
},
"nativeSrc": "21786:11:20",
"nodeType": "YulFunctionCall",
"src": "21786:11:20"
}
],
"functionName": {
"name": "extract_byte_array_length",
"nativeSrc": "21760:25:20",
"nodeType": "YulIdentifier",
"src": "21760:25:20"
},
"nativeSrc": "21760:38:20",
"nodeType": "YulFunctionCall",
"src": "21760:38:20"
},
"variables": [
{
"name": "oldLen",
"nativeSrc": "21750:6:20",
"nodeType": "YulTypedName",
"src": "21750:6:20",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "slot",
"nativeSrc": "21891:4:20",
"nodeType": "YulIdentifier",
"src": "21891:4:20"
},
{
"name": "oldLen",
"nativeSrc": "21897:6:20",
"nodeType": "YulIdentifier",
"src": "21897:6:20"
},
{
"name": "newLen",
"nativeSrc": "21905:6:20",
"nodeType": "YulIdentifier",
"src": "21905:6:20"
}
],
"functionName": {
"name": "clean_up_bytearray_end_slots_t_string_storage",
"nativeSrc": "21845:45:20",
"nodeType": "YulIdentifier",
"src": "21845:45:20"
},
"nativeSrc": "21845:67:20",
"nodeType": "YulFunctionCall",
"src": "21845:67:20"
},
"nativeSrc": "21845:67:20",
"nodeType": "YulExpressionStatement",
"src": "21845:67:20"
},
{
"nativeSrc": "21922:18:20",
"nodeType": "YulVariableDeclaration",
"src": "21922:18:20",
"value": {
"kind": "number",
"nativeSrc": "21939:1:20",
"nodeType": "YulLiteral",
"src": "21939:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "srcOffset",
"nativeSrc": "21926:9:20",
"nodeType": "YulTypedName",
"src": "21926:9:20",
"type": ""
}
]
},
{
"nativeSrc": "21950:17:20",
"nodeType": "YulAssignment",
"src": "21950:17:20",
"value": {
"kind": "number",
"nativeSrc": "21963:4:20",
"nodeType": "YulLiteral",
"src": "21963:4:20",
"type": "",
"value": "0x20"
},
"variableNames": [
{
"name": "srcOffset",
"nativeSrc": "21950:9:20",
"nodeType": "YulIdentifier",
"src": "21950:9:20"
}
]
},
{
"cases": [
{
"body": {
"nativeSrc": "22014:611:20",
"nodeType": "YulBlock",
"src": "22014:611:20",
"statements": [
{
"nativeSrc": "22028:37:20",
"nodeType": "YulVariableDeclaration",
"src": "22028:37:20",
"value": {
"arguments": [
{
"name": "newLen",
"nativeSrc": "22047:6:20",
"nodeType": "YulIdentifier",
"src": "22047:6:20"
},
{
"arguments": [
{
"kind": "number",
"nativeSrc": "22059:4:20",
"nodeType": "YulLiteral",
"src": "22059:4:20",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "not",
"nativeSrc": "22055:3:20",
"nodeType": "YulIdentifier",
"src": "22055:3:20"
},
"nativeSrc": "22055:9:20",
"nodeType": "YulFunctionCall",
"src": "22055:9:20"
}
],
"functionName": {
"name": "and",
"nativeSrc": "22043:3:20",
"nodeType": "YulIdentifier",
"src": "22043:3:20"
},
"nativeSrc": "22043:22:20",
"nodeType": "YulFunctionCall",
"src": "22043:22:20"
},
"variables": [
{
"name": "loopEnd",
"nativeSrc": "22032:7:20",
"nodeType": "YulTypedName",
"src": "22032:7:20",
"type": ""
}
]
},
{
"nativeSrc": "22079:51:20",
"nodeType": "YulVariableDeclaration",
"src": "22079:51:20",
"value": {
"arguments": [
{
"name": "slot",
"nativeSrc": "22125:4:20",
"nodeType": "YulIdentifier",
"src": "22125:4:20"
}
],
"functionName": {
"name": "array_dataslot_t_string_storage",
"nativeSrc": "22093:31:20",
"nodeType": "YulIdentifier",
"src": "22093:31:20"
},
"nativeSrc": "22093:37:20",
"nodeType": "YulFunctionCall",
"src": "22093:37:20"
},
"variables": [
{
"name": "dstPtr",
"nativeSrc": "22083:6:20",
"nodeType": "YulTypedName",
"src": "22083:6:20",
"type": ""
}
]
},
{
"nativeSrc": "22143:10:20",
"nodeType": "YulVariableDeclaration",
"src": "22143:10:20",
"value": {
"kind": "number",
"nativeSrc": "22152:1:20",
"nodeType": "YulLiteral",
"src": "22152:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "i",
"nativeSrc": "22147:1:20",
"nodeType": "YulTypedName",
"src": "22147:1:20",
"type": ""
}
]
},
{
"body": {
"nativeSrc": "22211:163:20",
"nodeType": "YulBlock",
"src": "22211:163:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "dstPtr",
"nativeSrc": "22236:6:20",
"nodeType": "YulIdentifier",
"src": "22236:6:20"
},
{
"arguments": [
{
"arguments": [
{
"name": "src",
"nativeSrc": "22254:3:20",
"nodeType": "YulIdentifier",
"src": "22254:3:20"
},
{
"name": "srcOffset",
"nativeSrc": "22259:9:20",
"nodeType": "YulIdentifier",
"src": "22259:9:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "22250:3:20",
"nodeType": "YulIdentifier",
"src": "22250:3:20"
},
"nativeSrc": "22250:19:20",
"nodeType": "YulFunctionCall",
"src": "22250:19:20"
}
],
"functionName": {
"name": "mload",
"nativeSrc": "22244:5:20",
"nodeType": "YulIdentifier",
"src": "22244:5:20"
},
"nativeSrc": "22244:26:20",
"nodeType": "YulFunctionCall",
"src": "22244:26:20"
}
],
"functionName": {
"name": "sstore",
"nativeSrc": "22229:6:20",
"nodeType": "YulIdentifier",
"src": "22229:6:20"
},
"nativeSrc": "22229:42:20",
"nodeType": "YulFunctionCall",
"src": "22229:42:20"
},
"nativeSrc": "22229:42:20",
"nodeType": "YulExpressionStatement",
"src": "22229:42:20"
},
{
"nativeSrc": "22288:24:20",
"nodeType": "YulAssignment",
"src": "22288:24:20",
"value": {
"arguments": [
{
"name": "dstPtr",
"nativeSrc": "22302:6:20",
"nodeType": "YulIdentifier",
"src": "22302:6:20"
},
{
"kind": "number",
"nativeSrc": "22310:1:20",
"nodeType": "YulLiteral",
"src": "22310:1:20",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "add",
"nativeSrc": "22298:3:20",
"nodeType": "YulIdentifier",
"src": "22298:3:20"
},
"nativeSrc": "22298:14:20",
"nodeType": "YulFunctionCall",
"src": "22298:14:20"
},
"variableNames": [
{
"name": "dstPtr",
"nativeSrc": "22288:6:20",
"nodeType": "YulIdentifier",
"src": "22288:6:20"
}
]
},
{
"nativeSrc": "22329:31:20",
"nodeType": "YulAssignment",
"src": "22329:31:20",
"value": {
"arguments": [
{
"name": "srcOffset",
"nativeSrc": "22346:9:20",
"nodeType": "YulIdentifier",
"src": "22346:9:20"
},
{
"kind": "number",
"nativeSrc": "22357:2:20",
"nodeType": "YulLiteral",
"src": "22357:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "22342:3:20",
"nodeType": "YulIdentifier",
"src": "22342:3:20"
},
"nativeSrc": "22342:18:20",
"nodeType": "YulFunctionCall",
"src": "22342:18:20"
},
"variableNames": [
{
"name": "srcOffset",
"nativeSrc": "22329:9:20",
"nodeType": "YulIdentifier",
"src": "22329:9:20"
}
]
}
]
},
"condition": {
"arguments": [
{
"name": "i",
"nativeSrc": "22177:1:20",
"nodeType": "YulIdentifier",
"src": "22177:1:20"
},
{
"name": "loopEnd",
"nativeSrc": "22180:7:20",
"nodeType": "YulIdentifier",
"src": "22180:7:20"
}
],
"functionName": {
"name": "lt",
"nativeSrc": "22174:2:20",
"nodeType": "YulIdentifier",
"src": "22174:2:20"
},
"nativeSrc": "22174:14:20",
"nodeType": "YulFunctionCall",
"src": "22174:14:20"
},
"nativeSrc": "22166:208:20",
"nodeType": "YulForLoop",
"post": {
"nativeSrc": "22189:21:20",
"nodeType": "YulBlock",
"src": "22189:21:20",
"statements": [
{
"nativeSrc": "22191:17:20",
"nodeType": "YulAssignment",
"src": "22191:17:20",
"value": {
"arguments": [
{
"name": "i",
"nativeSrc": "22200:1:20",
"nodeType": "YulIdentifier",
"src": "22200:1:20"
},
{
"kind": "number",
"nativeSrc": "22203:4:20",
"nodeType": "YulLiteral",
"src": "22203:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "22196:3:20",
"nodeType": "YulIdentifier",
"src": "22196:3:20"
},
"nativeSrc": "22196:12:20",
"nodeType": "YulFunctionCall",
"src": "22196:12:20"
},
"variableNames": [
{
"name": "i",
"nativeSrc": "22191:1:20",
"nodeType": "YulIdentifier",
"src": "22191:1:20"
}
]
}
]
},
"pre": {
"nativeSrc": "22170:3:20",
"nodeType": "YulBlock",
"src": "22170:3:20",
"statements": []
},
"src": "22166:208:20"
},
{
"body": {
"nativeSrc": "22410:156:20",
"nodeType": "YulBlock",
"src": "22410:156:20",
"statements": [
{
"nativeSrc": "22428:43:20",
"nodeType": "YulVariableDeclaration",
"src": "22428:43:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "src",
"nativeSrc": "22455:3:20",
"nodeType": "YulIdentifier",
"src": "22455:3:20"
},
{
"name": "srcOffset",
"nativeSrc": "22460:9:20",
"nodeType": "YulIdentifier",
"src": "22460:9:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "22451:3:20",
"nodeType": "YulIdentifier",
"src": "22451:3:20"
},
"nativeSrc": "22451:19:20",
"nodeType": "YulFunctionCall",
"src": "22451:19:20"
}
],
"functionName": {
"name": "mload",
"nativeSrc": "22445:5:20",
"nodeType": "YulIdentifier",
"src": "22445:5:20"
},
"nativeSrc": "22445:26:20",
"nodeType": "YulFunctionCall",
"src": "22445:26:20"
},
"variables": [
{
"name": "lastValue",
"nativeSrc": "22432:9:20",
"nodeType": "YulTypedName",
"src": "22432:9:20",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "dstPtr",
"nativeSrc": "22495:6:20",
"nodeType": "YulIdentifier",
"src": "22495:6:20"
},
{
"arguments": [
{
"name": "lastValue",
"nativeSrc": "22522:9:20",
"nodeType": "YulIdentifier",
"src": "22522:9:20"
},
{
"arguments": [
{
"name": "newLen",
"nativeSrc": "22537:6:20",
"nodeType": "YulIdentifier",
"src": "22537:6:20"
},
{
"kind": "number",
"nativeSrc": "22545:4:20",
"nodeType": "YulLiteral",
"src": "22545:4:20",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "and",
"nativeSrc": "22533:3:20",
"nodeType": "YulIdentifier",
"src": "22533:3:20"
},
"nativeSrc": "22533:17:20",
"nodeType": "YulFunctionCall",
"src": "22533:17:20"
}
],
"functionName": {
"name": "mask_bytes_dynamic",
"nativeSrc": "22503:18:20",
"nodeType": "YulIdentifier",
"src": "22503:18:20"
},
"nativeSrc": "22503:48:20",
"nodeType": "YulFunctionCall",
"src": "22503:48:20"
}
],
"functionName": {
"name": "sstore",
"nativeSrc": "22488:6:20",
"nodeType": "YulIdentifier",
"src": "22488:6:20"
},
"nativeSrc": "22488:64:20",
"nodeType": "YulFunctionCall",
"src": "22488:64:20"
},
"nativeSrc": "22488:64:20",
"nodeType": "YulExpressionStatement",
"src": "22488:64:20"
}
]
},
"condition": {
"arguments": [
{
"name": "loopEnd",
"nativeSrc": "22393:7:20",
"nodeType": "YulIdentifier",
"src": "22393:7:20"
},
{
"name": "newLen",
"nativeSrc": "22402:6:20",
"nodeType": "YulIdentifier",
"src": "22402:6:20"
}
],
"functionName": {
"name": "lt",
"nativeSrc": "22390:2:20",
"nodeType": "YulIdentifier",
"src": "22390:2:20"
},
"nativeSrc": "22390:19:20",
"nodeType": "YulFunctionCall",
"src": "22390:19:20"
},
"nativeSrc": "22387:179:20",
"nodeType": "YulIf",
"src": "22387:179:20"
},
{
"expression": {
"arguments": [
{
"name": "slot",
"nativeSrc": "22586:4:20",
"nodeType": "YulIdentifier",
"src": "22586:4:20"
},
{
"arguments": [
{
"arguments": [
{
"name": "newLen",
"nativeSrc": "22600:6:20",
"nodeType": "YulIdentifier",
"src": "22600:6:20"
},
{
"kind": "number",
"nativeSrc": "22608:1:20",
"nodeType": "YulLiteral",
"src": "22608:1:20",
"type": "",
"value": "2"
}
],
"functionName": {
"name": "mul",
"nativeSrc": "22596:3:20",
"nodeType": "YulIdentifier",
"src": "22596:3:20"
},
"nativeSrc": "22596:14:20",
"nodeType": "YulFunctionCall",
"src": "22596:14:20"
},
{
"kind": "number",
"nativeSrc": "22612:1:20",
"nodeType": "YulLiteral",
"src": "22612:1:20",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "add",
"nativeSrc": "22592:3:20",
"nodeType": "YulIdentifier",
"src": "22592:3:20"
},
"nativeSrc": "22592:22:20",
"nodeType": "YulFunctionCall",
"src": "22592:22:20"
}
],
"functionName": {
"name": "sstore",
"nativeSrc": "22579:6:20",
"nodeType": "YulIdentifier",
"src": "22579:6:20"
},
"nativeSrc": "22579:36:20",
"nodeType": "YulFunctionCall",
"src": "22579:36:20"
},
"nativeSrc": "22579:36:20",
"nodeType": "YulExpressionStatement",
"src": "22579:36:20"
}
]
},
"nativeSrc": "22007:618:20",
"nodeType": "YulCase",
"src": "22007:618:20",
"value": {
"kind": "number",
"nativeSrc": "22012:1:20",
"nodeType": "YulLiteral",
"src": "22012:1:20",
"type": "",
"value": "1"
}
},
{
"body": {
"nativeSrc": "22642:222:20",
"nodeType": "YulBlock",
"src": "22642:222:20",
"statements": [
{
"nativeSrc": "22656:14:20",
"nodeType": "YulVariableDeclaration",
"src": "22656:14:20",
"value": {
"kind": "number",
"nativeSrc": "22669:1:20",
"nodeType": "YulLiteral",
"src": "22669:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "value",
"nativeSrc": "22660:5:20",
"nodeType": "YulTypedName",
"src": "22660:5:20",
"type": ""
}
]
},
{
"body": {
"nativeSrc": "22693:67:20",
"nodeType": "YulBlock",
"src": "22693:67:20",
"statements": [
{
"nativeSrc": "22711:35:20",
"nodeType": "YulAssignment",
"src": "22711:35:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "src",
"nativeSrc": "22730:3:20",
"nodeType": "YulIdentifier",
"src": "22730:3:20"
},
{
"name": "srcOffset",
"nativeSrc": "22735:9:20",
"nodeType": "YulIdentifier",
"src": "22735:9:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "22726:3:20",
"nodeType": "YulIdentifier",
"src": "22726:3:20"
},
"nativeSrc": "22726:19:20",
"nodeType": "YulFunctionCall",
"src": "22726:19:20"
}
],
"functionName": {
"name": "mload",
"nativeSrc": "22720:5:20",
"nodeType": "YulIdentifier",
"src": "22720:5:20"
},
"nativeSrc": "22720:26:20",
"nodeType": "YulFunctionCall",
"src": "22720:26:20"
},
"variableNames": [
{
"name": "value",
"nativeSrc": "22711:5:20",
"nodeType": "YulIdentifier",
"src": "22711:5:20"
}
]
}
]
},
"condition": {
"name": "newLen",
"nativeSrc": "22686:6:20",
"nodeType": "YulIdentifier",
"src": "22686:6:20"
},
"nativeSrc": "22683:77:20",
"nodeType": "YulIf",
"src": "22683:77:20"
},
{
"expression": {
"arguments": [
{
"name": "slot",
"nativeSrc": "22780:4:20",
"nodeType": "YulIdentifier",
"src": "22780:4:20"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "22839:5:20",
"nodeType": "YulIdentifier",
"src": "22839:5:20"
},
{
"name": "newLen",
"nativeSrc": "22846:6:20",
"nodeType": "YulIdentifier",
"src": "22846:6:20"
}
],
"functionName": {
"name": "extract_used_part_and_set_length_of_short_byte_array",
"nativeSrc": "22786:52:20",
"nodeType": "YulIdentifier",
"src": "22786:52:20"
},
"nativeSrc": "22786:67:20",
"nodeType": "YulFunctionCall",
"src": "22786:67:20"
}
],
"functionName": {
"name": "sstore",
"nativeSrc": "22773:6:20",
"nodeType": "YulIdentifier",
"src": "22773:6:20"
},
"nativeSrc": "22773:81:20",
"nodeType": "YulFunctionCall",
"src": "22773:81:20"
},
"nativeSrc": "22773:81:20",
"nodeType": "YulExpressionStatement",
"src": "22773:81:20"
}
]
},
"nativeSrc": "22634:230:20",
"nodeType": "YulCase",
"src": "22634:230:20",
"value": "default"
}
],
"expression": {
"arguments": [
{
"name": "newLen",
"nativeSrc": "21987:6:20",
"nodeType": "YulIdentifier",
"src": "21987:6:20"
},
{
"kind": "number",
"nativeSrc": "21995:2:20",
"nodeType": "YulLiteral",
"src": "21995:2:20",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "gt",
"nativeSrc": "21984:2:20",
"nodeType": "YulIdentifier",
"src": "21984:2:20"
},
"nativeSrc": "21984:14:20",
"nodeType": "YulFunctionCall",
"src": "21984:14:20"
},
"nativeSrc": "21977:887:20",
"nodeType": "YulSwitch",
"src": "21977:887:20"
}
]
},
"name": "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage",
"nativeSrc": "21475:1395:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "slot",
"nativeSrc": "21556:4:20",
"nodeType": "YulTypedName",
"src": "21556:4:20",
"type": ""
},
{
"name": "src",
"nativeSrc": "21562:3:20",
"nodeType": "YulTypedName",
"src": "21562:3:20",
"type": ""
}
],
"src": "21475:1395:20"
},
{
"body": {
"nativeSrc": "22989:34:20",
"nodeType": "YulBlock",
"src": "22989:34:20",
"statements": [
{
"nativeSrc": "22999:18:20",
"nodeType": "YulAssignment",
"src": "22999:18:20",
"value": {
"name": "pos",
"nativeSrc": "23014:3:20",
"nodeType": "YulIdentifier",
"src": "23014:3:20"
},
"variableNames": [
{
"name": "updated_pos",
"nativeSrc": "22999:11:20",
"nodeType": "YulIdentifier",
"src": "22999:11:20"
}
]
}
]
},
"name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
"nativeSrc": "22876:147:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nativeSrc": "22961:3:20",
"nodeType": "YulTypedName",
"src": "22961:3:20",
"type": ""
},
{
"name": "length",
"nativeSrc": "22966:6:20",
"nodeType": "YulTypedName",
"src": "22966:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "updated_pos",
"nativeSrc": "22977:11:20",
"nodeType": "YulTypedName",
"src": "22977:11:20",
"type": ""
}
],
"src": "22876:147:20"
},
{
"body": {
"nativeSrc": "23137:278:20",
"nodeType": "YulBlock",
"src": "23137:278:20",
"statements": [
{
"nativeSrc": "23147:52:20",
"nodeType": "YulVariableDeclaration",
"src": "23147:52:20",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "23193:5:20",
"nodeType": "YulIdentifier",
"src": "23193:5:20"
}
],
"functionName": {
"name": "array_length_t_bytes_memory_ptr",
"nativeSrc": "23161:31:20",
"nodeType": "YulIdentifier",
"src": "23161:31:20"
},
"nativeSrc": "23161:38:20",
"nodeType": "YulFunctionCall",
"src": "23161:38:20"
},
"variables": [
{
"name": "length",
"nativeSrc": "23151:6:20",
"nodeType": "YulTypedName",
"src": "23151:6:20",
"type": ""
}
]
},
{
"nativeSrc": "23208:95:20",
"nodeType": "YulAssignment",
"src": "23208:95:20",
"value": {
"arguments": [
{
"name": "pos",
"nativeSrc": "23291:3:20",
"nodeType": "YulIdentifier",
"src": "23291:3:20"
},
{
"name": "length",
"nativeSrc": "23296:6:20",
"nodeType": "YulIdentifier",
"src": "23296:6:20"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
"nativeSrc": "23215:75:20",
"nodeType": "YulIdentifier",
"src": "23215:75:20"
},
"nativeSrc": "23215:88:20",
"nodeType": "YulFunctionCall",
"src": "23215:88:20"
},
"variableNames": [
{
"name": "pos",
"nativeSrc": "23208:3:20",
"nodeType": "YulIdentifier",
"src": "23208:3:20"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "23351:5:20",
"nodeType": "YulIdentifier",
"src": "23351:5:20"
},
{
"kind": "number",
"nativeSrc": "23358:4:20",
"nodeType": "YulLiteral",
"src": "23358:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "23347:3:20",
"nodeType": "YulIdentifier",
"src": "23347:3:20"
},
"nativeSrc": "23347:16:20",
"nodeType": "YulFunctionCall",
"src": "23347:16:20"
},
{
"name": "pos",
"nativeSrc": "23365:3:20",
"nodeType": "YulIdentifier",
"src": "23365:3:20"
},
{
"name": "length",
"nativeSrc": "23370:6:20",
"nodeType": "YulIdentifier",
"src": "23370:6:20"
}
],
"functionName": {
"name": "copy_memory_to_memory_with_cleanup",
"nativeSrc": "23312:34:20",
"nodeType": "YulIdentifier",
"src": "23312:34:20"
},
"nativeSrc": "23312:65:20",
"nodeType": "YulFunctionCall",
"src": "23312:65:20"
},
"nativeSrc": "23312:65:20",
"nodeType": "YulExpressionStatement",
"src": "23312:65:20"
},
{
"nativeSrc": "23386:23:20",
"nodeType": "YulAssignment",
"src": "23386:23:20",
"value": {
"arguments": [
{
"name": "pos",
"nativeSrc": "23397:3:20",
"nodeType": "YulIdentifier",
"src": "23397:3:20"
},
{
"name": "length",
"nativeSrc": "23402:6:20",
"nodeType": "YulIdentifier",
"src": "23402:6:20"
}
],
"functionName": {
"name": "add",
"nativeSrc": "23393:3:20",
"nodeType": "YulIdentifier",
"src": "23393:3:20"
},
"nativeSrc": "23393:16:20",
"nodeType": "YulFunctionCall",
"src": "23393:16:20"
},
"variableNames": [
{
"name": "end",
"nativeSrc": "23386:3:20",
"nodeType": "YulIdentifier",
"src": "23386:3:20"
}
]
}
]
},
"name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
"nativeSrc": "23029:386:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "23118:5:20",
"nodeType": "YulTypedName",
"src": "23118:5:20",
"type": ""
},
{
"name": "pos",
"nativeSrc": "23125:3:20",
"nodeType": "YulTypedName",
"src": "23125:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nativeSrc": "23133:3:20",
"nodeType": "YulTypedName",
"src": "23133:3:20",
"type": ""
}
],
"src": "23029:386:20"
},
{
"body": {
"nativeSrc": "23555:137:20",
"nodeType": "YulBlock",
"src": "23555:137:20",
"statements": [
{
"nativeSrc": "23566:100:20",
"nodeType": "YulAssignment",
"src": "23566:100:20",
"value": {
"arguments": [
{
"name": "value0",
"nativeSrc": "23653:6:20",
"nodeType": "YulIdentifier",
"src": "23653:6:20"
},
{
"name": "pos",
"nativeSrc": "23662:3:20",
"nodeType": "YulIdentifier",
"src": "23662:3:20"
}
],
"functionName": {
"name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
"nativeSrc": "23573:79:20",
"nodeType": "YulIdentifier",
"src": "23573:79:20"
},
"nativeSrc": "23573:93:20",
"nodeType": "YulFunctionCall",
"src": "23573:93:20"
},
"variableNames": [
{
"name": "pos",
"nativeSrc": "23566:3:20",
"nodeType": "YulIdentifier",
"src": "23566:3:20"
}
]
},
{
"nativeSrc": "23676:10:20",
"nodeType": "YulAssignment",
"src": "23676:10:20",
"value": {
"name": "pos",
"nativeSrc": "23683:3:20",
"nodeType": "YulIdentifier",
"src": "23683:3:20"
},
"variableNames": [
{
"name": "end",
"nativeSrc": "23676:3:20",
"nodeType": "YulIdentifier",
"src": "23676:3:20"
}
]
}
]
},
"name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
"nativeSrc": "23421:271:20",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nativeSrc": "23534:3:20",
"nodeType": "YulTypedName",
"src": "23534:3:20",
"type": ""
},
{
"name": "value0",
"nativeSrc": "23540:6:20",
"nodeType": "YulTypedName",
"src": "23540:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nativeSrc": "23551:3:20",
"nodeType": "YulTypedName",
"src": "23551:3:20",
"type": ""
}
],
"src": "23421:271:20"
}
]
},
"contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_bytes4(value) -> cleaned {\n cleaned := and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000)\n }\n\n function validator_revert_t_bytes4(value) {\n if iszero(eq(value, cleanup_t_bytes4(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bytes4(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bytes4(value)\n }\n\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bytes4(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n mstore(pos, cleanup_t_bool(value))\n }\n\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_bool_to_t_bool_fromStack(value0, add(headStart, 0))\n\n }\n\n function array_length_t_string_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function copy_memory_to_memory_with_cleanup(src, dst, length) {\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 mstore(add(dst, length), 0)\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_string_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0, tail)\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function validator_revert_t_bool(value) {\n if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bool(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bool(add(headStart, offset), dataEnd)\n }\n\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n revert(0, 0)\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := round_up_to_mul_of_32(length)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function copy_calldata_to_memory_with_cleanup(src, dst, length) {\n calldatacopy(dst, src, length)\n mstore(add(dst, length), 0)\n }\n\n function abi_decode_available_length_t_bytes_memory_ptr(src, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n mstore(array, length)\n let dst := add(array, 0x20)\n if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n copy_calldata_to_memory_with_cleanup(src, dst, length)\n }\n\n // bytes\n function abi_decode_t_bytes_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_bytes_memory_ptr(add(offset, 0x20), length, end)\n }\n\n function abi_decode_tuple_t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 32))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value1 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_bytes32(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_bytes32_to_t_bytes32_fromStack(value, pos) {\n mstore(pos, cleanup_t_bytes32(value))\n }\n\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_bytes32_to_t_bytes32_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_bool(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3 {\n if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value3 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function panic_error_0x22() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n\n function extract_byte_array_length(data) -> length {\n length := div(data, 2)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) {\n length := and(length, 0x7f)\n }\n\n if eq(outOfPlaceEncoding, lt(length, 32)) {\n panic_error_0x22()\n }\n }\n\n function abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n tail := add(headStart, 96)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_address_to_t_address_fromStack(value2, add(headStart, 64))\n\n }\n\n function store_literal_in_memory_074edb06bc2c283d1123114ebfffa3e3cbf780cc3fcf237b7da0237729f6c25e(memPtr) {\n\n mstore(add(memPtr, 0), \"Minting is not enabled\")\n\n }\n\n function abi_encode_t_stringliteral_074edb06bc2c283d1123114ebfffa3e3cbf780cc3fcf237b7da0237729f6c25e_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 22)\n store_literal_in_memory_074edb06bc2c283d1123114ebfffa3e3cbf780cc3fcf237b7da0237729f6c25e(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_074edb06bc2c283d1123114ebfffa3e3cbf780cc3fcf237b7da0237729f6c25e__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_074edb06bc2c283d1123114ebfffa3e3cbf780cc3fcf237b7da0237729f6c25e_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function cleanup_t_rational_1_by_1(value) -> cleaned {\n cleaned := value\n }\n\n function cleanup_t_uint64(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffff)\n }\n\n function identity(value) -> ret {\n ret := value\n }\n\n function convert_t_rational_1_by_1_to_t_uint64(value) -> converted {\n converted := cleanup_t_uint64(identity(cleanup_t_rational_1_by_1(value)))\n }\n\n function abi_encode_t_rational_1_by_1_to_t_uint64_fromStack(value, pos) {\n mstore(pos, convert_t_rational_1_by_1_to_t_uint64(value))\n }\n\n function abi_encode_tuple_t_rational_1_by_1__to_t_uint64__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_rational_1_by_1_to_t_uint64_fromStack(value0, add(headStart, 0))\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n updated_pos := pos\n }\n\n function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n let length := array_length_t_string_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n end := add(pos, length)\n }\n\n function abi_encode_tuple_packed_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value1, value0) -> end {\n\n pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value1, pos)\n\n end := pos\n }\n\n function validator_revert_t_bytes32(value) {\n if iszero(eq(value, cleanup_t_bytes32(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bytes32_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_bytes32(value)\n }\n\n function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bytes32_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\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 tail := add(headStart, 128)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_address_to_t_address_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value2, add(headStart, 64))\n\n mstore(add(headStart, 96), sub(tail, headStart))\n tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value3, tail)\n\n }\n\n function abi_decode_t_bytes4_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_bytes4(value)\n }\n\n function abi_decode_tuple_t_bytes4_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bytes4_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function panic_error_0x12() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n }\n\n function array_dataslot_t_string_storage(ptr) -> data {\n data := ptr\n\n mstore(0, ptr)\n data := keccak256(0, 0x20)\n\n }\n\n function divide_by_32_ceil(value) -> result {\n result := div(add(value, 31), 32)\n }\n\n function shift_left_dynamic(bits, value) -> newValue {\n newValue :=\n\n shl(bits, value)\n\n }\n\n function update_byte_slice_dynamic32(value, shiftBytes, toInsert) -> result {\n let shiftBits := mul(shiftBytes, 8)\n let mask := shift_left_dynamic(shiftBits, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n toInsert := shift_left_dynamic(shiftBits, toInsert)\n value := and(value, not(mask))\n result := or(value, and(toInsert, mask))\n }\n\n function convert_t_uint256_to_t_uint256(value) -> converted {\n converted := cleanup_t_uint256(identity(cleanup_t_uint256(value)))\n }\n\n function prepare_store_t_uint256(value) -> ret {\n ret := value\n }\n\n function update_storage_value_t_uint256_to_t_uint256(slot, offset, value_0) {\n let convertedValue_0 := convert_t_uint256_to_t_uint256(value_0)\n sstore(slot, update_byte_slice_dynamic32(sload(slot), offset, prepare_store_t_uint256(convertedValue_0)))\n }\n\n function zero_value_for_split_t_uint256() -> ret {\n ret := 0\n }\n\n function storage_set_to_zero_t_uint256(slot, offset) {\n let zero_0 := zero_value_for_split_t_uint256()\n update_storage_value_t_uint256_to_t_uint256(slot, offset, zero_0)\n }\n\n function clear_storage_range_t_bytes1(start, end) {\n for {} lt(start, end) { start := add(start, 1) }\n {\n storage_set_to_zero_t_uint256(start, 0)\n }\n }\n\n function clean_up_bytearray_end_slots_t_string_storage(array, len, startIndex) {\n\n if gt(len, 31) {\n let dataArea := array_dataslot_t_string_storage(array)\n let deleteStart := add(dataArea, divide_by_32_ceil(startIndex))\n // If we are clearing array to be short byte array, we want to clear only data starting from array data area.\n if lt(startIndex, 32) { deleteStart := dataArea }\n clear_storage_range_t_bytes1(deleteStart, add(dataArea, divide_by_32_ceil(len)))\n }\n\n }\n\n function shift_right_unsigned_dynamic(bits, value) -> newValue {\n newValue :=\n\n shr(bits, value)\n\n }\n\n function mask_bytes_dynamic(data, bytes) -> result {\n let mask := not(shift_right_unsigned_dynamic(mul(8, bytes), not(0)))\n result := and(data, mask)\n }\n function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used {\n // we want to save only elements that are part of the array after resizing\n // others should be set to zero\n data := mask_bytes_dynamic(data, len)\n used := or(data, mul(2, len))\n }\n function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src) {\n\n let newLen := array_length_t_string_memory_ptr(src)\n // Make sure array length is sane\n if gt(newLen, 0xffffffffffffffff) { panic_error_0x41() }\n\n let oldLen := extract_byte_array_length(sload(slot))\n\n // potentially truncate data\n clean_up_bytearray_end_slots_t_string_storage(slot, oldLen, newLen)\n\n let srcOffset := 0\n\n srcOffset := 0x20\n\n switch gt(newLen, 31)\n case 1 {\n let loopEnd := and(newLen, not(0x1f))\n\n let dstPtr := array_dataslot_t_string_storage(slot)\n let i := 0\n for { } lt(i, loopEnd) { i := add(i, 0x20) } {\n sstore(dstPtr, mload(add(src, srcOffset)))\n dstPtr := add(dstPtr, 1)\n srcOffset := add(srcOffset, 32)\n }\n if lt(loopEnd, newLen) {\n let lastValue := mload(add(src, srcOffset))\n sstore(dstPtr, mask_bytes_dynamic(lastValue, and(newLen, 0x1f)))\n }\n sstore(slot, add(mul(newLen, 2), 1))\n }\n default {\n let value := 0\n if newLen {\n value := mload(add(src, srcOffset))\n }\n sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n }\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n updated_pos := pos\n }\n\n function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n end := add(pos, length)\n }\n\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n end := pos\n }\n\n}\n",
"id": 20,
"language": "Yul",
"name": "#utility.yul"
}
],
"immutableReferences": {
"468": [
{
"length": 32,
"start": 4984
},
{
"length": 32,
"start": 5069
},
{
"length": 32,
"start": 5511
}
]
},
"linkReferences": {},
"object": "60806040526004361061014a575f3560e01c806370a08231116100b5578063ad3cb1cc1161006e578063ad3cb1cc1461045c578063b88d4fde14610486578063c4d66de8146104ae578063c87b56dd146104d6578063e985e9c514610512578063f2fde38b1461054e5761014a565b806370a0823114610366578063715018a6146103a25780638da5cb5b146103b857806395d89b41146103e2578063a14481941461040c578063a22cb465146104345761014a565b806342842e0e1161010757806342842e0e146102685780634af104b4146102905780634bf365df146102ba5780634f1ef286146102e457806352d1902d146103005780636352211e1461032a5761014a565b806301ffc9a71461014e57806306fdde031461018a578063081812fc146101b4578063095ea7b3146101f057806323b872dd14610218578063285d70d414610240575b5f80fd5b348015610159575f80fd5b50610174600480360381019061016f9190612622565b610576565b6040516101819190612667565b60405180910390f35b348015610195575f80fd5b5061019e610657565b6040516101ab919061270a565b60405180910390f35b3480156101bf575f80fd5b506101da60048036038101906101d5919061275d565b6106f4565b6040516101e791906127c7565b60405180910390f35b3480156101fb575f80fd5b506102166004803603810190610211919061280a565b61070f565b005b348015610223575f80fd5b5061023e60048036038101906102399190612848565b610725565b005b34801561024b575f80fd5b50610266600480360381019061026191906128c2565b610824565b005b348015610273575f80fd5b5061028e60048036038101906102899190612848565b610847565b005b34801561029b575f80fd5b506102a4610866565b6040516102b191906127c7565b60405180910390f35b3480156102c5575f80fd5b506102ce61088b565b6040516102db9190612667565b60405180910390f35b6102fe60048036038101906102f99190612a19565b61089b565b005b34801561030b575f80fd5b506103146108ba565b6040516103219190612a8b565b60405180910390f35b348015610335575f80fd5b50610350600480360381019061034b919061275d565b6108eb565b60405161035d91906127c7565b60405180910390f35b348015610371575f80fd5b5061038c60048036038101906103879190612aa4565b6108fc565b6040516103999190612ade565b60405180910390f35b3480156103ad575f80fd5b506103b66109c0565b005b3480156103c3575f80fd5b506103cc6109d3565b6040516103d991906127c7565b60405180910390f35b3480156103ed575f80fd5b506103f6610a08565b604051610403919061270a565b60405180910390f35b348015610417575f80fd5b50610432600480360381019061042d919061280a565b610aa6565b005b34801561043f575f80fd5b5061045a60048036038101906104559190612af7565b610b00565b005b348015610467575f80fd5b50610470610b16565b60405161047d919061270a565b60405180910390f35b348015610491575f80fd5b506104ac60048036038101906104a79190612b35565b610b4f565b005b3480156104b9575f80fd5b506104d460048036038101906104cf9190612aa4565b610b6c565b005b3480156104e1575f80fd5b506104fc60048036038101906104f7919061275d565b610dd6565b604051610509919061270a565b60405180910390f35b34801561051d575f80fd5b5061053860048036038101906105339190612bb5565b610e3c565b6040516105459190612667565b60405180910390f35b348015610559575f80fd5b50610574600480360381019061056f9190612aa4565b610ed8565b005b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610650575061064f82610f5c565b5b9050919050565b60605f610662610fc5565b9050805f01805461067290612c20565b80601f016020809104026020016040519081016040528092919081815260200182805461069e90612c20565b80156106e95780601f106106c0576101008083540402835291602001916106e9565b820191905f5260205f20905b8154815290600101906020018083116106cc57829003601f168201915b505050505091505090565b5f6106fe82610fec565b5061070882611072565b9050919050565b610721828261071c6110b9565b6110c0565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610795575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161078c91906127c7565b60405180910390fd5b5f6107a883836107a36110b9565b6110d2565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461081e578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161081593929190612c50565b60405180910390fd5b50505050565b61082c6112ef565b805f806101000a81548160ff02191690831515021790555050565b61086183838360405180602001604052805f815250610b4f565b505050565b5f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8054906101000a900460ff1681565b6108a3611376565b6108ac8261145c565b6108b68282611467565b5050565b5f6108c3611585565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b5f6108f582610fec565b9050919050565b5f80610906610fc5565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610978575f6040517f89c62b6400000000000000000000000000000000000000000000000000000000815260040161096f91906127c7565b60405180910390fd5b806003015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054915050919050565b6109c86112ef565b6109d15f61160c565b565b5f806109dd6116dd565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b60605f610a13610fc5565b9050806001018054610a2490612c20565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5090612c20565b8015610a9b5780601f10610a7257610100808354040283529160200191610a9b565b820191905f5260205f20905b815481529060010190602001808311610a7e57829003601f168201915b505050505091505090565b5f8054906101000a900460ff16610af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae990612ccf565b60405180910390fd5b610afc8282611704565b5050565b610b12610b0b6110b9565b8383611721565b5050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b610b5a848484610725565b610b6684848484611898565b50505050565b5f610b75611a4a565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f808267ffffffffffffffff16148015610bbd5750825b90505f60018367ffffffffffffffff16148015610bf057505f3073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015610bfe575080155b15610c35576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315610c82576001855f0160086101000a81548160ff0219169083151502179055505b610cf66040518060400160405280600781526020017f4d79546f6b656e000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d544b0000000000000000000000000000000000000000000000000000000000815250611a71565b610cff86611a87565b610d07611a9b565b60015f806101000a81548160ff0219169083151502179055507310964bf243f3318bfbaa87060cdd5a7fe7a546015f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508315610dce575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26001604051610dc59190612d42565b60405180910390a15b505050505050565b6060610de182610fec565b505f610deb611aa5565b90505f815111610e095760405180602001604052805f815250610e34565b80610e1384611abb565b604051602001610e24929190612d95565b6040516020818303038152906040525b915050919050565b5f80610e46610fc5565b9050806005015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1691505092915050565b610ee06112ef565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f50575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610f4791906127c7565b60405180910390fd5b610f598161160c565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300905090565b5f80610ff783611b85565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361106957826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016110609190612ade565b60405180910390fd5b80915050919050565b5f8061107c610fc5565b9050806004015f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b5f33905090565b6110cd8383836001611bcc565b505050565b5f806110dc610fc5565b90505f6110e885611b85565b90505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461112957611128818587611d99565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111b6576111685f865f80611bcc565b6001826003015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614611237576001826003015f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b85826002015f8781526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480925050509392505050565b6112f76110b9565b73ffffffffffffffffffffffffffffffffffffffff166113156109d3565b73ffffffffffffffffffffffffffffffffffffffff1614611374576113386110b9565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161136b91906127c7565b60405180910390fd5b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148061142357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661140a611e5c565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561145a576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6114646112ef565b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156114cf57506040513d601f19601f820116820180604052508101906114cc9190612de2565b60015b61151057816040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161150791906127c7565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b811461157657806040517faa1d49a400000000000000000000000000000000000000000000000000000000815260040161156d9190612a8b565b60405180910390fd5b6115808383611eaf565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461160a576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f6116156116dd565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b5f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b61171d828260405180602001604052805f815250611f21565b5050565b5f61172a610fc5565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361179c57826040517f5b08ba1800000000000000000000000000000000000000000000000000000000815260040161179391906127c7565b60405180910390fd5b81816005015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318460405161188a9190612667565b60405180910390a350505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115611a44578273ffffffffffffffffffffffffffffffffffffffff1663150b7a026118db6110b9565b8685856040518563ffffffff1660e01b81526004016118fd9493929190612e5f565b6020604051808303815f875af192505050801561193857506040513d601f19601f820116820180604052508101906119359190612ebd565b60015b6119b9573d805f8114611966576040519150601f19603f3d011682016040523d82523d5f602084013e61196b565b606091505b505f8151036119b157836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016119a891906127c7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611a4257836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611a3991906127c7565b60405180910390fd5b505b50505050565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b611a79611f3c565b611a838282611f7c565b5050565b611a8f611f3c565b611a9881611fb7565b50565b611aa3611f3c565b565b606060405180602001604052805f815250905090565b60605f6001611ac98461203b565b0190505f8167ffffffffffffffff811115611ae757611ae66128f5565b5b6040519080825280601f01601f191660200182016040528015611b195781602001600182028036833780820191505090505b5090505f82602001820190505b600115611b7a578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611b6f57611b6e612ee8565b5b0494505f8503611b26575b819350505050919050565b5f80611b8f610fc5565b9050806002015f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b5f611bd5610fc5565b90508180611c0f57505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611d41575f611c1e85610fec565b90505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611c8857508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611c9b5750611c998185610e3c565b155b15611cdd57836040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611cd491906127c7565b60405180910390fd5b8215611d3f57848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b84816004015f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b611da483838361218c565b611e57575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e1857806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611e0f9190612ade565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611e4e929190612f15565b60405180910390fd5b505050565b5f611e887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b61224c565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611eb882612255565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f81511115611f1457611f0e828261231e565b50611f1d565b611f1c61239e565b5b5050565b611f2b83836123da565b611f375f848484611898565b505050565b611f446124cd565b611f7a576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611f84611f3c565b5f611f8d610fc5565b905082815f019081611f9f91906130d0565b5081816001019081611fb191906130d0565b50505050565b611fbf611f3c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361202f575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161202691906127c7565b60405180910390fd5b6120388161160c565b50565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612097577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161208d5761208c612ee8565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106120d4576d04ee2d6d415b85acef810000000083816120ca576120c9612ee8565b5b0492506020810190505b662386f26fc10000831061210357662386f26fc1000083816120f9576120f8612ee8565b5b0492506010810190505b6305f5e100831061212c576305f5e100838161212257612121612ee8565b5b0492506008810190505b612710831061215157612710838161214757612146612ee8565b5b0492506004810190505b60648310612174576064838161216a57612169612ee8565b5b0492506002810190505b600a8310612183576001810190505b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561224357508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061220457506122038484610e3c565b5b8061224257508273ffffffffffffffffffffffffffffffffffffffff1661222a83611072565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b036122b057806040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016122a791906127c7565b60405180910390fd5b806122dc7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b61224c565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff168460405161234791906131d9565b5f60405180830381855af49150503d805f811461237f576040519150601f19603f3d011682016040523d82523d5f602084013e612384565b606091505b50915091506123948583836124eb565b9250505092915050565b5f3411156123d8576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361244a575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161244191906127c7565b60405180910390fd5b5f61245683835f6110d2565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146124c8575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016124bf91906127c7565b60405180910390fd5b505050565b5f6124d6611a4a565b5f0160089054906101000a900460ff16905090565b606082612500576124fb82612578565b612570565b5f825114801561252657505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561256857836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161255f91906127c7565b60405180910390fd5b819050612571565b5b9392505050565b5f8151111561258a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612601816125cd565b811461260b575f80fd5b50565b5f8135905061261c816125f8565b92915050565b5f60208284031215612637576126366125c5565b5b5f6126448482850161260e565b91505092915050565b5f8115159050919050565b6126618161264d565b82525050565b5f60208201905061267a5f830184612658565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156126b757808201518184015260208101905061269c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6126dc82612680565b6126e6818561268a565b93506126f681856020860161269a565b6126ff816126c2565b840191505092915050565b5f6020820190508181035f83015261272281846126d2565b905092915050565b5f819050919050565b61273c8161272a565b8114612746575f80fd5b50565b5f8135905061275781612733565b92915050565b5f60208284031215612772576127716125c5565b5b5f61277f84828501612749565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6127b182612788565b9050919050565b6127c1816127a7565b82525050565b5f6020820190506127da5f8301846127b8565b92915050565b6127e9816127a7565b81146127f3575f80fd5b50565b5f81359050612804816127e0565b92915050565b5f80604083850312156128205761281f6125c5565b5b5f61282d858286016127f6565b925050602061283e85828601612749565b9150509250929050565b5f805f6060848603121561285f5761285e6125c5565b5b5f61286c868287016127f6565b935050602061287d868287016127f6565b925050604061288e86828701612749565b9150509250925092565b6128a18161264d565b81146128ab575f80fd5b50565b5f813590506128bc81612898565b92915050565b5f602082840312156128d7576128d66125c5565b5b5f6128e4848285016128ae565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61292b826126c2565b810181811067ffffffffffffffff8211171561294a576129496128f5565b5b80604052505050565b5f61295c6125bc565b90506129688282612922565b919050565b5f67ffffffffffffffff821115612987576129866128f5565b5b612990826126c2565b9050602081019050919050565b828183375f83830152505050565b5f6129bd6129b88461296d565b612953565b9050828152602081018484840111156129d9576129d86128f1565b5b6129e484828561299d565b509392505050565b5f82601f830112612a00576129ff6128ed565b5b8135612a108482602086016129ab565b91505092915050565b5f8060408385031215612a2f57612a2e6125c5565b5b5f612a3c858286016127f6565b925050602083013567ffffffffffffffff811115612a5d57612a5c6125c9565b5b612a69858286016129ec565b9150509250929050565b5f819050919050565b612a8581612a73565b82525050565b5f602082019050612a9e5f830184612a7c565b92915050565b5f60208284031215612ab957612ab86125c5565b5b5f612ac6848285016127f6565b91505092915050565b612ad88161272a565b82525050565b5f602082019050612af15f830184612acf565b92915050565b5f8060408385031215612b0d57612b0c6125c5565b5b5f612b1a858286016127f6565b9250506020612b2b858286016128ae565b9150509250929050565b5f805f8060808587031215612b4d57612b4c6125c5565b5b5f612b5a878288016127f6565b9450506020612b6b878288016127f6565b9350506040612b7c87828801612749565b925050606085013567ffffffffffffffff811115612b9d57612b9c6125c9565b5b612ba9878288016129ec565b91505092959194509250565b5f8060408385031215612bcb57612bca6125c5565b5b5f612bd8858286016127f6565b9250506020612be9858286016127f6565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612c3757607f821691505b602082108103612c4a57612c49612bf3565b5b50919050565b5f606082019050612c635f8301866127b8565b612c706020830185612acf565b612c7d60408301846127b8565b949350505050565b7f4d696e74696e67206973206e6f7420656e61626c6564000000000000000000005f82015250565b5f612cb960168361268a565b9150612cc482612c85565b602082019050919050565b5f6020820190508181035f830152612ce681612cad565b9050919050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f612d2c612d27612d2284612ced565b612d09565b612cf6565b9050919050565b612d3c81612d12565b82525050565b5f602082019050612d555f830184612d33565b92915050565b5f81905092915050565b5f612d6f82612680565b612d798185612d5b565b9350612d8981856020860161269a565b80840191505092915050565b5f612da08285612d65565b9150612dac8284612d65565b91508190509392505050565b612dc181612a73565b8114612dcb575f80fd5b50565b5f81519050612ddc81612db8565b92915050565b5f60208284031215612df757612df66125c5565b5b5f612e0484828501612dce565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f612e3182612e0d565b612e3b8185612e17565b9350612e4b81856020860161269a565b612e54816126c2565b840191505092915050565b5f608082019050612e725f8301876127b8565b612e7f60208301866127b8565b612e8c6040830185612acf565b8181036060830152612e9e8184612e27565b905095945050505050565b5f81519050612eb7816125f8565b92915050565b5f60208284031215612ed257612ed16125c5565b5b5f612edf84828501612ea9565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f604082019050612f285f8301856127b8565b612f356020830184612acf565b9392505050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612f987fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612f5d565b612fa28683612f5d565b95508019841693508086168417925050509392505050565b5f612fd4612fcf612fca8461272a565b612d09565b61272a565b9050919050565b5f819050919050565b612fed83612fba565b613001612ff982612fdb565b848454612f69565b825550505050565b5f90565b613015613009565b613020818484612fe4565b505050565b5b81811015613043576130385f8261300d565b600181019050613026565b5050565b601f8211156130885761305981612f3c565b61306284612f4e565b81016020851015613071578190505b61308561307d85612f4e565b830182613025565b50505b505050565b5f82821c905092915050565b5f6130a85f198460080261308d565b1980831691505092915050565b5f6130c08383613099565b9150826002028217905092915050565b6130d982612680565b67ffffffffffffffff8111156130f2576130f16128f5565b5b6130fc8254612c20565b613107828285613047565b5f60209050601f831160018114613138575f8415613126578287015190505b61313085826130b5565b865550613197565b601f19841661314686612f3c565b5f5b8281101561316d57848901518255600182019150602085019450602081019050613148565b8683101561318a5784890151613186601f891682613099565b8355505b6001600288020188555050505b505050505050565b5f81905092915050565b5f6131b382612e0d565b6131bd818561319f565b93506131cd81856020860161269a565b80840191505092915050565b5f6131e482846131a9565b91508190509291505056fea2646970667358221220e8f5ce65d6667c13c0daef95afbf62e8e580731154835816a64fea207cf2053864736f6c63430008160033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x14A JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xB5 JUMPI DUP1 PUSH4 0xAD3CB1CC GT PUSH2 0x6E JUMPI DUP1 PUSH4 0xAD3CB1CC EQ PUSH2 0x45C JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x486 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x4AE JUMPI DUP1 PUSH4 0xC87B56DD EQ PUSH2 0x4D6 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x512 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x54E JUMPI PUSH2 0x14A JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x3A2 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x3B8 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x3E2 JUMPI DUP1 PUSH4 0xA1448194 EQ PUSH2 0x40C JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x434 JUMPI PUSH2 0x14A JUMP JUMPDEST DUP1 PUSH4 0x42842E0E GT PUSH2 0x107 JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0x4AF104B4 EQ PUSH2 0x290 JUMPI DUP1 PUSH4 0x4BF365DF EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x2E4 JUMPI DUP1 PUSH4 0x52D1902D EQ PUSH2 0x300 JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x32A JUMPI PUSH2 0x14A JUMP JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x14E JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x1B4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1F0 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x218 JUMPI DUP1 PUSH4 0x285D70D4 EQ PUSH2 0x240 JUMPI JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x159 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x174 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x16F SWAP2 SWAP1 PUSH2 0x2622 JUMP JUMPDEST PUSH2 0x576 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x181 SWAP2 SWAP1 PUSH2 0x2667 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x195 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH2 0x657 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1AB SWAP2 SWAP1 PUSH2 0x270A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BF JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DA PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1D5 SWAP2 SWAP1 PUSH2 0x275D JUMP JUMPDEST PUSH2 0x6F4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E7 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FB JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x216 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x211 SWAP2 SWAP1 PUSH2 0x280A JUMP JUMPDEST PUSH2 0x70F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x223 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x23E PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x239 SWAP2 SWAP1 PUSH2 0x2848 JUMP JUMPDEST PUSH2 0x725 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24B JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x266 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x261 SWAP2 SWAP1 PUSH2 0x28C2 JUMP JUMPDEST PUSH2 0x824 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x273 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x289 SWAP2 SWAP1 PUSH2 0x2848 JUMP JUMPDEST PUSH2 0x847 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x29B JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A4 PUSH2 0x866 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2B1 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C5 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x2CE PUSH2 0x88B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2DB SWAP2 SWAP1 PUSH2 0x2667 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2FE PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2F9 SWAP2 SWAP1 PUSH2 0x2A19 JUMP JUMPDEST PUSH2 0x89B JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x30B JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x314 PUSH2 0x8BA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x321 SWAP2 SWAP1 PUSH2 0x2A8B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x335 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x350 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x34B SWAP2 SWAP1 PUSH2 0x275D JUMP JUMPDEST PUSH2 0x8EB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x35D SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x371 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x38C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x387 SWAP2 SWAP1 PUSH2 0x2AA4 JUMP JUMPDEST PUSH2 0x8FC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x399 SWAP2 SWAP1 PUSH2 0x2ADE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3AD JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x3B6 PUSH2 0x9C0 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C3 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CC PUSH2 0x9D3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3D9 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3ED JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F6 PUSH2 0xA08 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x403 SWAP2 SWAP1 PUSH2 0x270A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x417 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x432 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x42D SWAP2 SWAP1 PUSH2 0x280A JUMP JUMPDEST PUSH2 0xAA6 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x43F JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x45A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2AF7 JUMP JUMPDEST PUSH2 0xB00 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x467 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x470 PUSH2 0xB16 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x47D SWAP2 SWAP1 PUSH2 0x270A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x491 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x4AC PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4A7 SWAP2 SWAP1 PUSH2 0x2B35 JUMP JUMPDEST PUSH2 0xB4F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4B9 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x4D4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4CF SWAP2 SWAP1 PUSH2 0x2AA4 JUMP JUMPDEST PUSH2 0xB6C JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E1 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x4FC PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4F7 SWAP2 SWAP1 PUSH2 0x275D JUMP JUMPDEST PUSH2 0xDD6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x509 SWAP2 SWAP1 PUSH2 0x270A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51D JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x538 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x533 SWAP2 SWAP1 PUSH2 0x2BB5 JUMP JUMPDEST PUSH2 0xE3C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x545 SWAP2 SWAP1 PUSH2 0x2667 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x559 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH2 0x574 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x56F SWAP2 SWAP1 PUSH2 0x2AA4 JUMP JUMPDEST PUSH2 0xED8 JUMP JUMPDEST STOP JUMPDEST PUSH0 PUSH32 0x80AC58CD00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0x640 JUMPI POP PUSH32 0x5B5E139F00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST DUP1 PUSH2 0x650 JUMPI POP PUSH2 0x64F DUP3 PUSH2 0xF5C JUMP JUMPDEST JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH0 PUSH2 0x662 PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH0 ADD DUP1 SLOAD PUSH2 0x672 SWAP1 PUSH2 0x2C20 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 0x69E SWAP1 PUSH2 0x2C20 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x6E9 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x6C0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6E9 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x6CC JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH0 PUSH2 0x6FE DUP3 PUSH2 0xFEC JUMP JUMPDEST POP PUSH2 0x708 DUP3 PUSH2 0x1072 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x721 DUP3 DUP3 PUSH2 0x71C PUSH2 0x10B9 JUMP JUMPDEST PUSH2 0x10C0 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0x795 JUMPI PUSH0 PUSH1 0x40 MLOAD PUSH32 0x64A0AE9200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x78C SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 PUSH2 0x7A8 DUP4 DUP4 PUSH2 0x7A3 PUSH2 0x10B9 JUMP JUMPDEST PUSH2 0x10D2 JUMP JUMPDEST SWAP1 POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x81E JUMPI DUP4 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH32 0x64283D7B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x815 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2C50 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x82C PUSH2 0x12EF JUMP JUMPDEST DUP1 PUSH0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH2 0x861 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH0 DUP2 MSTORE POP PUSH2 0xB4F JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH0 PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x8A3 PUSH2 0x1376 JUMP JUMPDEST PUSH2 0x8AC DUP3 PUSH2 0x145C JUMP JUMPDEST PUSH2 0x8B6 DUP3 DUP3 PUSH2 0x1467 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH0 PUSH2 0x8C3 PUSH2 0x1585 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH0 SHL SWAP1 POP SWAP1 JUMP JUMPDEST PUSH0 PUSH2 0x8F5 DUP3 PUSH2 0xFEC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x906 PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0x978 JUMPI PUSH0 PUSH1 0x40 MLOAD PUSH32 0x89C62B6400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x96F SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x3 ADD PUSH0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 SLOAD SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x9C8 PUSH2 0x12EF JUMP JUMPDEST PUSH2 0x9D1 PUSH0 PUSH2 0x160C JUMP JUMPDEST JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x9DD PUSH2 0x16DD JUMP JUMPDEST SWAP1 POP DUP1 PUSH0 ADD PUSH0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH0 PUSH2 0xA13 PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 ADD DUP1 SLOAD PUSH2 0xA24 SWAP1 PUSH2 0x2C20 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 0xA50 SWAP1 PUSH2 0x2C20 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xA9B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xA72 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xA9B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA7E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH2 0xAF2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAE9 SWAP1 PUSH2 0x2CCF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xAFC DUP3 DUP3 PUSH2 0x1704 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xB12 PUSH2 0xB0B PUSH2 0x10B9 JUMP JUMPDEST DUP4 DUP4 PUSH2 0x1721 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x352E302E30000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0xB5A DUP5 DUP5 DUP5 PUSH2 0x725 JUMP JUMPDEST PUSH2 0xB66 DUP5 DUP5 DUP5 DUP5 PUSH2 0x1898 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH0 PUSH2 0xB75 PUSH2 0x1A4A JUMP JUMPDEST SWAP1 POP PUSH0 DUP2 PUSH0 ADD PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO SWAP1 POP PUSH0 DUP3 PUSH0 ADD PUSH0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP1 POP PUSH0 DUP1 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF AND EQ DUP1 ISZERO PUSH2 0xBBD JUMPI POP DUP3 JUMPDEST SWAP1 POP PUSH0 PUSH1 0x1 DUP4 PUSH8 0xFFFFFFFFFFFFFFFF AND EQ DUP1 ISZERO PUSH2 0xBF0 JUMPI POP PUSH0 ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE EQ JUMPDEST SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0xBFE JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0xC35 JUMPI PUSH1 0x40 MLOAD PUSH32 0xF92EE8A900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP6 PUSH0 ADD PUSH0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH8 0xFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH8 0xFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP4 ISZERO PUSH2 0xC82 JUMPI PUSH1 0x1 DUP6 PUSH0 ADD PUSH1 0x8 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP JUMPDEST PUSH2 0xCF6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x7 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4D79546F6B656E00000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4D544B0000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH2 0x1A71 JUMP JUMPDEST PUSH2 0xCFF DUP7 PUSH2 0x1A87 JUMP JUMPDEST PUSH2 0xD07 PUSH2 0x1A9B JUMP JUMPDEST PUSH1 0x1 PUSH0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH20 0x10964BF243F3318BFBAA87060CDD5A7FE7A54601 PUSH0 PUSH1 0x1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP4 ISZERO PUSH2 0xDCE JUMPI PUSH0 DUP6 PUSH0 ADD PUSH1 0x8 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 PUSH1 0x1 PUSH1 0x40 MLOAD PUSH2 0xDC5 SWAP2 SWAP1 PUSH2 0x2D42 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xDE1 DUP3 PUSH2 0xFEC JUMP JUMPDEST POP PUSH0 PUSH2 0xDEB PUSH2 0x1AA5 JUMP JUMPDEST SWAP1 POP PUSH0 DUP2 MLOAD GT PUSH2 0xE09 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH0 DUP2 MSTORE POP PUSH2 0xE34 JUMP JUMPDEST DUP1 PUSH2 0xE13 DUP5 PUSH2 0x1ABB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xE24 SWAP3 SWAP2 SWAP1 PUSH2 0x2D95 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE JUMPDEST SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xE46 PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x5 ADD PUSH0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xEE0 PUSH2 0x12EF JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0xF50 JUMPI PUSH0 PUSH1 0x40 MLOAD PUSH32 0x1E4FBDF700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF47 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF59 DUP2 PUSH2 0x160C JUMP JUMPDEST POP JUMP JUMPDEST PUSH0 PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH32 0x80BB2B638CC20BC4D0A60D66940F3AB4A00C1D7B313497CA82FB0B4AB0079300 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xFF7 DUP4 PUSH2 0x1B85 JUMP JUMPDEST SWAP1 POP PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0x1069 JUMPI DUP3 PUSH1 0x40 MLOAD PUSH32 0x7E27328900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1060 SWAP2 SWAP1 PUSH2 0x2ADE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x107C PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x4 ADD PUSH0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 CALLER SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x10CD DUP4 DUP4 DUP4 PUSH1 0x1 PUSH2 0x1BCC JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x10DC PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP PUSH0 PUSH2 0x10E8 DUP6 PUSH2 0x1B85 JUMP JUMPDEST SWAP1 POP PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1129 JUMPI PUSH2 0x1128 DUP2 DUP6 DUP8 PUSH2 0x1D99 JUMP JUMPDEST JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x11B6 JUMPI PUSH2 0x1168 PUSH0 DUP7 PUSH0 DUP1 PUSH2 0x1BCC JUMP JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x3 ADD PUSH0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 DUP3 DUP3 SLOAD SUB SWAP3 POP POP DUP2 SWAP1 SSTORE POP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1237 JUMPI PUSH1 0x1 DUP3 PUSH1 0x3 ADD PUSH0 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 DUP3 DUP3 SLOAD ADD SWAP3 POP POP DUP2 SWAP1 SSTORE POP JUMPDEST DUP6 DUP3 PUSH1 0x2 ADD PUSH0 DUP8 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP5 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 DUP1 SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x12F7 PUSH2 0x10B9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1315 PUSH2 0x9D3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1374 JUMPI PUSH2 0x1338 PUSH2 0x10B9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x136B SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x1423 JUMPI POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x140A PUSH2 0x1E5C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST ISZERO PUSH2 0x145A JUMPI PUSH1 0x40 MLOAD PUSH32 0xE07C8DBA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH2 0x1464 PUSH2 0x12EF JUMP JUMPDEST POP JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x52D1902D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x14CF JUMPI POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14CC SWAP2 SWAP1 PUSH2 0x2DE2 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x1510 JUMPI DUP2 PUSH1 0x40 MLOAD PUSH32 0x4C9C8CE300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1507 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH0 SHL DUP2 EQ PUSH2 0x1576 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH32 0xAA1D49A400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156D SWAP2 SWAP1 PUSH2 0x2A8B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1580 DUP4 DUP4 PUSH2 0x1EAF JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x160A JUMPI PUSH1 0x40 MLOAD PUSH32 0xE07C8DBA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH0 PUSH2 0x1615 PUSH2 0x16DD JUMP JUMPDEST SWAP1 POP PUSH0 DUP2 PUSH0 ADD PUSH0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP3 DUP3 PUSH0 ADD PUSH0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH0 PUSH32 0x9016D09D72D40FDAE2FD8CEAC6B6234C7706214FD39C1CD1E609A0528C199300 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x171D DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH0 DUP2 MSTORE POP PUSH2 0x1F21 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH0 PUSH2 0x172A PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0x179C JUMPI DUP3 PUSH1 0x40 MLOAD PUSH32 0x5B08BA1800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1793 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 DUP2 PUSH1 0x5 ADD PUSH0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 DUP5 PUSH1 0x40 MLOAD PUSH2 0x188A SWAP2 SWAP1 PUSH2 0x2667 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE GT ISZERO PUSH2 0x1A44 JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x150B7A02 PUSH2 0x18DB PUSH2 0x10B9 JUMP JUMPDEST DUP7 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x18FD SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2E5F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1938 JUMPI POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1935 SWAP2 SWAP1 PUSH2 0x2EBD JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x19B9 JUMPI RETURNDATASIZE DUP1 PUSH0 DUP2 EQ PUSH2 0x1966 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x196B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP PUSH0 DUP2 MLOAD SUB PUSH2 0x19B1 JUMPI DUP4 PUSH1 0x40 MLOAD PUSH32 0x64A0AE9200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19A8 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP2 PUSH1 0x20 ADD REVERT JUMPDEST PUSH4 0x150B7A02 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0x1A42 JUMPI DUP4 PUSH1 0x40 MLOAD PUSH32 0x64A0AE9200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A39 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH0 PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1A79 PUSH2 0x1F3C JUMP JUMPDEST PUSH2 0x1A83 DUP3 DUP3 PUSH2 0x1F7C JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1A8F PUSH2 0x1F3C JUMP JUMPDEST PUSH2 0x1A98 DUP2 PUSH2 0x1FB7 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1AA3 PUSH2 0x1F3C JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH0 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH0 PUSH1 0x1 PUSH2 0x1AC9 DUP5 PUSH2 0x203B JUMP JUMPDEST ADD SWAP1 POP PUSH0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1AE7 JUMPI PUSH2 0x1AE6 PUSH2 0x28F5 JUMP JUMPDEST 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 0x1B19 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x1 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP PUSH0 DUP3 PUSH1 0x20 ADD DUP3 ADD SWAP1 POP JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x1B7A JUMPI DUP1 DUP1 PUSH1 0x1 SWAP1 SUB SWAP2 POP POP PUSH32 0x3031323334353637383961626364656600000000000000000000000000000000 PUSH1 0xA DUP7 MOD BYTE DUP2 MSTORE8 PUSH1 0xA DUP6 DUP2 PUSH2 0x1B6F JUMPI PUSH2 0x1B6E PUSH2 0x2EE8 JUMP JUMPDEST JUMPDEST DIV SWAP5 POP PUSH0 DUP6 SUB PUSH2 0x1B26 JUMPI JUMPDEST DUP2 SWAP4 POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x1B8F PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x2 ADD PUSH0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x1BD5 PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP DUP2 DUP1 PUSH2 0x1C0F JUMPI POP PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST ISZERO PUSH2 0x1D41 JUMPI PUSH0 PUSH2 0x1C1E DUP6 PUSH2 0xFEC JUMP JUMPDEST SWAP1 POP PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x1C88 JUMPI POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1C9B JUMPI POP PUSH2 0x1C99 DUP2 DUP6 PUSH2 0xE3C JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x1CDD JUMPI DUP4 PUSH1 0x40 MLOAD PUSH32 0xA9FBF51F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1CD4 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 ISZERO PUSH2 0x1D3F JUMPI DUP5 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 JUMPDEST POP JUMPDEST DUP5 DUP2 PUSH1 0x4 ADD PUSH0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1DA4 DUP4 DUP4 DUP4 PUSH2 0x218C JUMP JUMPDEST PUSH2 0x1E57 JUMPI PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0x1E18 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH32 0x7E27328900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1E0F SWAP2 SWAP1 PUSH2 0x2ADE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 DUP2 PUSH1 0x40 MLOAD PUSH32 0x177E802F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1E4E SWAP3 SWAP2 SWAP1 PUSH2 0x2F15 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH0 PUSH2 0x1E88 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH0 SHL PUSH2 0x224C JUMP JUMPDEST PUSH0 ADD PUSH0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1EB8 DUP3 PUSH2 0x2255 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH0 DUP2 MLOAD GT ISZERO PUSH2 0x1F14 JUMPI PUSH2 0x1F0E DUP3 DUP3 PUSH2 0x231E JUMP JUMPDEST POP PUSH2 0x1F1D JUMP JUMPDEST PUSH2 0x1F1C PUSH2 0x239E JUMP JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1F2B DUP4 DUP4 PUSH2 0x23DA JUMP JUMPDEST PUSH2 0x1F37 PUSH0 DUP5 DUP5 DUP5 PUSH2 0x1898 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1F44 PUSH2 0x24CD JUMP JUMPDEST PUSH2 0x1F7A JUMPI PUSH1 0x40 MLOAD PUSH32 0xD7E6BCF800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH2 0x1F84 PUSH2 0x1F3C JUMP JUMPDEST PUSH0 PUSH2 0x1F8D PUSH2 0xFC5 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 PUSH0 ADD SWAP1 DUP2 PUSH2 0x1F9F SWAP2 SWAP1 PUSH2 0x30D0 JUMP JUMPDEST POP DUP2 DUP2 PUSH1 0x1 ADD SWAP1 DUP2 PUSH2 0x1FB1 SWAP2 SWAP1 PUSH2 0x30D0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x1FBF PUSH2 0x1F3C JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0x202F JUMPI PUSH0 PUSH1 0x40 MLOAD PUSH32 0x1E4FBDF700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2026 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2038 DUP2 PUSH2 0x160C JUMP JUMPDEST POP JUMP JUMPDEST PUSH0 DUP1 PUSH0 SWAP1 POP PUSH27 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F010000000000000000 DUP4 LT PUSH2 0x2097 JUMPI PUSH27 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F010000000000000000 DUP4 DUP2 PUSH2 0x208D JUMPI PUSH2 0x208C PUSH2 0x2EE8 JUMP JUMPDEST JUMPDEST DIV SWAP3 POP PUSH1 0x40 DUP2 ADD SWAP1 POP JUMPDEST PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 LT PUSH2 0x20D4 JUMPI PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 DUP2 PUSH2 0x20CA JUMPI PUSH2 0x20C9 PUSH2 0x2EE8 JUMP JUMPDEST JUMPDEST DIV SWAP3 POP PUSH1 0x20 DUP2 ADD SWAP1 POP JUMPDEST PUSH7 0x2386F26FC10000 DUP4 LT PUSH2 0x2103 JUMPI PUSH7 0x2386F26FC10000 DUP4 DUP2 PUSH2 0x20F9 JUMPI PUSH2 0x20F8 PUSH2 0x2EE8 JUMP JUMPDEST JUMPDEST DIV SWAP3 POP PUSH1 0x10 DUP2 ADD SWAP1 POP JUMPDEST PUSH4 0x5F5E100 DUP4 LT PUSH2 0x212C JUMPI PUSH4 0x5F5E100 DUP4 DUP2 PUSH2 0x2122 JUMPI PUSH2 0x2121 PUSH2 0x2EE8 JUMP JUMPDEST JUMPDEST DIV SWAP3 POP PUSH1 0x8 DUP2 ADD SWAP1 POP JUMPDEST PUSH2 0x2710 DUP4 LT PUSH2 0x2151 JUMPI PUSH2 0x2710 DUP4 DUP2 PUSH2 0x2147 JUMPI PUSH2 0x2146 PUSH2 0x2EE8 JUMP JUMPDEST JUMPDEST DIV SWAP3 POP PUSH1 0x4 DUP2 ADD SWAP1 POP JUMPDEST PUSH1 0x64 DUP4 LT PUSH2 0x2174 JUMPI PUSH1 0x64 DUP4 DUP2 PUSH2 0x216A JUMPI PUSH2 0x2169 PUSH2 0x2EE8 JUMP JUMPDEST JUMPDEST DIV SWAP3 POP PUSH1 0x2 DUP2 ADD SWAP1 POP JUMPDEST PUSH1 0xA DUP4 LT PUSH2 0x2183 JUMPI PUSH1 0x1 DUP2 ADD SWAP1 POP JUMPDEST DUP1 SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2243 JUMPI POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x2204 JUMPI POP PUSH2 0x2203 DUP5 DUP5 PUSH2 0xE3C JUMP JUMPDEST JUMPDEST DUP1 PUSH2 0x2242 JUMPI POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x222A DUP4 PUSH2 0x1072 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE SUB PUSH2 0x22B0 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH32 0x4C9C8CE300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22A7 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x22DC PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH0 SHL PUSH2 0x224C JUMP JUMPDEST PUSH0 ADD PUSH0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x60 PUSH0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x2347 SWAP2 SWAP1 PUSH2 0x31D9 JUMP JUMPDEST PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP2 EQ PUSH2 0x237F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2384 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2394 DUP6 DUP4 DUP4 PUSH2 0x24EB JUMP JUMPDEST SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 CALLVALUE GT ISZERO PUSH2 0x23D8 JUMPI PUSH1 0x40 MLOAD PUSH32 0xB398979F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0x244A JUMPI PUSH0 PUSH1 0x40 MLOAD PUSH32 0x64A0AE9200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2441 SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 PUSH2 0x2456 DUP4 DUP4 PUSH0 PUSH2 0x10D2 JUMP JUMPDEST SWAP1 POP PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x24C8 JUMPI PUSH0 PUSH1 0x40 MLOAD PUSH32 0x73C6AC6E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x24BF SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH0 PUSH2 0x24D6 PUSH2 0x1A4A JUMP JUMPDEST PUSH0 ADD PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP3 PUSH2 0x2500 JUMPI PUSH2 0x24FB DUP3 PUSH2 0x2578 JUMP JUMPDEST PUSH2 0x2570 JUMP JUMPDEST PUSH0 DUP3 MLOAD EQ DUP1 ISZERO PUSH2 0x2526 JUMPI POP PUSH0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE EQ JUMPDEST ISZERO PUSH2 0x2568 JUMPI DUP4 PUSH1 0x40 MLOAD PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x255F SWAP2 SWAP1 PUSH2 0x27C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 SWAP1 POP PUSH2 0x2571 JUMP JUMPDEST JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 DUP2 MLOAD GT ISZERO PUSH2 0x258A JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2601 DUP2 PUSH2 0x25CD JUMP JUMPDEST DUP2 EQ PUSH2 0x260B JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x261C DUP2 PUSH2 0x25F8 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2637 JUMPI PUSH2 0x2636 PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x2644 DUP5 DUP3 DUP6 ADD PUSH2 0x260E JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2661 DUP2 PUSH2 0x264D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x267A PUSH0 DUP4 ADD DUP5 PUSH2 0x2658 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x26B7 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x269C JUMP JUMPDEST PUSH0 DUP5 DUP5 ADD MSTORE POP POP POP POP JUMP JUMPDEST PUSH0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x26DC DUP3 PUSH2 0x2680 JUMP JUMPDEST PUSH2 0x26E6 DUP2 DUP6 PUSH2 0x268A JUMP JUMPDEST SWAP4 POP PUSH2 0x26F6 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x269A JUMP JUMPDEST PUSH2 0x26FF DUP2 PUSH2 0x26C2 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH0 DUP4 ADD MSTORE PUSH2 0x2722 DUP2 DUP5 PUSH2 0x26D2 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x273C DUP2 PUSH2 0x272A JUMP JUMPDEST DUP2 EQ PUSH2 0x2746 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x2757 DUP2 PUSH2 0x2733 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2772 JUMPI PUSH2 0x2771 PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x277F DUP5 DUP3 DUP6 ADD PUSH2 0x2749 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x27B1 DUP3 PUSH2 0x2788 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x27C1 DUP2 PUSH2 0x27A7 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x27DA PUSH0 DUP4 ADD DUP5 PUSH2 0x27B8 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x27E9 DUP2 PUSH2 0x27A7 JUMP JUMPDEST DUP2 EQ PUSH2 0x27F3 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x2804 DUP2 PUSH2 0x27E0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2820 JUMPI PUSH2 0x281F PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x282D DUP6 DUP3 DUP7 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x283E DUP6 DUP3 DUP7 ADD PUSH2 0x2749 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x285F JUMPI PUSH2 0x285E PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x286C DUP7 DUP3 DUP8 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x287D DUP7 DUP3 DUP8 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x288E DUP7 DUP3 DUP8 ADD PUSH2 0x2749 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x28A1 DUP2 PUSH2 0x264D JUMP JUMPDEST DUP2 EQ PUSH2 0x28AB JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x28BC DUP2 PUSH2 0x2898 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x28D7 JUMPI PUSH2 0x28D6 PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x28E4 DUP5 DUP3 DUP6 ADD PUSH2 0x28AE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x292B DUP3 PUSH2 0x26C2 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x294A JUMPI PUSH2 0x2949 PUSH2 0x28F5 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH0 PUSH2 0x295C PUSH2 0x25BC JUMP JUMPDEST SWAP1 POP PUSH2 0x2968 DUP3 DUP3 PUSH2 0x2922 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x2987 JUMPI PUSH2 0x2986 PUSH2 0x28F5 JUMP JUMPDEST JUMPDEST PUSH2 0x2990 DUP3 PUSH2 0x26C2 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH0 PUSH2 0x29BD PUSH2 0x29B8 DUP5 PUSH2 0x296D JUMP JUMPDEST PUSH2 0x2953 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x29D9 JUMPI PUSH2 0x29D8 PUSH2 0x28F1 JUMP JUMPDEST JUMPDEST PUSH2 0x29E4 DUP5 DUP3 DUP6 PUSH2 0x299D JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2A00 JUMPI PUSH2 0x29FF PUSH2 0x28ED JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2A10 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x29AB JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2A2F JUMPI PUSH2 0x2A2E PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x2A3C DUP6 DUP3 DUP7 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2A5D JUMPI PUSH2 0x2A5C PUSH2 0x25C9 JUMP JUMPDEST JUMPDEST PUSH2 0x2A69 DUP6 DUP3 DUP7 ADD PUSH2 0x29EC JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2A85 DUP2 PUSH2 0x2A73 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2A9E PUSH0 DUP4 ADD DUP5 PUSH2 0x2A7C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2AB9 JUMPI PUSH2 0x2AB8 PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x2AC6 DUP5 DUP3 DUP6 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2AD8 DUP2 PUSH2 0x272A JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2AF1 PUSH0 DUP4 ADD DUP5 PUSH2 0x2ACF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2B0D JUMPI PUSH2 0x2B0C PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x2B1A DUP6 DUP3 DUP7 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2B2B DUP6 DUP3 DUP7 ADD PUSH2 0x28AE JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2B4D JUMPI PUSH2 0x2B4C PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x2B5A DUP8 DUP3 DUP9 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x2B6B DUP8 DUP3 DUP9 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x2B7C DUP8 DUP3 DUP9 ADD PUSH2 0x2749 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2B9D JUMPI PUSH2 0x2B9C PUSH2 0x25C9 JUMP JUMPDEST JUMPDEST PUSH2 0x2BA9 DUP8 DUP3 DUP9 ADD PUSH2 0x29EC JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2BCB JUMPI PUSH2 0x2BCA PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x2BD8 DUP6 DUP3 DUP7 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2BE9 DUP6 DUP3 DUP7 ADD PUSH2 0x27F6 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 PUSH1 0x2 DUP3 DIV SWAP1 POP PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x2C37 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x2C4A JUMPI PUSH2 0x2C49 PUSH2 0x2BF3 JUMP JUMPDEST JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x2C63 PUSH0 DUP4 ADD DUP7 PUSH2 0x27B8 JUMP JUMPDEST PUSH2 0x2C70 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x2ACF JUMP JUMPDEST PUSH2 0x2C7D PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x27B8 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x4D696E74696E67206973206E6F7420656E61626C656400000000000000000000 PUSH0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH0 PUSH2 0x2CB9 PUSH1 0x16 DUP4 PUSH2 0x268A JUMP JUMPDEST SWAP2 POP PUSH2 0x2CC4 DUP3 PUSH2 0x2C85 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH0 DUP4 ADD MSTORE PUSH2 0x2CE6 DUP2 PUSH2 0x2CAD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x2D2C PUSH2 0x2D27 PUSH2 0x2D22 DUP5 PUSH2 0x2CED JUMP JUMPDEST PUSH2 0x2D09 JUMP JUMPDEST PUSH2 0x2CF6 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2D3C DUP2 PUSH2 0x2D12 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2D55 PUSH0 DUP4 ADD DUP5 PUSH2 0x2D33 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x2D6F DUP3 PUSH2 0x2680 JUMP JUMPDEST PUSH2 0x2D79 DUP2 DUP6 PUSH2 0x2D5B JUMP JUMPDEST SWAP4 POP PUSH2 0x2D89 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x269A JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x2DA0 DUP3 DUP6 PUSH2 0x2D65 JUMP JUMPDEST SWAP2 POP PUSH2 0x2DAC DUP3 DUP5 PUSH2 0x2D65 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2DC1 DUP2 PUSH2 0x2A73 JUMP JUMPDEST DUP2 EQ PUSH2 0x2DCB JUMPI PUSH0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 MLOAD SWAP1 POP PUSH2 0x2DDC DUP2 PUSH2 0x2DB8 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2DF7 JUMPI PUSH2 0x2DF6 PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x2E04 DUP5 DUP3 DUP6 ADD PUSH2 0x2DCE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x2E31 DUP3 PUSH2 0x2E0D JUMP JUMPDEST PUSH2 0x2E3B DUP2 DUP6 PUSH2 0x2E17 JUMP JUMPDEST SWAP4 POP PUSH2 0x2E4B DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x269A JUMP JUMPDEST PUSH2 0x2E54 DUP2 PUSH2 0x26C2 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x80 DUP3 ADD SWAP1 POP PUSH2 0x2E72 PUSH0 DUP4 ADD DUP8 PUSH2 0x27B8 JUMP JUMPDEST PUSH2 0x2E7F PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x27B8 JUMP JUMPDEST PUSH2 0x2E8C PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x2ACF JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x2E9E DUP2 DUP5 PUSH2 0x2E27 JUMP JUMPDEST SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH0 DUP2 MLOAD SWAP1 POP PUSH2 0x2EB7 DUP2 PUSH2 0x25F8 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2ED2 JUMPI PUSH2 0x2ED1 PUSH2 0x25C5 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x2EDF DUP5 DUP3 DUP6 ADD PUSH2 0x2EA9 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x2F28 PUSH0 DUP4 ADD DUP6 PUSH2 0x27B8 JUMP JUMPDEST PUSH2 0x2F35 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2ACF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP DUP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH1 0x20 PUSH1 0x1F DUP4 ADD DIV SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP3 DUP3 SHL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x8 DUP4 MUL PUSH2 0x2F98 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH2 0x2F5D JUMP JUMPDEST PUSH2 0x2FA2 DUP7 DUP4 PUSH2 0x2F5D JUMP JUMPDEST SWAP6 POP DUP1 NOT DUP5 AND SWAP4 POP DUP1 DUP7 AND DUP5 OR SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 PUSH2 0x2FD4 PUSH2 0x2FCF PUSH2 0x2FCA DUP5 PUSH2 0x272A JUMP JUMPDEST PUSH2 0x2D09 JUMP JUMPDEST PUSH2 0x272A JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2FED DUP4 PUSH2 0x2FBA JUMP JUMPDEST PUSH2 0x3001 PUSH2 0x2FF9 DUP3 PUSH2 0x2FDB JUMP JUMPDEST DUP5 DUP5 SLOAD PUSH2 0x2F69 JUMP JUMPDEST DUP3 SSTORE POP POP POP POP JUMP JUMPDEST PUSH0 SWAP1 JUMP JUMPDEST PUSH2 0x3015 PUSH2 0x3009 JUMP JUMPDEST PUSH2 0x3020 DUP2 DUP5 DUP5 PUSH2 0x2FE4 JUMP JUMPDEST POP POP POP JUMP JUMPDEST JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3043 JUMPI PUSH2 0x3038 PUSH0 DUP3 PUSH2 0x300D JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x3026 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x3088 JUMPI PUSH2 0x3059 DUP2 PUSH2 0x2F3C JUMP JUMPDEST PUSH2 0x3062 DUP5 PUSH2 0x2F4E JUMP JUMPDEST DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x3071 JUMPI DUP2 SWAP1 POP JUMPDEST PUSH2 0x3085 PUSH2 0x307D DUP6 PUSH2 0x2F4E JUMP JUMPDEST DUP4 ADD DUP3 PUSH2 0x3025 JUMP JUMPDEST POP POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH0 DUP3 DUP3 SHR SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x30A8 PUSH0 NOT DUP5 PUSH1 0x8 MUL PUSH2 0x308D JUMP JUMPDEST NOT DUP1 DUP4 AND SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x30C0 DUP4 DUP4 PUSH2 0x3099 JUMP JUMPDEST SWAP2 POP DUP3 PUSH1 0x2 MUL DUP3 OR SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x30D9 DUP3 PUSH2 0x2680 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x30F2 JUMPI PUSH2 0x30F1 PUSH2 0x28F5 JUMP JUMPDEST JUMPDEST PUSH2 0x30FC DUP3 SLOAD PUSH2 0x2C20 JUMP JUMPDEST PUSH2 0x3107 DUP3 DUP3 DUP6 PUSH2 0x3047 JUMP JUMPDEST PUSH0 PUSH1 0x20 SWAP1 POP PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x3138 JUMPI PUSH0 DUP5 ISZERO PUSH2 0x3126 JUMPI DUP3 DUP8 ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0x3130 DUP6 DUP3 PUSH2 0x30B5 JUMP JUMPDEST DUP7 SSTORE POP PUSH2 0x3197 JUMP JUMPDEST PUSH1 0x1F NOT DUP5 AND PUSH2 0x3146 DUP7 PUSH2 0x2F3C JUMP JUMPDEST PUSH0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x316D JUMPI DUP5 DUP10 ADD MLOAD DUP3 SSTORE PUSH1 0x1 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP6 ADD SWAP5 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x3148 JUMP JUMPDEST DUP7 DUP4 LT ISZERO PUSH2 0x318A JUMPI DUP5 DUP10 ADD MLOAD PUSH2 0x3186 PUSH1 0x1F DUP10 AND DUP3 PUSH2 0x3099 JUMP JUMPDEST DUP4 SSTORE POP JUMPDEST PUSH1 0x1 PUSH1 0x2 DUP9 MUL ADD DUP9 SSTORE POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x31B3 DUP3 PUSH2 0x2E0D JUMP JUMPDEST PUSH2 0x31BD DUP2 DUP6 PUSH2 0x319F JUMP JUMPDEST SWAP4 POP PUSH2 0x31CD DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x269A JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x31E4 DUP3 DUP5 PUSH2 0x31A9 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE8 CREATE2 0xCE PUSH6 0xD6667C13C0DA 0xEF SWAP6 0xAF 0xBF PUSH3 0xE8E580 PUSH20 0x1154835816A64FEA207CF2053864736F6C634300 ADDMOD AND STOP CALLER ",
"sourceMap": "370:1018:19:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2674:311:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3546:146;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4792:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4618:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5495:578;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1177:91:19;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6139:132:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;515:32:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;466:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4158:214:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3705:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3366:118:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3044:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3155:101:0;;;;;;;;;;;;;:::i;:::-;;2441:144;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3756:150:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1025:146:19;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5013:144:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1819:58:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6337:208:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;666:353:19;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3972:255:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5223:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3405:215:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2674:311:3;2787:4;2837:25;2822:40;;;:11;:40;;;;:104;;;;2893:33;2878:48;;;:11;:48;;;;2822:104;:156;;;;2942:36;2966:11;2942:23;:36::i;:::-;2822:156;2803:175;;2674:311;;;:::o;3546:146::-;3591:13;3616:23;3642:19;:17;:19::i;:::-;3616:45;;3678:1;:7;;3671:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3546:146;:::o;4792:154::-;4859:7;4878:22;4892:7;4878:13;:22::i;:::-;;4918:21;4931:7;4918:12;:21::i;:::-;4911:28;;4792:154;;;:::o;4618:113::-;4689:35;4698:2;4702:7;4711:12;:10;:12::i;:::-;4689:8;:35::i;:::-;4618:113;;:::o;5495:578::-;5603:1;5589:16;;:2;:16;;;5585:87;;5658:1;5628:33;;;;;;;;;;;:::i;:::-;;;;;;;;5585:87;5890:21;5914:34;5922:2;5926:7;5935:12;:10;:12::i;:::-;5914:7;:34::i;:::-;5890:58;;5979:4;5962:21;;:13;:21;;;5958:109;;6027:4;6033:7;6042:13;6006:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;5958:109;5575:498;5495:578;;;:::o;1177:91:19:-;2334:13:0;:11;:13::i;:::-;1252:9:19::1;1241:8;::::0;:20:::1;;;;;;;;;;;;;;;;;;1177:91:::0;:::o;6139:132:3:-;6225:39;6242:4;6248:2;6252:7;6225:39;;;;;;;;;;;;:16;:39::i;:::-;6139:132;;;:::o;515:32:19:-;;;;;;;;;;;;;:::o;466:20::-;;;;;;;;;;;;:::o;4158:214:2:-;2653:13;:11;:13::i;:::-;4273:36:::1;4291:17;4273;:36::i;:::-;4319:46;4341:17;4360:4;4319:21;:46::i;:::-;4158:214:::0;;:::o;3705:134::-;3774:7;2924:20;:18;:20::i;:::-;1327:66:8::1;3800:32:2;;3793:39;;3705:134:::0;:::o;3366:118:3:-;3429:7;3455:22;3469:7;3455:13;:22::i;:::-;3448:29;;3366:118;;;:::o;3044:265::-;3107:7;3126:23;3152:19;:17;:19::i;:::-;3126:45;;3202:1;3185:19;;:5;:19;;;3181:87;;3254:1;3227:30;;;;;;;;;;;:::i;:::-;;;;;;;;3181:87;3284:1;:11;;:18;3296:5;3284:18;;;;;;;;;;;;;;;;3277:25;;;3044:265;;;:::o;3155:101:0:-;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;:::-;3155:101::o:0;2441:144::-;2487:7;2506:24;2533:20;:18;:20::i;:::-;2506:47;;2570:1;:8;;;;;;;;;;;;2563:15;;;2441:144;:::o;3756:150:3:-;3803:13;3828:23;3854:19;:17;:19::i;:::-;3828:45;;3890:1;:9;;3883:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3756:150;:::o;1025:146:19:-;1097:8;;;;;;;;;;1089:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;1142:22;1152:2;1156:7;1142:9;:22::i;:::-;1025:146;;:::o;5013:144:3:-;5098:52;5117:12;:10;:12::i;:::-;5131:8;5141;5098:18;:52::i;:::-;5013:144;;:::o;1819:58:2:-;;;;;;;;;;;;;;;;;;;:::o;6337:208:3:-;6450:31;6463:4;6469:2;6473:7;6450:12;:31::i;:::-;6491:47;6514:4;6520:2;6524:7;6533:4;6491:22;:47::i;:::-;6337:208;;;;:::o;666:353:19:-;4158:30:1;4191:26;:24;:26::i;:::-;4158:59;;4279:19;4302:1;:15;;;;;;;;;;;;4301:16;4279:38;;4327:18;4348:1;:14;;;;;;;;;;;;4327:35;;4706:17;4741:1;4726:11;:16;;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4805:1;4790:11;:16;;;:50;;;;;4839:1;4818:4;4810:25;;;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;;;;;;;;;;;;;4851:91;4968:1;4951;:14;;;:18;;;;;;;;;;;;;;;;;;4983:14;4979:67;;;5031:4;5013:1;:15;;;:22;;;;;;;;;;;;;;;;;;4979:67;737:31:19::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;::::0;:13:::1;:31::i;:::-;778:28;793:12;778:14;:28::i;:::-;816:24;:22;:24::i;:::-;861:4;850:8;::::0;:15:::1;;;;;;;;;;;;;;;;;;935:42;915:17;;:62;;;;;;;;;;;;;;;;;;5070:14:1::0;5066:101;;;5118:5;5100:1;:15;;;:23;;;;;;;;;;;;;;;;;;5142:14;5154:1;5142:14;;;;;;:::i;:::-;;;;;;;;5066:101;4092:1081;;;;;666:353:19;:::o;3972:255:3:-;4036:13;4061:22;4075:7;4061:13;:22::i;:::-;;4094:21;4118:10;:8;:10::i;:::-;4094:34;;4169:1;4151:7;4145:21;:25;:75;;;;;;;;;;;;;;;;;4187:7;4196:18;:7;:16;:18::i;:::-;4173:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4145:75;4138:82;;;3972:255;;;:::o;5223:210::-;5311:4;5327:23;5353:19;:17;:19::i;:::-;5327:45;;5389:1;:20;;:27;5410:5;5389:27;;;;;;;;;;;;;;;:37;5417:8;5389:37;;;;;;;;;;;;;;;;;;;;;;;;;5382:44;;;5223:210;;;;:::o;3405:215:0:-;2334:13;:11;:13::i;:::-;3509:1:::1;3489:22;;:8;:22;;::::0;3485:91:::1;;3562:1;3534:31;;;;;;;;;;;:::i;:::-;;;;;;;;3485:91;3585:28;3604:8;3585:18;:28::i;:::-;3405:215:::0;:::o;1034:146:5:-;1110:4;1148:25;1133:40;;;:11;:40;;;;1126:47;;1034:146;;;:::o;1958:156:3:-;2009:23;2077:21;2067:31;;1958:156;:::o;17836:241::-;17899:7;17918:13;17934:17;17943:7;17934:8;:17::i;:::-;17918:33;;17982:1;17965:19;;:5;:19;;;17961:88;;18030:7;18007:31;;;;;;;;;;;:::i;:::-;;;;;;;;17961:88;18065:5;18058:12;;;17836:241;;;:::o;7347:184::-;7417:7;7436:23;7462:19;:17;:19::i;:::-;7436:45;;7498:1;:17;;:26;7516:7;7498:26;;;;;;;;;;;;;;;;;;;;;7491:33;;;7347:184;;;:::o;887:96:4:-;940:7;966:10;959:17;;887:96;:::o;16002:120:3:-;16082:33;16091:2;16095:7;16104:4;16110;16082:8;:33::i;:::-;16002:120;;;:::o;10361:856::-;10447:7;10466:23;10492:19;:17;:19::i;:::-;10466:45;;10521:12;10536:17;10545:7;10536:8;:17::i;:::-;10521:32;;10629:1;10613:18;;:4;:18;;;10609:86;;10647:37;10664:4;10670;10676:7;10647:16;:37::i;:::-;10609:86;10755:1;10739:18;;:4;:18;;;10735:258;;10855:48;10872:1;10876:7;10893:1;10897:5;10855:8;:48::i;:::-;10967:1;10946;:11;;:17;10958:4;10946:17;;;;;;;;;;;;;;;;:22;;;;;;;;;;;10735:258;11021:1;11007:16;;:2;:16;;;11003:109;;11086:1;11067;:11;;:15;11079:2;11067:15;;;;;;;;;;;;;;;;:20;;;;;;;;;;;11003:109;11143:2;11122:1;:9;;:18;11132:7;11122:18;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;11180:7;11176:2;11161:27;;11170:4;11161:27;;;;;;;;;;;;11206:4;11199:11;;;;10361:856;;;;;:::o;2658:162:0:-;2728:12;:10;:12::i;:::-;2717:23;;:7;:5;:7::i;:::-;:23;;;2713:101;;2790:12;:10;:12::i;:::-;2763:40;;;;;;;;;;;:::i;:::-;;;;;;;;2713:101;2658:162::o;4599:312:2:-;4688:6;4671:23;;4679:4;4671:23;;;:120;;;;4785:6;4749:42;;:32;:30;:32::i;:::-;:42;;;;4671:120;4654:251;;;4865:29;;;;;;;;;;;;;;4654:251;4599:312::o;1274:112:19:-;2334:13:0;:11;:13::i;:::-;1274:112:19;:::o;6052:538:2:-;6169:17;6151:50;;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6147:437;;6555:17;6513:60;;;;;;;;;;;:::i;:::-;;;;;;;;6147:437;1327:66:8;6253:32:2;;6245:4;:40;6241:120;;6341:4;6312:34;;;;;;;;;;;:::i;:::-;;;;;;;;6241:120;6374:54;6404:17;6423:4;6374:29;:54::i;:::-;6204:235;6052:538;;:::o;5028:213::-;5111:6;5094:23;;5102:4;5094:23;;;5090:145;;5195:29;;;;;;;;;;;;;;5090:145;5028:213::o;3774:248:0:-;3847:24;3874:20;:18;:20::i;:::-;3847:47;;3904:16;3923:1;:8;;;;;;;;;;;;3904:27;;3952:8;3941:1;:8;;;:19;;;;;;;;;;;;;;;;;;4006:8;3975:40;;3996:8;3975:40;;;;;;;;;;;;3837:185;;3774:248;:::o;1192:159::-;1244:24;1313:22;1303:32;;1192:159;:::o;12217:100:3:-;12284:26;12294:2;12298:7;12284:26;;;;;;;;;;;;:9;:26::i;:::-;12217:100;;:::o;17232:369::-;17335:23;17361:19;:17;:19::i;:::-;17335:45;;17414:1;17394:22;;:8;:22;;;17390:91;;17461:8;17439:31;;;;;;;;;;;:::i;:::-;;;;;;;;17390:91;17530:8;17490:1;:20;;:27;17511:5;17490:27;;;;;;;;;;;;;;;:37;17518:8;17490:37;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;17575:8;17553:41;;17568:5;17553:41;;;17585:8;17553:41;;;;;;:::i;:::-;;;;;;;;17325:276;17232:369;;;:::o;18616:782::-;18749:1;18732:2;:14;;;:18;18728:664;;;18786:2;18770:36;;;18807:12;:10;:12::i;:::-;18821:4;18827:7;18836:4;18770:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;18766:616;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19096:1;19079:6;:13;:18;19075:293;;19150:2;19128:25;;;;;;;;;;;:::i;:::-;;;;;;;;19075:293;19320:6;19314:13;19305:6;19301:2;19297:15;19290:38;18766:616;18898:41;;;18888:51;;;:6;:51;;;;18884:130;;18992:2;18970:25;;;;;;;;;;;:::i;:::-;;;;;;;;18884:130;18842:186;18728:664;18616:782;;;;:::o;8737:170:1:-;8795:30;8870:21;8860:31;;8737:170;:::o;2233:149:3:-;6931:20:1;:18;:20::i;:::-;2336:39:3::1;2360:5;2367:7;2336:23;:39::i;:::-;2233:149:::0;;:::o;1847:127:0:-;6931:20:1;:18;:20::i;:::-;1929:38:0::1;1954:12;1929:24;:38::i;:::-;1847:127:::0;:::o;2968:67:2:-;6931:20:1;:18;:20::i;:::-;2968:67:2:o;4469:92:3:-;4520:13;4545:9;;;;;;;;;;;;;;4469:92;:::o;637:698:15:-;693:13;742:14;779:1;759:17;770:5;759:10;:17::i;:::-;:21;742:38;;794:20;828:6;817:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;794:41;;849:11;975:6;971:2;967:15;959:6;955:28;948:35;;1010:282;1017:4;1010:282;;;1041:5;;;;;;;;1180:10;1175:2;1168:5;1164:14;1159:32;1154:3;1146:46;1236:2;1227:11;;;;;;:::i;:::-;;;;;1269:1;1260:5;:10;1010:282;1256:21;1010:282;1312:6;1305:13;;;;;637:698;;;:::o;7059:172:3:-;7125:7;7144:23;7170:19;:17;:19::i;:::-;7144:45;;7206:1;:9;;:18;7216:7;7206:18;;;;;;;;;;;;;;;;;;;;;7199:25;;;7059:172;;;:::o;16304:719::-;16408:23;16434:19;:17;:19::i;:::-;16408:45;;16519:9;:31;;;;16548:1;16532:18;;:4;:18;;;;16519:31;16515:460;;;16566:13;16582:22;16596:7;16582:13;:22::i;:::-;16566:38;;16748:1;16732:18;;:4;:18;;;;:35;;;;;16763:4;16754:13;;:5;:13;;;;16732:35;:69;;;;;16772:29;16789:5;16796:4;16772:16;:29::i;:::-;16771:30;16732:69;16728:142;;;16850:4;16828:27;;;;;;;;;;;:::i;:::-;;;;;;;;16728:142;16888:9;16884:81;;;16942:7;16938:2;16922:28;;16931:5;16922:28;;;;;;;;;;;;16884:81;16552:423;16515:460;17014:2;16985:1;:17;;:26;17003:7;16985:26;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;16398:625;16304:719;;;;:::o;8548:368::-;8660:38;8674:5;8681:7;8690;8660:13;:38::i;:::-;8655:255;;8735:1;8718:19;;:5;:19;;;8714:186;;8787:7;8764:31;;;;;;;;;;;:::i;:::-;;;;;;;;8714:186;8868:7;8877;8841:44;;;;;;;;;;;;:::i;:::-;;;;;;;;8655:255;8548:368;;;:::o;1957:138:8:-;2009:7;2035:47;1327:66;2062:19;;2035:26;:47::i;:::-;:53;;;;;;;;;;;;2028:60;;1957:138;:::o;2779:335::-;2870:37;2889:17;2870:18;:37::i;:::-;2931:17;2922:27;;;;;;;;;;;;2978:1;2964:4;:11;:15;2960:148;;;2995:53;3024:17;3043:4;2995:28;:53::i;:::-;;2960:148;;;3079:18;:16;:18::i;:::-;2960:148;2779:335;;:::o;12538:182:3:-;12632:18;12638:2;12642:7;12632:5;:18::i;:::-;12660:53;12691:1;12695:2;12699:7;12708:4;12660:22;:53::i;:::-;12538:182;;;:::o;7084:141:1:-;7151:17;:15;:17::i;:::-;7146:73;;7191:17;;;;;;;;;;;;;;7146:73;7084:141::o;2388:219:3:-;6931:20:1;:18;:20::i;:::-;2501:23:3::1;2527:19;:17;:19::i;:::-;2501:45;;2566:5;2556:1;:7;;:15;;;;;;:::i;:::-;;2593:7;2581:1;:9;;:19;;;;;;:::i;:::-;;2491:116;2388:219:::0;;:::o;1980:235:0:-;6931:20:1;:18;:20::i;:::-;2100:1:0::1;2076:26;;:12;:26;;::::0;2072:95:::1;;2153:1;2125:31;;;;;;;;;;;:::i;:::-;;;;;;;;2072:95;2176:32;2195:12;2176:18;:32::i;:::-;1980:235:::0;:::o;12214:916:17:-;12267:7;12286:14;12303:1;12286:18;;12351:8;12342:5;:17;12338:103;;12388:8;12379:17;;;;;;:::i;:::-;;;;;12424:2;12414:12;;;;12338:103;12467:8;12458:5;:17;12454:103;;12504:8;12495:17;;;;;;:::i;:::-;;;;;12540:2;12530:12;;;;12454:103;12583:8;12574:5;:17;12570:103;;12620:8;12611:17;;;;;;:::i;:::-;;;;;12656:2;12646:12;;;;12570:103;12699:7;12690:5;:16;12686:100;;12735:7;12726:16;;;;;;:::i;:::-;;;;;12770:1;12760:11;;;;12686:100;12812:7;12803:5;:16;12799:100;;12848:7;12839:16;;;;;;:::i;:::-;;;;;12883:1;12873:11;;;;12799:100;12925:7;12916:5;:16;12912:100;;12961:7;12952:16;;;;;;:::i;:::-;;;;;12996:1;12986:11;;;;12912:100;13038:7;13029:5;:16;13025:66;;13075:1;13065:11;;;;13025:66;13117:6;13110:13;;;12214:916;;;:::o;7842:272:3:-;7945:4;7999:1;7980:21;;:7;:21;;;;:127;;;;;8027:7;8018:16;;:5;:16;;;:52;;;;8038:32;8055:5;8062:7;8038:16;:32::i;:::-;8018:52;:88;;;;8099:7;8074:32;;:21;8087:7;8074:12;:21::i;:::-;:32;;;8018:88;7980:127;7961:146;;7842:272;;;;;:::o;1684:190:14:-;1745:21;1854:4;1844:14;;1684:190;;;:::o;2186:281:8:-;2296:1;2263:17;:29;;;:34;2259:119;;2349:17;2320:47;;;;;;;;;;;:::i;:::-;;;;;;;;2259:119;2443:17;2387:47;1327:66;2414:19;;2387:26;:47::i;:::-;:53;;;:73;;;;;;;;;;;;;;;;;;2186:281;:::o;4106:253:13:-;4189:12;4214;4228:23;4255:6;:19;;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:67;;;;4297:55;4324:6;4332:7;4341:10;4297:26;:55::i;:::-;4290:62;;;;4106:253;;;;:::o;6598:122:8:-;6660:1;6648:9;:13;6644:70;;;6684:19;;;;;;;;;;;;;;6644:70;6598:122::o;11539:327:3:-;11620:1;11606:16;;:2;:16;;;11602:87;;11675:1;11645:33;;;;;;;;;;;:::i;:::-;;;;;;;;11602:87;11698:21;11722:32;11730:2;11734:7;11751:1;11722:7;:32::i;:::-;11698:56;;11793:1;11768:27;;:13;:27;;;11764:96;;11846:1;11818:31;;;;;;;;;;;:::i;:::-;;;;;;;;11764:96;11592:274;11539:327;;:::o;8487:120:1:-;8537:4;8560:26;:24;:26::i;:::-;:40;;;;;;;;;;;;8553:47;;8487:120;:::o;4625:582:13:-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5066:1;5045:10;:17;:22;:49;;;;;5093:1;5071:6;:18;;;:23;5045:49;5041:119;;;5138:6;5121:24;;;;;;;;;;;:::i;:::-;;;;;;;;5041:119;5180:10;5173:17;;;;4793:408;4625:582;;;;;;:::o;5743:516::-;5894:1;5874:10;:17;:21;5870:383;;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;;;;;;;;;;;;;7:75:20;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:619::-;4967:6;4975;4983;5032:2;5020:9;5011:7;5007:23;5003:32;5000:119;;;5038:79;;:::i;:::-;5000:119;5158:1;5183:53;5228:7;5219:6;5208:9;5204:22;5183:53;:::i;:::-;5173:63;;5129:117;5285:2;5311:53;5356:7;5347:6;5336:9;5332:22;5311:53;:::i;:::-;5301:63;;5256:118;5413:2;5439:53;5484:7;5475:6;5464:9;5460:22;5439:53;:::i;:::-;5429:63;;5384:118;4890:619;;;;;:::o;5515:116::-;5585:21;5600:5;5585:21;:::i;:::-;5578:5;5575:32;5565:60;;5621:1;5618;5611:12;5565:60;5515:116;:::o;5637:133::-;5680:5;5718:6;5705:20;5696:29;;5734:30;5758:5;5734:30;:::i;:::-;5637:133;;;;:::o;5776:323::-;5832:6;5881:2;5869:9;5860:7;5856:23;5852:32;5849:119;;;5887:79;;:::i;:::-;5849:119;6007:1;6032:50;6074:7;6065:6;6054:9;6050:22;6032:50;:::i;:::-;6022:60;;5978:114;5776:323;;;;:::o;6105:117::-;6214:1;6211;6204:12;6228:117;6337:1;6334;6327:12;6351:180;6399:77;6396:1;6389:88;6496:4;6493:1;6486:15;6520:4;6517:1;6510:15;6537:281;6620:27;6642:4;6620:27;:::i;:::-;6612:6;6608:40;6750:6;6738:10;6735:22;6714:18;6702:10;6699:34;6696:62;6693:88;;;6761:18;;:::i;:::-;6693:88;6801:10;6797:2;6790:22;6580:238;6537:281;;:::o;6824:129::-;6858:6;6885:20;;:::i;:::-;6875:30;;6914:33;6942:4;6934:6;6914:33;:::i;:::-;6824:129;;;:::o;6959:307::-;7020:4;7110:18;7102:6;7099:30;7096:56;;;7132:18;;:::i;:::-;7096:56;7170:29;7192:6;7170:29;:::i;:::-;7162:37;;7254:4;7248;7244:15;7236:23;;6959:307;;;:::o;7272:146::-;7369:6;7364:3;7359;7346:30;7410:1;7401:6;7396:3;7392:16;7385:27;7272:146;;;:::o;7424:423::-;7501:5;7526:65;7542:48;7583:6;7542:48;:::i;:::-;7526:65;:::i;:::-;7517:74;;7614:6;7607:5;7600:21;7652:4;7645:5;7641:16;7690:3;7681:6;7676:3;7672:16;7669:25;7666:112;;;7697:79;;:::i;:::-;7666:112;7787:54;7834:6;7829:3;7824;7787:54;:::i;:::-;7507:340;7424:423;;;;;:::o;7866:338::-;7921:5;7970:3;7963:4;7955:6;7951:17;7947:27;7937:122;;7978:79;;:::i;:::-;7937:122;8095:6;8082:20;8120:78;8194:3;8186:6;8179:4;8171:6;8167:17;8120:78;:::i;:::-;8111:87;;7927:277;7866:338;;;;:::o;8210:652::-;8287:6;8295;8344:2;8332:9;8323:7;8319:23;8315:32;8312:119;;;8350:79;;:::i;:::-;8312:119;8470:1;8495:53;8540:7;8531:6;8520:9;8516:22;8495:53;:::i;:::-;8485:63;;8441:117;8625:2;8614:9;8610:18;8597:32;8656:18;8648:6;8645:30;8642:117;;;8678:79;;:::i;:::-;8642:117;8783:62;8837:7;8828:6;8817:9;8813:22;8783:62;:::i;:::-;8773:72;;8568:287;8210:652;;;;;:::o;8868:77::-;8905:7;8934:5;8923:16;;8868:77;;;:::o;8951:118::-;9038:24;9056:5;9038:24;:::i;:::-;9033:3;9026:37;8951:118;;:::o;9075:222::-;9168:4;9206:2;9195:9;9191:18;9183:26;;9219:71;9287:1;9276:9;9272:17;9263:6;9219:71;:::i;:::-;9075:222;;;;:::o;9303:329::-;9362:6;9411:2;9399:9;9390:7;9386:23;9382:32;9379:119;;;9417:79;;:::i;:::-;9379:119;9537:1;9562:53;9607:7;9598:6;9587:9;9583:22;9562:53;:::i;:::-;9552:63;;9508:117;9303:329;;;;:::o;9638:118::-;9725:24;9743:5;9725:24;:::i;:::-;9720:3;9713:37;9638:118;;:::o;9762:222::-;9855:4;9893:2;9882:9;9878:18;9870:26;;9906:71;9974:1;9963:9;9959:17;9950:6;9906:71;:::i;:::-;9762:222;;;;:::o;9990:468::-;10055:6;10063;10112:2;10100:9;10091:7;10087:23;10083:32;10080:119;;;10118:79;;:::i;:::-;10080:119;10238:1;10263:53;10308:7;10299:6;10288:9;10284:22;10263:53;:::i;:::-;10253:63;;10209:117;10365:2;10391:50;10433:7;10424:6;10413:9;10409:22;10391:50;:::i;:::-;10381:60;;10336:115;9990:468;;;;;:::o;10464:943::-;10559:6;10567;10575;10583;10632:3;10620:9;10611:7;10607:23;10603:33;10600:120;;;10639:79;;:::i;:::-;10600:120;10759:1;10784:53;10829:7;10820:6;10809:9;10805:22;10784:53;:::i;:::-;10774:63;;10730:117;10886:2;10912:53;10957:7;10948:6;10937:9;10933:22;10912:53;:::i;:::-;10902:63;;10857:118;11014:2;11040:53;11085:7;11076:6;11065:9;11061:22;11040:53;:::i;:::-;11030:63;;10985:118;11170:2;11159:9;11155:18;11142:32;11201:18;11193:6;11190:30;11187:117;;;11223:79;;:::i;:::-;11187:117;11328:62;11382:7;11373:6;11362:9;11358:22;11328:62;:::i;:::-;11318:72;;11113:287;10464:943;;;;;;;:::o;11413:474::-;11481:6;11489;11538:2;11526:9;11517:7;11513:23;11509:32;11506:119;;;11544:79;;:::i;:::-;11506:119;11664:1;11689:53;11734:7;11725:6;11714:9;11710:22;11689:53;:::i;:::-;11679:63;;11635:117;11791:2;11817:53;11862:7;11853:6;11842:9;11838:22;11817:53;:::i;:::-;11807:63;;11762:118;11413:474;;;;;:::o;11893:180::-;11941:77;11938:1;11931:88;12038:4;12035:1;12028:15;12062:4;12059:1;12052:15;12079:320;12123:6;12160:1;12154:4;12150:12;12140:22;;12207:1;12201:4;12197:12;12228:18;12218:81;;12284:4;12276:6;12272:17;12262:27;;12218:81;12346:2;12338:6;12335:14;12315:18;12312:38;12309:84;;12365:18;;:::i;:::-;12309:84;12130:269;12079:320;;;:::o;12405:442::-;12554:4;12592:2;12581:9;12577:18;12569:26;;12605:71;12673:1;12662:9;12658:17;12649:6;12605:71;:::i;:::-;12686:72;12754:2;12743:9;12739:18;12730:6;12686:72;:::i;:::-;12768;12836:2;12825:9;12821:18;12812:6;12768:72;:::i;:::-;12405:442;;;;;;:::o;12853:172::-;12993:24;12989:1;12981:6;12977:14;12970:48;12853:172;:::o;13031:366::-;13173:3;13194:67;13258:2;13253:3;13194:67;:::i;:::-;13187:74;;13270:93;13359:3;13270:93;:::i;:::-;13388:2;13383:3;13379:12;13372:19;;13031:366;;;:::o;13403:419::-;13569:4;13607:2;13596:9;13592:18;13584:26;;13656:9;13650:4;13646:20;13642:1;13631:9;13627:17;13620:47;13684:131;13810:4;13684:131;:::i;:::-;13676:139;;13403:419;;;:::o;13828:85::-;13873:7;13902:5;13891:16;;13828:85;;;:::o;13919:101::-;13955:7;13995:18;13988:5;13984:30;13973:41;;13919:101;;;:::o;14026:60::-;14054:3;14075:5;14068:12;;14026:60;;;:::o;14092:156::-;14149:9;14182:60;14199:42;14208:32;14234:5;14208:32;:::i;:::-;14199:42;:::i;:::-;14182:60;:::i;:::-;14169:73;;14092:156;;;:::o;14254:145::-;14348:44;14386:5;14348:44;:::i;:::-;14343:3;14336:57;14254:145;;:::o;14405:236::-;14505:4;14543:2;14532:9;14528:18;14520:26;;14556:78;14631:1;14620:9;14616:17;14607:6;14556:78;:::i;:::-;14405:236;;;;:::o;14647:148::-;14749:11;14786:3;14771:18;;14647:148;;;;:::o;14801:390::-;14907:3;14935:39;14968:5;14935:39;:::i;:::-;14990:89;15072:6;15067:3;14990:89;:::i;:::-;14983:96;;15088:65;15146:6;15141:3;15134:4;15127:5;15123:16;15088:65;:::i;:::-;15178:6;15173:3;15169:16;15162:23;;14911:280;14801:390;;;;:::o;15197:435::-;15377:3;15399:95;15490:3;15481:6;15399:95;:::i;:::-;15392:102;;15511:95;15602:3;15593:6;15511:95;:::i;:::-;15504:102;;15623:3;15616:10;;15197:435;;;;;:::o;15638:122::-;15711:24;15729:5;15711:24;:::i;:::-;15704:5;15701:35;15691:63;;15750:1;15747;15740:12;15691:63;15638:122;:::o;15766:143::-;15823:5;15854:6;15848:13;15839:22;;15870:33;15897:5;15870:33;:::i;:::-;15766:143;;;;:::o;15915:351::-;15985:6;16034:2;16022:9;16013:7;16009:23;16005:32;16002:119;;;16040:79;;:::i;:::-;16002:119;16160:1;16185:64;16241:7;16232:6;16221:9;16217:22;16185:64;:::i;:::-;16175:74;;16131:128;15915:351;;;;:::o;16272:98::-;16323:6;16357:5;16351:12;16341:22;;16272:98;;;:::o;16376:168::-;16459:11;16493:6;16488:3;16481:19;16533:4;16528:3;16524:14;16509:29;;16376:168;;;;:::o;16550:373::-;16636:3;16664:38;16696:5;16664:38;:::i;:::-;16718:70;16781:6;16776:3;16718:70;:::i;:::-;16711:77;;16797:65;16855:6;16850:3;16843:4;16836:5;16832:16;16797:65;:::i;:::-;16887:29;16909:6;16887:29;:::i;:::-;16882:3;16878:39;16871:46;;16640:283;16550:373;;;;:::o;16929:640::-;17124:4;17162:3;17151:9;17147:19;17139:27;;17176:71;17244:1;17233:9;17229:17;17220:6;17176:71;:::i;:::-;17257:72;17325:2;17314:9;17310:18;17301:6;17257:72;:::i;:::-;17339;17407:2;17396:9;17392:18;17383:6;17339:72;:::i;:::-;17458:9;17452:4;17448:20;17443:2;17432:9;17428:18;17421:48;17486:76;17557:4;17548:6;17486:76;:::i;:::-;17478:84;;16929:640;;;;;;;:::o;17575:141::-;17631:5;17662:6;17656:13;17647:22;;17678:32;17704:5;17678:32;:::i;:::-;17575:141;;;;:::o;17722:349::-;17791:6;17840:2;17828:9;17819:7;17815:23;17811:32;17808:119;;;17846:79;;:::i;:::-;17808:119;17966:1;17991:63;18046:7;18037:6;18026:9;18022:22;17991:63;:::i;:::-;17981:73;;17937:127;17722:349;;;;:::o;18077:180::-;18125:77;18122:1;18115:88;18222:4;18219:1;18212:15;18246:4;18243:1;18236:15;18263:332;18384:4;18422:2;18411:9;18407:18;18399:26;;18435:71;18503:1;18492:9;18488:17;18479:6;18435:71;:::i;:::-;18516:72;18584:2;18573:9;18569:18;18560:6;18516:72;:::i;:::-;18263:332;;;;;:::o;18601:141::-;18650:4;18673:3;18665:11;;18696:3;18693:1;18686:14;18730:4;18727:1;18717:18;18709:26;;18601:141;;;:::o;18748:93::-;18785:6;18832:2;18827;18820:5;18816:14;18812:23;18802:33;;18748:93;;;:::o;18847:107::-;18891:8;18941:5;18935:4;18931:16;18910:37;;18847:107;;;;:::o;18960:393::-;19029:6;19079:1;19067:10;19063:18;19102:97;19132:66;19121:9;19102:97;:::i;:::-;19220:39;19250:8;19239:9;19220:39;:::i;:::-;19208:51;;19292:4;19288:9;19281:5;19277:21;19268:30;;19341:4;19331:8;19327:19;19320:5;19317:30;19307:40;;19036:317;;18960:393;;;;;:::o;19359:142::-;19409:9;19442:53;19460:34;19469:24;19487:5;19469:24;:::i;:::-;19460:34;:::i;:::-;19442:53;:::i;:::-;19429:66;;19359:142;;;:::o;19507:75::-;19550:3;19571:5;19564:12;;19507:75;;;:::o;19588:269::-;19698:39;19729:7;19698:39;:::i;:::-;19759:91;19808:41;19832:16;19808:41;:::i;:::-;19800:6;19793:4;19787:11;19759:91;:::i;:::-;19753:4;19746:105;19664:193;19588:269;;;:::o;19863:73::-;19908:3;19863:73;:::o;19942:189::-;20019:32;;:::i;:::-;20060:65;20118:6;20110;20104:4;20060:65;:::i;:::-;19995:136;19942:189;;:::o;20137:186::-;20197:120;20214:3;20207:5;20204:14;20197:120;;;20268:39;20305:1;20298:5;20268:39;:::i;:::-;20241:1;20234:5;20230:13;20221:22;;20197:120;;;20137:186;;:::o;20329:543::-;20430:2;20425:3;20422:11;20419:446;;;20464:38;20496:5;20464:38;:::i;:::-;20548:29;20566:10;20548:29;:::i;:::-;20538:8;20534:44;20731:2;20719:10;20716:18;20713:49;;;20752:8;20737:23;;20713:49;20775:80;20831:22;20849:3;20831:22;:::i;:::-;20821:8;20817:37;20804:11;20775:80;:::i;:::-;20434:431;;20419:446;20329:543;;;:::o;20878:117::-;20932:8;20982:5;20976:4;20972:16;20951:37;;20878:117;;;;:::o;21001:169::-;21045:6;21078:51;21126:1;21122:6;21114:5;21111:1;21107:13;21078:51;:::i;:::-;21074:56;21159:4;21153;21149:15;21139:25;;21052:118;21001:169;;;;:::o;21175:295::-;21251:4;21397:29;21422:3;21416:4;21397:29;:::i;:::-;21389:37;;21459:3;21456:1;21452:11;21446:4;21443:21;21435:29;;21175:295;;;;:::o;21475:1395::-;21592:37;21625:3;21592:37;:::i;:::-;21694:18;21686:6;21683:30;21680:56;;;21716:18;;:::i;:::-;21680:56;21760:38;21792:4;21786:11;21760:38;:::i;:::-;21845:67;21905:6;21897;21891:4;21845:67;:::i;:::-;21939:1;21963:4;21950:17;;21995:2;21987:6;21984:14;22012:1;22007:618;;;;22669:1;22686:6;22683:77;;;22735:9;22730:3;22726:19;22720:26;22711:35;;22683:77;22786:67;22846:6;22839:5;22786:67;:::i;:::-;22780:4;22773:81;22642:222;21977:887;;22007:618;22059:4;22055:9;22047:6;22043:22;22093:37;22125:4;22093:37;:::i;:::-;22152:1;22166:208;22180:7;22177:1;22174:14;22166:208;;;22259:9;22254:3;22250:19;22244:26;22236:6;22229:42;22310:1;22302:6;22298:14;22288:24;;22357:2;22346:9;22342:18;22329:31;;22203:4;22200:1;22196:12;22191:17;;22166:208;;;22402:6;22393:7;22390:19;22387:179;;;22460:9;22455:3;22451:19;22445:26;22503:48;22545:4;22537:6;22533:17;22522:9;22503:48;:::i;:::-;22495:6;22488:64;22410:156;22387:179;22612:1;22608;22600:6;22596:14;22592:22;22586:4;22579:36;22014:611;;;21977:887;;21567:1303;;;21475:1395;;:::o;22876:147::-;22977:11;23014:3;22999:18;;22876:147;;;;:::o;23029:386::-;23133:3;23161:38;23193:5;23161:38;:::i;:::-;23215:88;23296:6;23291:3;23215:88;:::i;:::-;23208:95;;23312:65;23370:6;23365:3;23358:4;23351:5;23347:16;23312:65;:::i;:::-;23402:6;23397:3;23393:16;23386:23;;23137:278;23029:386;;;;:::o;23421:271::-;23551:3;23573:93;23662:3;23653:6;23573:93;:::i;:::-;23566:100;;23683:3;23676:10;;23421:271;;;;:::o"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "2567400",
"executionCost": "infinite",
"totalCost": "infinite"
},
"external": {
"UPGRADE_INTERFACE_VERSION()": "infinite",
"approve(address,uint256)": "infinite",
"balanceOf(address)": "infinite",
"getApproved(uint256)": "infinite",
"initialize(address)": "infinite",
"isApprovedForAll(address,address)": "infinite",
"mintable()": "2530",
"myMetamaskAddress()": "2603",
"name()": "infinite",
"owner()": "2634",
"ownerOf(uint256)": "infinite",
"proxiableUUID()": "infinite",
"renounceOwnership()": "infinite",
"safeMint(address,uint256)": "infinite",
"safeTransferFrom(address,address,uint256)": "infinite",
"safeTransferFrom(address,address,uint256,bytes)": "infinite",
"setApprovalForAll(address,bool)": "infinite",
"setMintable(bool)": "infinite",
"supportsInterface(bytes4)": "787",
"symbol()": "infinite",
"tokenURI(uint256)": "infinite",
"transferFrom(address,address,uint256)": "infinite",
"transferOwnership(address)": "infinite",
"upgradeToAndCall(address,bytes)": "infinite"
},
"internal": {
"_authorizeUpgrade(address)": "infinite"
}
},
"methodIdentifiers": {
"UPGRADE_INTERFACE_VERSION()": "ad3cb1cc",
"approve(address,uint256)": "095ea7b3",
"balanceOf(address)": "70a08231",
"getApproved(uint256)": "081812fc",
"initialize(address)": "c4d66de8",
"isApprovedForAll(address,address)": "e985e9c5",
"mintable()": "4bf365df",
"myMetamaskAddress()": "4af104b4",
"name()": "06fdde03",
"owner()": "8da5cb5b",
"ownerOf(uint256)": "6352211e",
"proxiableUUID()": "52d1902d",
"renounceOwnership()": "715018a6",
"safeMint(address,uint256)": "a1448194",
"safeTransferFrom(address,address,uint256)": "42842e0e",
"safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
"setApprovalForAll(address,bool)": "a22cb465",
"setMintable(bool)": "285d70d4",
"supportsInterface(bytes4)": "01ffc9a7",
"symbol()": "95d89b41",
"tokenURI(uint256)": "c87b56dd",
"transferFrom(address,address,uint256)": "23b872dd",
"transferOwnership(address)": "f2fde38b",
"upgradeToAndCall(address,bytes)": "4f1ef286"
}
},
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "address",
"name": "target",
"type": "address"
}
],
"name": "AddressEmptyCode",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "ERC1967InvalidImplementation",
"type": "error"
},
{
"inputs": [],
"name": "ERC1967NonPayable",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "ERC721IncorrectOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ERC721InsufficientApproval",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "approver",
"type": "address"
}
],
"name": "ERC721InvalidApprover",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "ERC721InvalidOperator",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "ERC721InvalidOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "ERC721InvalidReceiver",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ERC721InvalidSender",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ERC721NonexistentToken",
"type": "error"
},
{
"inputs": [],
"name": "FailedInnerCall",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "OwnableInvalidOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "OwnableUnauthorizedAccount",
"type": "error"
},
{
"inputs": [],
"name": "UUPSUnauthorizedCallContext",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "slot",
"type": "bytes32"
}
],
"name": "UUPSUnsupportedProxiableUUID",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "approved",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "ApprovalForAll",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"type": "event"
},
{
"inputs": [],
"name": "UPGRADE_INTERFACE_VERSION",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "approve",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getApproved",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "initialOwner",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "mintable",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "myMetamaskAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ownerOf",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "proxiableUUID",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "safeMint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bool",
"name": "_mintable",
"type": "bool"
}
],
"name": "setMintable",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "tokenURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "upgradeToAndCall",
"outputs": [],
"stateMutability": "payable",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.8.22+commit.4fc1097e"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "address",
"name": "target",
"type": "address"
}
],
"name": "AddressEmptyCode",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "ERC1967InvalidImplementation",
"type": "error"
},
{
"inputs": [],
"name": "ERC1967NonPayable",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "ERC721IncorrectOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ERC721InsufficientApproval",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "approver",
"type": "address"
}
],
"name": "ERC721InvalidApprover",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "ERC721InvalidOperator",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "ERC721InvalidOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "ERC721InvalidReceiver",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ERC721InvalidSender",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ERC721NonexistentToken",
"type": "error"
},
{
"inputs": [],
"name": "FailedInnerCall",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "OwnableInvalidOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "OwnableUnauthorizedAccount",
"type": "error"
},
{
"inputs": [],
"name": "UUPSUnauthorizedCallContext",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "slot",
"type": "bytes32"
}
],
"name": "UUPSUnsupportedProxiableUUID",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "approved",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "ApprovalForAll",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"type": "event"
},
{
"inputs": [],
"name": "UPGRADE_INTERFACE_VERSION",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "approve",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getApproved",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "initialOwner",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "mintable",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "myMetamaskAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ownerOf",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "proxiableUUID",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "safeMint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bool",
"name": "_mintable",
"type": "bool"
}
],
"name": "setMintable",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "tokenURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "upgradeToAndCall",
"outputs": [],
"stateMutability": "payable",
"type": "function"
}
],
"devdoc": {
"errors": {
"AddressEmptyCode(address)": [
{
"details": "There's no code at `target` (it is not a contract)."
}
],
"ERC1967InvalidImplementation(address)": [
{
"details": "The `implementation` of the proxy is invalid."
}
],
"ERC1967NonPayable()": [
{
"details": "An upgrade function sees `msg.value > 0` that may be lost."
}
],
"ERC721IncorrectOwner(address,uint256,address)": [
{
"details": "Indicates an error related to the ownership over a particular token. Used in transfers.",
"params": {
"owner": "Address of the current owner of a token.",
"sender": "Address whose tokens are being transferred.",
"tokenId": "Identifier number of a token."
}
}
],
"ERC721InsufficientApproval(address,uint256)": [
{
"details": "Indicates a failure with the `operator`’s approval. Used in transfers.",
"params": {
"operator": "Address that may be allowed to operate on tokens without being their owner.",
"tokenId": "Identifier number of a token."
}
}
],
"ERC721InvalidApprover(address)": [
{
"details": "Indicates a failure with the `approver` of a token to be approved. Used in approvals.",
"params": {
"approver": "Address initiating an approval operation."
}
}
],
"ERC721InvalidOperator(address)": [
{
"details": "Indicates a failure with the `operator` to be approved. Used in approvals.",
"params": {
"operator": "Address that may be allowed to operate on tokens without being their owner."
}
}
],
"ERC721InvalidOwner(address)": [
{
"details": "Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. Used in balance queries.",
"params": {
"owner": "Address of the current owner of a token."
}
}
],
"ERC721InvalidReceiver(address)": [
{
"details": "Indicates a failure with the token `receiver`. Used in transfers.",
"params": {
"receiver": "Address to which tokens are being transferred."
}
}
],
"ERC721InvalidSender(address)": [
{
"details": "Indicates a failure with the token `sender`. Used in transfers.",
"params": {
"sender": "Address whose tokens are being transferred."
}
}
],
"ERC721NonexistentToken(uint256)": [
{
"details": "Indicates a `tokenId` whose `owner` is the zero address.",
"params": {
"tokenId": "Identifier number of a token."
}
}
],
"FailedInnerCall()": [
{
"details": "A call to an address target failed. The target may have reverted."
}
],
"InvalidInitialization()": [
{
"details": "The contract is already initialized."
}
],
"NotInitializing()": [
{
"details": "The contract is not initializing."
}
],
"OwnableInvalidOwner(address)": [
{
"details": "The owner is not a valid owner account. (eg. `address(0)`)"
}
],
"OwnableUnauthorizedAccount(address)": [
{
"details": "The caller account is not authorized to perform an operation."
}
],
"UUPSUnauthorizedCallContext()": [
{
"details": "The call is from an unauthorized context."
}
],
"UUPSUnsupportedProxiableUUID(bytes32)": [
{
"details": "The storage `slot` is unsupported as a UUID."
}
]
},
"events": {
"Approval(address,address,uint256)": {
"details": "Emitted when `owner` enables `approved` to manage the `tokenId` token."
},
"ApprovalForAll(address,address,bool)": {
"details": "Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."
},
"Initialized(uint64)": {
"details": "Triggered when the contract has been initialized or reinitialized."
},
"Transfer(address,address,uint256)": {
"details": "Emitted when `tokenId` token is transferred from `from` to `to`."
},
"Upgraded(address)": {
"details": "Emitted when the implementation is upgraded."
}
},
"kind": "dev",
"methods": {
"approve(address,uint256)": {
"details": "See {IERC721-approve}."
},
"balanceOf(address)": {
"details": "See {IERC721-balanceOf}."
},
"constructor": {
"custom:oz-upgrades-unsafe-allow": "constructor"
},
"getApproved(uint256)": {
"details": "See {IERC721-getApproved}."
},
"isApprovedForAll(address,address)": {
"details": "See {IERC721-isApprovedForAll}."
},
"name()": {
"details": "See {IERC721Metadata-name}."
},
"owner()": {
"details": "Returns the address of the current owner."
},
"ownerOf(uint256)": {
"details": "See {IERC721-ownerOf}."
},
"proxiableUUID()": {
"details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."
},
"renounceOwnership()": {
"details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."
},
"safeTransferFrom(address,address,uint256)": {
"details": "See {IERC721-safeTransferFrom}."
},
"safeTransferFrom(address,address,uint256,bytes)": {
"details": "See {IERC721-safeTransferFrom}."
},
"setApprovalForAll(address,bool)": {
"details": "See {IERC721-setApprovalForAll}."
},
"supportsInterface(bytes4)": {
"details": "See {IERC165-supportsInterface}."
},
"symbol()": {
"details": "See {IERC721Metadata-symbol}."
},
"tokenURI(uint256)": {
"details": "See {IERC721Metadata-tokenURI}."
},
"transferFrom(address,address,uint256)": {
"details": "See {IERC721-transferFrom}."
},
"transferOwnership(address)": {
"details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
},
"upgradeToAndCall(address,bytes)": {
"custom:oz-upgrades-unsafe-allow-reachable": "delegatecall",
"details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."
}
},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"contracts/MyToken.sol": "MyToken"
},
"evmVersion": "shanghai",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": {
"keccak256": "0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a",
"license": "MIT",
"urls": [
"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6",
"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"
]
},
"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol": {
"keccak256": "0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b",
"license": "MIT",
"urls": [
"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609",
"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"
]
},
"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol": {
"keccak256": "0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53",
"license": "MIT",
"urls": [
"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930",
"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj"
]
},
"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol": {
"keccak256": "0x48efca78ce4e1a9f74d3ca8539bb53d04b116e507c10cd9e0df6105b8a6ae420",
"license": "MIT",
"urls": [
"bzz-raw://1d9f5e03898857a187d99bd0766daf725abe87f454db82ac6286544d8cb4532f",
"dweb:/ipfs/QmXFNXaNuxvGCLNL9xAFbvEgRmXDuxw4Ukf9tddiAHDq59"
]
},
"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": {
"keccak256": "0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397",
"license": "MIT",
"urls": [
"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9",
"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"
]
},
"@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol": {
"keccak256": "0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8",
"license": "MIT",
"urls": [
"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45",
"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh"
]
},
"@openzeppelin/contracts/interfaces/draft-IERC1822.sol": {
"keccak256": "0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c",
"license": "MIT",
"urls": [
"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9",
"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v"
]
},
"@openzeppelin/contracts/interfaces/draft-IERC6093.sol": {
"keccak256": "0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7",
"license": "MIT",
"urls": [
"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f",
"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"
]
},
"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol": {
"keccak256": "0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65",
"license": "MIT",
"urls": [
"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a",
"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE"
]
},
"@openzeppelin/contracts/proxy/beacon/IBeacon.sol": {
"keccak256": "0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c",
"license": "MIT",
"urls": [
"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa",
"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"
]
},
"@openzeppelin/contracts/token/ERC721/IERC721.sol": {
"keccak256": "0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4",
"license": "MIT",
"urls": [
"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7",
"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n"
]
},
"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": {
"keccak256": "0x7f7a26306c79a65fb8b3b6c757cd74660c532cd8a02e165488e30027dd34ca49",
"license": "MIT",
"urls": [
"bzz-raw://d01e0b2b837ee2f628545e54d8715b49c7ef2befd08356c2e7f6c50dde8a1c22",
"dweb:/ipfs/QmWBAn6y2D1xgftci97Z3qR9tQnkvwQpYwFwkTvDMvqU4i"
]
},
"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": {
"keccak256": "0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1",
"license": "MIT",
"urls": [
"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02",
"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE"
]
},
"@openzeppelin/contracts/utils/Address.sol": {
"keccak256": "0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721",
"license": "MIT",
"urls": [
"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245",
"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"
]
},
"@openzeppelin/contracts/utils/StorageSlot.sol": {
"keccak256": "0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418",
"license": "MIT",
"urls": [
"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c",
"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"
]
},
"@openzeppelin/contracts/utils/Strings.sol": {
"keccak256": "0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792",
"license": "MIT",
"urls": [
"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453",
"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i"
]
},
"@openzeppelin/contracts/utils/introspection/IERC165.sol": {
"keccak256": "0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b",
"license": "MIT",
"urls": [
"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df",
"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"
]
},
"@openzeppelin/contracts/utils/math/Math.sol": {
"keccak256": "0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d",
"license": "MIT",
"urls": [
"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875",
"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"
]
},
"@openzeppelin/contracts/utils/math/SignedMath.sol": {
"keccak256": "0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72",
"license": "MIT",
"urls": [
"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc",
"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT"
]
},
"contracts/MyToken.sol": {
"keccak256": "0xaac5d5366bc6ea5effd8b31e85f3bb28c3f5e180b35caa4bd0f8bec2e4e8d599",
"license": "MIT",
"urls": [
"bzz-raw://38e84513c207eeffe54b9f918964f9a362deb7cf8e49a0171f153152a4e987b6",
"dweb:/ipfs/QmanpbVFHFLRf7FgQPpQYmDvgb3FXKVrrfsc3q1w4bDi4c"
]
}
},
"version": 1
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
contract MyToken is Initializable, ERC721Upgradeable, OwnableUpgradeable, UUPSUpgradeable {
bool public mintable; // Mintable özelliği
address public myMetamaskAddress;
/// @custom:oz-upgrades-unsafe-allow constructor
constructor() {
_disableInitializers();
}
function initialize(address initialOwner) initializer public {
__ERC721_init("MyToken", "MTK");
__Ownable_init(initialOwner);
__UUPSUpgradeable_init();
mintable = true; // Mintable özelliğini etkinleştirme
myMetamaskAddress = 0x10964Bf243F3318BfBAa87060cdd5A7fE7A54601; // Metamask cüzdan adresini atama
}
function safeMint(address to, uint256 tokenId) public {
require(mintable, "Minting is not enabled");
_safeMint(to, tokenId);
}
function setMintable(bool _mintable) public onlyOwner {
mintable = _mintable;
}
function _authorizeUpgrade(address newImplementation)
internal
onlyOwner
override
{}
}
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