{
  "id": "95fd87454fecdd18cf8ec7bb55c9e0c0",
  "_format": "hh-sol-build-info-1-oz-slim1",
  "solcVersion": "0.8.20",
  "solcLongVersion": "0.8.20+commit.a1b79de6",
  "input": {
    "language": "Solidity",
    "sources": {
      "@openzeppelin/contracts/access/Ownable.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 {Context} from \"../utils/Context.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 Ownable is Context {\n    address private _owner;\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    constructor(address initialOwner) {\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        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        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n"
      },
      "@openzeppelin/contracts/interfaces/IERC1967.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1967.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\n */\ninterface IERC1967 {\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"
      },
      "@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.20;\n\nimport {IBeacon} from \"./IBeacon.sol\";\nimport {Proxy} from \"../Proxy.sol\";\nimport {ERC1967Utils} from \"../ERC1967/ERC1967Utils.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from an {UpgradeableBeacon}.\n *\n * The beacon address can only be set once during construction, and cannot be changed afterwards. It is stored in an\n * immutable variable to avoid unnecessary storage reads, and also in the beacon storage slot specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] so that it can be accessed externally.\n *\n * CAUTION: Since the beacon address can never be changed, you must ensure that you either control the beacon, or trust\n * the beacon to not upgrade the implementation maliciously.\n *\n * IMPORTANT: Do not use the implementation logic to modify the beacon storage slot. Doing so would leave the proxy in\n * an inconsistent state where the beacon storage slot does not match the beacon address.\n */\ncontract BeaconProxy is Proxy {\n    // An immutable address for the beacon to avoid unnecessary SLOADs before each delegate call.\n    address private immutable _beacon;\n\n    /**\n     * @dev Initializes the proxy with `beacon`.\n     *\n     * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n     * will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity\n     * constructor.\n     *\n     * Requirements:\n     *\n     * - `beacon` must be a contract with the interface {IBeacon}.\n     * - If `data` is empty, `msg.value` must be zero.\n     */\n    constructor(address beacon, bytes memory data) payable {\n        ERC1967Utils.upgradeBeaconToAndCall(beacon, data);\n        _beacon = beacon;\n    }\n\n    /**\n     * @dev Returns the current implementation address of the associated beacon.\n     */\n    function _implementation() internal view virtual override returns (address) {\n        return IBeacon(_getBeacon()).implementation();\n    }\n\n    /**\n     * @dev Returns the beacon.\n     */\n    function _getBeacon() internal view virtual returns (address) {\n        return _beacon;\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"
      },
      "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.20;\n\nimport {IBeacon} from \"./IBeacon.sol\";\nimport {Ownable} from \"../../access/Ownable.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n    address private _implementation;\n\n    /**\n     * @dev The `implementation` of the beacon is invalid.\n     */\n    error BeaconInvalidImplementation(address implementation);\n\n    /**\n     * @dev Emitted when the implementation returned by the beacon is changed.\n     */\n    event Upgraded(address indexed implementation);\n\n    /**\n     * @dev Sets the address of the initial implementation, and the initial owner who can upgrade the beacon.\n     */\n    constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n        _setImplementation(implementation_);\n    }\n\n    /**\n     * @dev Returns the current implementation address.\n     */\n    function implementation() public view virtual returns (address) {\n        return _implementation;\n    }\n\n    /**\n     * @dev Upgrades the beacon to a new implementation.\n     *\n     * Emits an {Upgraded} event.\n     *\n     * Requirements:\n     *\n     * - msg.sender must be the owner of the contract.\n     * - `newImplementation` must be a contract.\n     */\n    function upgradeTo(address newImplementation) public virtual onlyOwner {\n        _setImplementation(newImplementation);\n    }\n\n    /**\n     * @dev Sets the implementation contract address for this beacon\n     *\n     * Requirements:\n     *\n     * - `newImplementation` must be a contract.\n     */\n    function _setImplementation(address newImplementation) private {\n        if (newImplementation.code.length == 0) {\n            revert BeaconInvalidImplementation(newImplementation);\n        }\n        _implementation = newImplementation;\n        emit Upgraded(newImplementation);\n    }\n}\n"
      },
      "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.20;\n\nimport {Proxy} from \"../Proxy.sol\";\nimport {ERC1967Utils} from \"./ERC1967Utils.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy {\n    /**\n     * @dev Initializes the upgradeable proxy with an initial implementation specified by `implementation`.\n     *\n     * If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an\n     * encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\n     *\n     * Requirements:\n     *\n     * - If `data` is empty, `msg.value` must be zero.\n     */\n    constructor(address implementation, bytes memory _data) payable {\n        ERC1967Utils.upgradeToAndCall(implementation, _data);\n    }\n\n    /**\n     * @dev Returns the current implementation address.\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     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n     */\n    function _implementation() internal view virtual override returns (address) {\n        return ERC1967Utils.getImplementation();\n    }\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/proxy/Proxy.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n    /**\n     * @dev Delegates the current call to `implementation`.\n     *\n     * This function does not return to its internal call site, it will return directly to the external caller.\n     */\n    function _delegate(address implementation) internal virtual {\n        assembly {\n            // Copy msg.data. We take full control of memory in this inline assembly\n            // block because it will not return to Solidity code. We overwrite the\n            // Solidity scratch pad at memory position 0.\n            calldatacopy(0, 0, calldatasize())\n\n            // Call the implementation.\n            // out and outsize are 0 because we don't know the size yet.\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n            // Copy the returned data.\n            returndatacopy(0, 0, returndatasize())\n\n            switch result\n            // delegatecall returns 0 on error.\n            case 0 {\n                revert(0, returndatasize())\n            }\n            default {\n                return(0, returndatasize())\n            }\n        }\n    }\n\n    /**\n     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback\n     * function and {_fallback} should delegate.\n     */\n    function _implementation() internal view virtual returns (address);\n\n    /**\n     * @dev Delegates the current call to the address returned by `_implementation()`.\n     *\n     * This function does not return to its internal call site, it will return directly to the external caller.\n     */\n    function _fallback() internal virtual {\n        _delegate(_implementation());\n    }\n\n    /**\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n     * function in the contract matches the call data.\n     */\n    fallback() external payable virtual {\n        _fallback();\n    }\n}\n"
      },
      "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.20;\n\nimport {ITransparentUpgradeableProxy} from \"./TransparentUpgradeableProxy.sol\";\nimport {Ownable} from \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n    /**\n     * @dev The version of the upgrade interface of the contract. If this getter is missing, both `upgrade(address)`\n     * and `upgradeAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called,\n     * while `upgradeAndCall` will invoke the `receive` function if the second argument is the empty byte string.\n     * If the getter returns `\"5.0.0\"`, only `upgradeAndCall(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 Sets the initial owner who can perform upgrades.\n     */\n    constructor(address initialOwner) Ownable(initialOwner) {}\n\n    /**\n     * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation.\n     * See {TransparentUpgradeableProxy-_dispatchUpgradeToAndCall}.\n     *\n     * Requirements:\n     *\n     * - This contract must be the admin of `proxy`.\n     * - If `data` is empty, `msg.value` must be zero.\n     */\n    function upgradeAndCall(\n        ITransparentUpgradeableProxy proxy,\n        address implementation,\n        bytes memory data\n    ) public payable virtual onlyOwner {\n        proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n    }\n}\n"
      },
      "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.20;\n\nimport {ERC1967Utils} from \"../ERC1967/ERC1967Utils.sol\";\nimport {ERC1967Proxy} from \"../ERC1967/ERC1967Proxy.sol\";\nimport {IERC1967} from \"../../interfaces/IERC1967.sol\";\nimport {ProxyAdmin} from \"./ProxyAdmin.sol\";\n\n/**\n * @dev Interface for {TransparentUpgradeableProxy}. In order to implement transparency, {TransparentUpgradeableProxy}\n * does not implement this interface directly, and its upgradeability mechanism is implemented by an internal dispatch\n * mechanism. The compiler is unaware that these functions are implemented by {TransparentUpgradeableProxy} and will not\n * include them in the ABI so this interface must be used to interact with it.\n */\ninterface ITransparentUpgradeableProxy is IERC1967 {\n    function upgradeToAndCall(address, bytes calldata) external payable;\n}\n\n/**\n * @dev This contract implements a proxy that is upgradeable through an associated {ProxyAdmin} instance.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches the {ITransparentUpgradeableProxy-upgradeToAndCall} function exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can call the `upgradeToAndCall` function but any other call won't be forwarded to\n * the implementation. If the admin tries to call a function on the implementation it will fail with an error indicating\n * the proxy admin cannot fallback to the target implementation.\n *\n * These properties mean that the admin account can only be used for upgrading the proxy, so it's best if it's a\n * dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to\n * call a function from the proxy implementation. For this reason, the proxy deploys an instance of {ProxyAdmin} and\n * allows upgrades only if they come through it. You should think of the `ProxyAdmin` instance as the administrative\n * interface of the proxy, including the ability to change who can trigger upgrades by transferring ownership.\n *\n * NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not\n * inherit from that interface, and instead `upgradeToAndCall` is implicitly implemented using a custom dispatch\n * mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to\n * fully implement transparency without decoding reverts caused by selector clashes between the proxy and the\n * implementation.\n *\n * NOTE: This proxy does not inherit from {Context} deliberately. The {ProxyAdmin} of this contract won't send a\n * meta-transaction in any way, and any other meta-transaction setup should be made in the implementation contract.\n *\n * IMPORTANT: This contract avoids unnecessary storage reads by setting the admin only during construction as an\n * immutable variable, preventing any changes thereafter. However, the admin slot defined in ERC-1967 can still be\n * overwritten by the implementation logic pointed to by this proxy. In such cases, the contract may end up in an\n * undesirable state where the admin slot is different from the actual admin.\n *\n * WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the\n * compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new\n * function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This\n * could render the `upgradeToAndCall` function inaccessible, preventing upgradeability and compromising transparency.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n    // An immutable address for the admin to avoid unnecessary SLOADs before each call\n    // at the expense of removing the ability to change the admin once it's set.\n    // This is acceptable if the admin is always a ProxyAdmin instance or similar contract\n    // with its own ability to transfer the permissions to another account.\n    address private immutable _admin;\n\n    /**\n     * @dev The proxy caller is the current admin, and can't fallback to the proxy target.\n     */\n    error ProxyDeniedAdminAccess();\n\n    /**\n     * @dev Initializes an upgradeable proxy managed by an instance of a {ProxyAdmin} with an `initialOwner`,\n     * backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in\n     * {ERC1967Proxy-constructor}.\n     */\n    constructor(address _logic, address initialOwner, bytes memory _data) payable ERC1967Proxy(_logic, _data) {\n        _admin = address(new ProxyAdmin(initialOwner));\n        // Set the storage value and emit an event for ERC-1967 compatibility\n        ERC1967Utils.changeAdmin(_proxyAdmin());\n    }\n\n    /**\n     * @dev Returns the admin of this proxy.\n     */\n    function _proxyAdmin() internal virtual returns (address) {\n        return _admin;\n    }\n\n    /**\n     * @dev If caller is the admin process the call internally, otherwise transparently fallback to the proxy behavior.\n     */\n    function _fallback() internal virtual override {\n        if (msg.sender == _proxyAdmin()) {\n            if (msg.sig != ITransparentUpgradeableProxy.upgradeToAndCall.selector) {\n                revert ProxyDeniedAdminAccess();\n            } else {\n                _dispatchUpgradeToAndCall();\n            }\n        } else {\n            super._fallback();\n        }\n    }\n\n    /**\n     * @dev Upgrade the implementation of the proxy. See {ERC1967Utils-upgradeToAndCall}.\n     *\n     * Requirements:\n     *\n     * - If `data` is empty, `msg.value` must be zero.\n     */\n    function _dispatchUpgradeToAndCall() private {\n        (address newImplementation, bytes memory data) = abi.decode(msg.data[4:], (address, bytes));\n        ERC1967Utils.upgradeToAndCall(newImplementation, data);\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/utils/Context.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\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 Context {\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/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"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "storageLayout",
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers",
            "metadata"
          ],
          "": [
            "ast"
          ]
        }
      },
      "evmVersion": "london"
    }
  },
  "output": {
    "contracts": {
      "@openzeppelin/contracts/access/Ownable.sol": {
        "Ownable": {
          "abi": [
            {
              "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": 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"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "owner()": "8da5cb5b",
              "renounceOwnership()": "715018a6",
              "transferOwnership(address)": "f2fde38b"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":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\":{\"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.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the address provided by the deployer as the initial owner.\"},\"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/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/interfaces/IERC1967.sol": {
        "IERC1967": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "previousAdmin",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "newAdmin",
                  "type": "address"
                }
              ],
              "name": "AdminChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "beacon",
                  "type": "address"
                }
              ],
              "name": "BeaconUpgraded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                }
              ],
              "name": "Upgraded",
              "type": "event"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC1967.sol\":\"IERC1967\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol": {
        "ERC1967Proxy": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "_data",
                  "type": "bytes"
                }
              ],
              "stateMutability": "payable",
              "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": [],
              "name": "FailedInnerCall",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                }
              ],
              "name": "Upgraded",
              "type": "event"
            },
            {
              "stateMutability": "payable",
              "type": "fallback"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_193": {
                  "entryPoint": null,
                  "id": 193,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_checkNonPayable_508": {
                  "entryPoint": 389,
                  "id": 508,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_revert_1136": {
                  "entryPoint": 517,
                  "id": 1136,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_setImplementation_294": {
                  "entryPoint": 146,
                  "id": 294,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@functionDelegateCall_1056": {
                  "entryPoint": 270,
                  "id": 1056,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@getAddressSlot_1199": {
                  "entryPoint": null,
                  "id": 1199,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@upgradeToAndCall_328": {
                  "entryPoint": 51,
                  "id": 328,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@verifyCallResultFromTarget_1096": {
                  "entryPoint": 422,
                  "id": 1096,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory": {
                  "entryPoint": 616,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 822,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "copy_memory_to_memory_with_cleanup": {
                  "entryPoint": 580,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "panic_error_0x41": {
                  "entryPoint": 558,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1966:13",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:13",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "46:95:13",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "63:1:13",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "70:3:13",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "75:10:13",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "66:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "66:20:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "56:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "56:31:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "56:31:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "103:1:13",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "106:4:13",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "96:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "96:15:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "96:15:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "127:1:13",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "130:4:13",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "120:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "120:15:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "120:15:13"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "14:127:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "212:184:13",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "222:10:13",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "231:1:13",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "226:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "291:63:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "316:3:13"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "321:1:13"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "312:3:13"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "312:11:13"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "335:3:13"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "340:1:13"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "331:3:13"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "331:11:13"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "325:5:13"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "325:18:13"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "305:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "305:39:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "305:39:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "252:1:13"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "255:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "249:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "249:13:13"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "263:19:13",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "265:15:13",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "274:1:13"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "277:2:13",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "270:3:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "270:10:13"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "265:1:13"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "245:3:13",
                                "statements": []
                              },
                              "src": "241:113:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "374:3:13"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "379:6:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "370:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "370:16:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "388:1:13",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "363:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "363:27:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "363:27:13"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory_with_cleanup",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "190:3:13",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "195:3:13",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "200:6:13",
                            "type": ""
                          }
                        ],
                        "src": "146:250:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "508:956:13",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "554:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "563:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "566:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "556:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "556:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "556:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "529:7:13"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "538:9:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "525:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "525:23:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "550:2:13",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "521:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "521:32:13"
                              },
                              "nodeType": "YulIf",
                              "src": "518:52:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "579:29:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "598:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "592:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "592:16:13"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "583:5:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "671:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "680:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "683:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "673:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "673:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "673:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "630:5:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "641:5:13"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "656:3:13",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "661:1:13",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "652:3:13"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "652:11:13"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "665:1:13",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "648:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "648:19:13"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "637:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "637:31:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "627:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "627:42:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "620:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "620:50:13"
                              },
                              "nodeType": "YulIf",
                              "src": "617:70:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "696:15:13",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "706:5:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "696:6:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "720:39:13",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "744:9:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "755:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "740:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "740:18:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "734:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "734:25:13"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "724:6:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "768:28:13",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "786:2:13",
                                        "type": "",
                                        "value": "64"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "790:1:13",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "782:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "782:10:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "794:1:13",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "778:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "778:18:13"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "772:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "823:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "832:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "835:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "825:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "825:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "825:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "811:6:13"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "819:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "808:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "808:14:13"
                              },
                              "nodeType": "YulIf",
                              "src": "805:34:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "848:32:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "862:9:13"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "873:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "858:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "858:22:13"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "852:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "928:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "937:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "940:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "930:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "930:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "930:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "907:2:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "911:4:13",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "903:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "903:13:13"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "918:7:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "899:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "899:27:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "892:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "892:35:13"
                              },
                              "nodeType": "YulIf",
                              "src": "889:55:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "953:19:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "969:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "963:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "963:9:13"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "957:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "995:22:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "997:16:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "997:18:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "997:18:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "987:2:13"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "991:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "984:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "984:10:13"
                              },
                              "nodeType": "YulIf",
                              "src": "981:36:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1026:17:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1040:2:13",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "1036:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1036:7:13"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "1030:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1052:23:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1072:2:13",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1066:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1066:9:13"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1056:6:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1084:71:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1106:6:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "_3",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1130:2:13"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "1134:4:13",
                                                    "type": "",
                                                    "value": "0x1f"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1126:3:13"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1126:13:13"
                                              },
                                              {
                                                "name": "_4",
                                                "nodeType": "YulIdentifier",
                                                "src": "1141:2:13"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "1122:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1122:22:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1146:2:13",
                                            "type": "",
                                            "value": "63"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1118:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1118:31:13"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "1151:2:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1114:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1114:40:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1102:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1102:53:13"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1088:10:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1214:22:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1216:16:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1216:18:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1216:18:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1173:10:13"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1185:2:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1170:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1170:18:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1193:10:13"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1205:6:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1190:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1190:22:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "1167:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1167:46:13"
                              },
                              "nodeType": "YulIf",
                              "src": "1164:72:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1252:2:13",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1256:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1245:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1245:22:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1245:22:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1283:6:13"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1291:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1276:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1276:18:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1276:18:13"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1340:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1349:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1352:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1342:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1342:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1342:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "1317:2:13"
                                          },
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "1321:2:13"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1313:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1313:11:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1326:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1309:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1309:20:13"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1331:7:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1306:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1306:33:13"
                              },
                              "nodeType": "YulIf",
                              "src": "1303:53:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "1404:2:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1408:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1400:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1400:11:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1417:6:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1425:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1413:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1413:15:13"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1430:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory_with_cleanup",
                                  "nodeType": "YulIdentifier",
                                  "src": "1365:34:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1365:68:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1365:68:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1442:16:13",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "1452:6:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1442:6:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "466:9:13",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "477:7:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "489:6:13",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "497:6:13",
                            "type": ""
                          }
                        ],
                        "src": "401:1063:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1570:102:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1580:26:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1592:9:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1603:2:13",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1588:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1588:18:13"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1580:4:13"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1622:9:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1637:6:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1653:3:13",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1658:1:13",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1649:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1649:11:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1662:1:13",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1645:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1645:19:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1633:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1633:32:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1615:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1615:51:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1615:51:13"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1539:9:13",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1550:6:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1561:4:13",
                            "type": ""
                          }
                        ],
                        "src": "1469:203:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1814:150:13",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1824:27:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1844:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1838:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1838:13:13"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "1828:6:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1899:6:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1907:4:13",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1895:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1895:17:13"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "1914:3:13"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1919:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory_with_cleanup",
                                  "nodeType": "YulIdentifier",
                                  "src": "1860:34:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1860:66:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1860:66:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1935:23:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "1946:3:13"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1951:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1942:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1942:16:13"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "1935:3:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "1790:3:13",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1795:6:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "1806:3:13",
                            "type": ""
                          }
                        ],
                        "src": "1677:287:13"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n        let offset := mload(add(headStart, 32))\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory_with_cleanup(add(_2, 32), add(memPtr, 32), _3)\n        value1 := memPtr\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n}",
                  "id": 13,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "608060405260405161040a38038061040a83398101604081905261002291610268565b61002c8282610033565b5050610352565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561008657610081828261010e565b505050565b61008e610185565b5050565b806001600160a01b03163b6000036100cd57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012b9190610336565b600060405180830381855af49150503d8060008114610166576040519150601f19603f3d011682016040523d82523d6000602084013e61016b565b606091505b50909250905061017c8583836101a6565b95945050505050565b34156101a45760405163b398979f60e01b815260040160405180910390fd5b565b6060826101bb576101b682610205565b6101fe565b81511580156101d257506001600160a01b0384163b155b156101fb57604051639996b31560e01b81526001600160a01b03851660048201526024016100c4565b50805b9392505050565b8051156102155780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b8381101561025f578181015183820152602001610247565b50506000910152565b6000806040838503121561027b57600080fd5b82516001600160a01b038116811461029257600080fd5b60208401519092506001600160401b03808211156102af57600080fd5b818501915085601f8301126102c357600080fd5b8151818111156102d5576102d561022e565b604051601f8201601f19908116603f011681019083821181831017156102fd576102fd61022e565b8160405282815288602084870101111561031657600080fd5b610327836020830160208801610244565b80955050505050509250929050565b60008251610348818460208701610244565b9190910192915050565b60aa806103606000396000f3fe6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea2646970667358221220437786fe300317260c463a71110fde5dd7b076b3f1f258929819a87016882bbf64736f6c63430008140033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x40A CODESIZE SUB DUP1 PUSH2 0x40A DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x22 SWAP2 PUSH2 0x268 JUMP JUMPDEST PUSH2 0x2C DUP3 DUP3 PUSH2 0x33 JUMP JUMPDEST POP POP PUSH2 0x352 JUMP JUMPDEST PUSH2 0x3C DUP3 PUSH2 0x92 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 DUP1 MLOAD ISZERO PUSH2 0x86 JUMPI PUSH2 0x81 DUP3 DUP3 PUSH2 0x10E JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x8E PUSH2 0x185 JUMP JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE PUSH1 0x0 SUB PUSH2 0xCD JUMPI PUSH1 0x40 MLOAD PUSH4 0x4C9C8CE3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x12B SWAP2 SWAP1 PUSH2 0x336 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x166 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x16B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x17C DUP6 DUP4 DUP4 PUSH2 0x1A6 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0x1A4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB398979F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x60 DUP3 PUSH2 0x1BB JUMPI PUSH2 0x1B6 DUP3 PUSH2 0x205 JUMP JUMPDEST PUSH2 0x1FE JUMP JUMPDEST DUP2 MLOAD ISZERO DUP1 ISZERO PUSH2 0x1D2 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO JUMPDEST ISZERO PUSH2 0x1FB JUMPI PUSH1 0x40 MLOAD PUSH4 0x9996B315 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0xC4 JUMP JUMPDEST POP DUP1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x215 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA12F521 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x25F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x247 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x27B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x292 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x2D5 JUMPI PUSH2 0x2D5 PUSH2 0x22E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x2FD JUMPI PUSH2 0x2FD PUSH2 0x22E JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x316 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x327 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x244 JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x348 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x244 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xAA DUP1 PUSH2 0x360 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xA PUSH1 0xC JUMP JUMPDEST STOP JUMPDEST PUSH1 0x18 PUSH1 0x14 PUSH1 0x1A JUMP JUMPDEST PUSH1 0x51 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4C PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH1 0x6F JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER PUSH24 0x86FE300317260C463A71110FDE5DD7B076B3F1F258929819 0xA8 PUSH17 0x16882BBF64736F6C634300081400330000 ",
              "sourceMap": "599:1116:2:-:0;;;1080:133;;;;;;;;;;;;;;;;;;:::i;:::-;1154:52;1184:14;1200:5;1154:29;:52::i;:::-;1080:133;;599:1116;;2779:335:3;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:3;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;:::-;;2779:335;;:::o;2960:148::-;3079:18;:16;:18::i;:::-;2779:335;;:::o;2186:281::-;2263:17;-1:-1:-1;;;;;2263:29:3;;2296:1;2263:34;2259:119;;2320:47;;-1:-1:-1;;;2320:47:3;;-1:-1:-1;;;;;1633:32:13;;2320:47:3;;;1615:51:13;1588:18;;2320:47:3;;;;;;;;2259:119;1327:66;2387:73;;-1:-1:-1;;;;;;2387:73:3;-1:-1:-1;;;;;2387:73:3;;;;;;;;;;2186:281::o;4106:253:10:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:10;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4213:67:10;;-1:-1:-1;4213:67:10;-1:-1:-1;4297:55:10;4324:6;4213:67;;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:10:o;6598:122:3:-;6648:9;:13;6644:70;;6684:19;;-1:-1:-1;;;6684:19:3;;;;;;;;;;;6644:70;6598:122::o;4625:582:10:-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:10;;;:23;5045:49;5041:119;;;5121:24;;-1:-1:-1;;;5121:24:10;;-1:-1:-1;;;;;1633:32:13;;5121:24:10;;;1615:51:13;1588:18;;5121:24:10;1469:203:13;5041:119:10;-1:-1:-1;5180:10:10;4793:408;4625:582;;;;;:::o;5743:516::-;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:10;;;;;;;;;;;14:127:13;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:250;231:1;241:113;255:6;252:1;249:13;241:113;;;331:11;;;325:18;312:11;;;305:39;277:2;270:10;241:113;;;-1:-1:-1;;388:1:13;370:16;;363:27;146:250::o;401:1063::-;489:6;497;550:2;538:9;529:7;525:23;521:32;518:52;;;566:1;563;556:12;518:52;592:16;;-1:-1:-1;;;;;637:31:13;;627:42;;617:70;;683:1;680;673:12;617:70;755:2;740:18;;734:25;706:5;;-1:-1:-1;;;;;;808:14:13;;;805:34;;;835:1;832;825:12;805:34;873:6;862:9;858:22;848:32;;918:7;911:4;907:2;903:13;899:27;889:55;;940:1;937;930:12;889:55;969:2;963:9;991:2;987;984:10;981:36;;;997:18;;:::i;:::-;1072:2;1066:9;1040:2;1126:13;;-1:-1:-1;;1122:22:13;;;1146:2;1118:31;1114:40;1102:53;;;1170:18;;;1190:22;;;1167:46;1164:72;;;1216:18;;:::i;:::-;1256:10;1252:2;1245:22;1291:2;1283:6;1276:18;1331:7;1326:2;1321;1317;1313:11;1309:20;1306:33;1303:53;;;1352:1;1349;1342:12;1303:53;1365:68;1430:2;1425;1417:6;1413:15;1408:2;1404;1400:11;1365:68;:::i;:::-;1452:6;1442:16;;;;;;;401:1063;;;;;:::o;1677:287::-;1806:3;1844:6;1838:13;1860:66;1919:6;1914:3;1907:4;1899:6;1895:17;1860:66;:::i;:::-;1942:16;;;;;1677:287;-1:-1:-1;;1677:287:13:o;:::-;599:1116:2;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_544": {
                  "entryPoint": null,
                  "id": 544,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_delegate_520": {
                  "entryPoint": 81,
                  "id": 520,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_fallback_536": {
                  "entryPoint": 12,
                  "id": 536,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_implementation_205": {
                  "entryPoint": 26,
                  "id": 205,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@getAddressSlot_1199": {
                  "entryPoint": null,
                  "id": 1199,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@getImplementation_267": {
                  "entryPoint": null,
                  "id": 267,
                  "parameterSlots": 0,
                  "returnSlots": 1
                }
              },
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea2646970667358221220437786fe300317260c463a71110fde5dd7b076b3f1f258929819a87016882bbf64736f6c63430008140033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xA PUSH1 0xC JUMP JUMPDEST STOP JUMPDEST PUSH1 0x18 PUSH1 0x14 PUSH1 0x1A JUMP JUMPDEST PUSH1 0x51 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4C PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH1 0x6F JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER PUSH24 0x86FE300317260C463A71110FDE5DD7B076B3F1F258929819 0xA8 PUSH17 0x16882BBF64736F6C634300081400330000 ",
              "sourceMap": "599:1116:2:-:0;;;2649:11:4;:9;:11::i;:::-;599:1116:2;2323:83:4;2371:28;2381:17;:15;:17::i;:::-;2371:9;:28::i;:::-;2323:83::o;1581:132:2:-;1648:7;1674:32;1327:66:3;2035:53;-1:-1:-1;;;;;2035:53:3;;1957:138;1674:32:2;1667:39;;1581:132;:::o;949:895:4:-;1287:14;1284:1;1281;1268:34;1501:1;1498;1482:14;1479:1;1463:14;1456:5;1443:60;1577:16;1574:1;1571;1556:38;1615:6;1682:66;;;;1797:16;1794:1;1787:27;1682:66;1717:16;1714:1;1707:27"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"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\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"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.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"events\":{\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xbfb6695731de677140fbf76c772ab08c4233a122fb51ac28ac120fc49bbbc4ec\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://68f8fded7cc318efa15874b7c6a983fe17a4a955d72d240353a9a4ca1e1b824c\",\"dweb:/ipfs/QmdcmBL9Qo4Tk3Dby4wFYabGyot9JNeLPxpSXZUgUm92BV\"]},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"@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\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol": {
        "ERC1967Utils": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "admin",
                  "type": "address"
                }
              ],
              "name": "ERC1967InvalidAdmin",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "beacon",
                  "type": "address"
                }
              ],
              "name": "ERC1967InvalidBeacon",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                }
              ],
              "name": "ERC1967InvalidImplementation",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ERC1967NonPayable",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "previousAdmin",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "newAdmin",
                  "type": "address"
                }
              ],
              "name": "AdminChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "beacon",
                  "type": "address"
                }
              ],
              "name": "BeaconUpgraded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                }
              ],
              "name": "Upgraded",
              "type": "event"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ef30f6e571fd50fdf012a98f894aacc3ac407185ccf3d517743eabb0862b9d6b64736f6c63430008140033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEF ADDRESS 0xF6 0xE5 PUSH18 0xFD50FDF012A98F894AACC3AC407185CCF3D5 OR PUSH21 0x3EABB0862B9D6B64736F6C63430008140033000000 ",
              "sourceMap": "449:6273:3:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;449:6273:3;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ef30f6e571fd50fdf012a98f894aacc3ac407185ccf3d517743eabb0862b9d6b64736f6c63430008140033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEF ADDRESS 0xF6 0xE5 PUSH18 0xFD50FDF012A98F894AACC3AC407185CCF3D5 OR PUSH21 0x3EABB0862B9D6B64736F6C63430008140033000000 ",
              "sourceMap": "449:6273:3:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidBeacon\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"This abstract contract provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\",\"errors\":{\"ERC1967InvalidAdmin(address)\":[{\"details\":\"The `admin` of the proxy is invalid.\"}],\"ERC1967InvalidBeacon(address)\":[{\"details\":\"The `beacon` of the proxy is invalid.\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}]},\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1.\"},\"BEACON_SLOT\":{\"details\":\"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.\"},\"IMPLEMENTATION_SLOT\":{\"details\":\"Storage slot with the address of the current implementation. This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":\"ERC1967Utils\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@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/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\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/proxy/Proxy.sol": {
        "Proxy": {
          "abi": [
            {
              "stateMutability": "payable",
              "type": "fallback"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This abstract contract provides a fallback function that delegates all calls to another contract using the EVM instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to be specified by overriding the virtual {_implementation} function. Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a different contract through the {_delegate} function. The success and return data of the delegated call will be returned back to the caller of the proxy.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":\"Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol": {
        "BeaconProxy": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "beacon",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "stateMutability": "payable",
              "type": "constructor"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "target",
                  "type": "address"
                }
              ],
              "name": "AddressEmptyCode",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "beacon",
                  "type": "address"
                }
              ],
              "name": "ERC1967InvalidBeacon",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                }
              ],
              "name": "ERC1967InvalidImplementation",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ERC1967NonPayable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "FailedInnerCall",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "beacon",
                  "type": "address"
                }
              ],
              "name": "BeaconUpgraded",
              "type": "event"
            },
            {
              "stateMutability": "payable",
              "type": "fallback"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_578": {
                  "entryPoint": null,
                  "id": 578,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_checkNonPayable_508": {
                  "entryPoint": 648,
                  "id": 508,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_revert_1136": {
                  "entryPoint": 776,
                  "id": 1136,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_setBeacon_456": {
                  "entryPoint": 254,
                  "id": 456,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@functionDelegateCall_1056": {
                  "entryPoint": 529,
                  "id": 1056,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@getAddressSlot_1199": {
                  "entryPoint": null,
                  "id": 1199,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@upgradeBeaconToAndCall_494": {
                  "entryPoint": 62,
                  "id": 494,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@verifyCallResultFromTarget_1096": {
                  "entryPoint": 681,
                  "id": 1096,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 817,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 1095,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory": {
                  "entryPoint": 903,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 1122,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "copy_memory_to_memory_with_cleanup": {
                  "entryPoint": 867,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "panic_error_0x41": {
                  "entryPoint": 845,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:2279:13",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:13",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:13"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:13"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:13",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:13",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:13"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:13"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:13",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:13"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:13"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:13"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:13",
                            "type": ""
                          }
                        ],
                        "src": "14:177:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "228:95:13",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "245:1:13",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "252:3:13",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "257:10:13",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "248:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "248:20:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "238:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "238:31:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "238:31:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "285:1:13",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "288:4:13",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "278:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "278:15:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "278:15:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "309:1:13",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "312:4:13",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "302:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "302:15:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "302:15:13"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "196:127:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "394:184:13",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "404:10:13",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "413:1:13",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "408:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "473:63:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "498:3:13"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "503:1:13"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "494:3:13"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "494:11:13"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "517:3:13"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "522:1:13"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "513:3:13"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "513:11:13"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "507:5:13"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "507:18:13"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "487:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "487:39:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "487:39:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "434:1:13"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "437:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "431:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "431:13:13"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "445:19:13",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "447:15:13",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "456:1:13"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "459:2:13",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "452:3:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "452:10:13"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "447:1:13"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "427:3:13",
                                "statements": []
                              },
                              "src": "423:113:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "556:3:13"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "561:6:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "552:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "552:16:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "570:1:13",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "545:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "545:27:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "545:27:13"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory_with_cleanup",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "372:3:13",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "377:3:13",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "382:6:13",
                            "type": ""
                          }
                        ],
                        "src": "328:250:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "690:874:13",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "736:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "745:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "748:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "738:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "738:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "738:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "711:7:13"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "720:9:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "707:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "707:23:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "732:2:13",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "703:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "703:32:13"
                              },
                              "nodeType": "YulIf",
                              "src": "700:52:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "761:50:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "801:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "771:29:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "771:40:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "761:6:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "820:39:13",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "844:9:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "855:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "840:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "840:18:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "834:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "834:25:13"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "824:6:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "868:28:13",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "886:2:13",
                                        "type": "",
                                        "value": "64"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "890:1:13",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "882:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "882:10:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "894:1:13",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "878:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "878:18:13"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "872:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "923:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "932:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "935:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "925:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "925:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "925:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "911:6:13"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "919:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "908:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "908:14:13"
                              },
                              "nodeType": "YulIf",
                              "src": "905:34:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "948:32:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "962:9:13"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "973:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "958:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "958:22:13"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "952:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1028:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1037:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1040:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1030:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1030:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1030:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "1007:2:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1011:4:13",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1003:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1003:13:13"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1018:7:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "999:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "999:27:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "992:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "992:35:13"
                              },
                              "nodeType": "YulIf",
                              "src": "989:55:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1053:19:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1069:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1063:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1063:9:13"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "1057:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1095:22:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1097:16:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1097:18:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1097:18:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1087:2:13"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1091:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1084:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1084:10:13"
                              },
                              "nodeType": "YulIf",
                              "src": "1081:36:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1126:17:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1140:2:13",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "1136:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1136:7:13"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "1130:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1152:23:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1172:2:13",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1166:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1166:9:13"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1156:6:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1184:71:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1206:6:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "_3",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1230:2:13"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "1234:4:13",
                                                    "type": "",
                                                    "value": "0x1f"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1226:3:13"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1226:13:13"
                                              },
                                              {
                                                "name": "_4",
                                                "nodeType": "YulIdentifier",
                                                "src": "1241:2:13"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "1222:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1222:22:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1246:2:13",
                                            "type": "",
                                            "value": "63"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1218:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1218:31:13"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "1251:2:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1214:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1214:40:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1202:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1202:53:13"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1188:10:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1314:22:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1316:16:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1316:18:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1316:18:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1273:10:13"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1285:2:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1270:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1270:18:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1293:10:13"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1305:6:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1290:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1290:22:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "1267:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1267:46:13"
                              },
                              "nodeType": "YulIf",
                              "src": "1264:72:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1352:2:13",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1356:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1345:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1345:22:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1345:22:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1383:6:13"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1391:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1376:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1376:18:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1376:18:13"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1440:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1449:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1452:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1442:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1442:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1442:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "1417:2:13"
                                          },
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "1421:2:13"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1413:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1413:11:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1426:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1409:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1409:20:13"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1431:7:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1406:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1406:33:13"
                              },
                              "nodeType": "YulIf",
                              "src": "1403:53:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "1504:2:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1508:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1500:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1500:11:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1517:6:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1525:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1513:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1513:15:13"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1530:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory_with_cleanup",
                                  "nodeType": "YulIdentifier",
                                  "src": "1465:34:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1465:68:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1465:68:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1542:16:13",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "1552:6:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1542:6:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "648:9:13",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "659:7:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "671:6:13",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "679:6:13",
                            "type": ""
                          }
                        ],
                        "src": "583:981:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1650:127:13",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1696:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1705:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1708:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1698:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1698:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1698:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1671:7:13"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1680:9:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1667:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1667:23:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1692:2:13",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1663:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1663:32:13"
                              },
                              "nodeType": "YulIf",
                              "src": "1660:52:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1721:50:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1761:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1731:29:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1731:40:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1721:6:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1616:9:13",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1627:7:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1639:6:13",
                            "type": ""
                          }
                        ],
                        "src": "1569:208:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1883:102:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1893:26:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1905:9:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1916:2:13",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1901:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1901:18:13"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1893:4:13"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1935:9:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1950:6:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1966:3:13",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1971:1:13",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1962:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1962:11:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1975:1:13",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1958:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1958:19:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1946:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1946:32:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1928:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1928:51:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1928:51:13"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1852:9:13",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1863:6:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1874:4:13",
                            "type": ""
                          }
                        ],
                        "src": "1782:203:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2127:150:13",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2137:27:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2157:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2151:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2151:13:13"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "2141:6:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2212:6:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2220:4:13",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2208:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2208:17:13"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "2227:3:13"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2232:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory_with_cleanup",
                                  "nodeType": "YulIdentifier",
                                  "src": "2173:34:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2173:66:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2173:66:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2248:23:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "2259:3:13"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2264:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2255:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2255:16:13"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "2248:3:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "2103:3:13",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2108:6:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "2119:3:13",
                            "type": ""
                          }
                        ],
                        "src": "1990:287:13"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        let offset := mload(add(headStart, 32))\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory_with_cleanup(add(_2, 32), add(memPtr, 32), _3)\n        value1 := memPtr\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n}",
                  "id": 13,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60a06040526040516105bf3803806105bf83398101604081905261002291610387565b61002c828261003e565b506001600160a01b031660805261047e565b610047826100fe565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a28051156100f2576100ed826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610447565b82610211565b505050565b6100fa610288565b5050565b806001600160a01b03163b60000361013957604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b81529051600092841691635c60da1b9160048083019260209291908290030181865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d99190610447565b9050806001600160a01b03163b6000036100fa57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610130565b6060600080846001600160a01b03168460405161022e9190610462565b600060405180830381855af49150503d8060008114610269576040519150601f19603f3d011682016040523d82523d6000602084013e61026e565b606091505b50909250905061027f8583836102a9565b95945050505050565b34156102a75760405163b398979f60e01b815260040160405180910390fd5b565b6060826102be576102b982610308565b610301565b81511580156102d557506001600160a01b0384163b155b156102fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610130565b50805b9392505050565b8051156103185780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811461034857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561037e578181015183820152602001610366565b50506000910152565b6000806040838503121561039a57600080fd5b6103a383610331565b60208401519092506001600160401b03808211156103c057600080fd5b818501915085601f8301126103d457600080fd5b8151818111156103e6576103e661034d565b604051601f8201601f19908116603f0116810190838211818310171561040e5761040e61034d565b8160405282815288602084870101111561042757600080fd5b610438836020830160208801610363565b80955050505050509250929050565b60006020828403121561045957600080fd5b61030182610331565b60008251610474818460208701610363565b9190910192915050565b6080516101276104986000396000601e01526101276000f3fe6080604052600a600c565b005b60186014601a565b60a0565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156079573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190609b919060c3565b905090565b3660008037600080366000845af43d6000803e80801560be573d6000f35b3d6000fd5b60006020828403121560d457600080fd5b81516001600160a01b038116811460ea57600080fd5b939250505056fea2646970667358221220de9b0dbee841d4eee681e19b305d730fe88f928a4e2731e6da89b06e61cfc32d64736f6c63430008140033",
              "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x5BF CODESIZE SUB DUP1 PUSH2 0x5BF DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x22 SWAP2 PUSH2 0x387 JUMP JUMPDEST PUSH2 0x2C DUP3 DUP3 PUSH2 0x3E JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x47E JUMP JUMPDEST PUSH2 0x47 DUP3 PUSH2 0xFE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0x1CF3B03A6CF19FA2BABA4DF148E9DCABEDEA7F8A5C07840E207E5C089BE95D3E SWAP1 PUSH1 0x0 SWAP1 LOG2 DUP1 MLOAD ISZERO PUSH2 0xF2 JUMPI PUSH2 0xED DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5C60DA1B 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 ISZERO DUP1 ISZERO PUSH2 0xC3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE7 SWAP2 SWAP1 PUSH2 0x447 JUMP JUMPDEST DUP3 PUSH2 0x211 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xFA PUSH2 0x288 JUMP JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE PUSH1 0x0 SUB PUSH2 0x139 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1933B43B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH32 0xA3F0AD74E5423AEBFD80D3EF4346578335A9A72AEAEE59FF6CB3582B35133D50 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x5C60DA1B PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 DUP5 AND SWAP2 PUSH4 0x5C60DA1B SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D9 SWAP2 SWAP1 PUSH2 0x447 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE PUSH1 0x0 SUB PUSH2 0xFA JUMPI PUSH1 0x40 MLOAD PUSH4 0x4C9C8CE3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x130 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x22E SWAP2 SWAP1 PUSH2 0x462 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x269 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x26E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x27F DUP6 DUP4 DUP4 PUSH2 0x2A9 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0x2A7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB398979F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x60 DUP3 PUSH2 0x2BE JUMPI PUSH2 0x2B9 DUP3 PUSH2 0x308 JUMP JUMPDEST PUSH2 0x301 JUMP JUMPDEST DUP2 MLOAD ISZERO DUP1 ISZERO PUSH2 0x2D5 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO JUMPDEST ISZERO PUSH2 0x2FE JUMPI PUSH1 0x40 MLOAD PUSH4 0x9996B315 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x130 JUMP JUMPDEST POP DUP1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x318 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA12F521 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x366 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x39A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3A3 DUP4 PUSH2 0x331 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x3C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x3E6 JUMPI PUSH2 0x3E6 PUSH2 0x34D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x40E JUMPI PUSH2 0x40E PUSH2 0x34D JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x427 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x438 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x363 JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x459 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x301 DUP3 PUSH2 0x331 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x474 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x363 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x127 PUSH2 0x498 PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH1 0x1E ADD MSTORE PUSH2 0x127 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xA PUSH1 0xC JUMP JUMPDEST STOP JUMPDEST PUSH1 0x18 PUSH1 0x14 PUSH1 0x1A JUMP JUMPDEST PUSH1 0xA0 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5C60DA1B 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 ISZERO DUP1 ISZERO PUSH1 0x79 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH1 0x9B SWAP2 SWAP1 PUSH1 0xC3 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH1 0xBE JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH1 0xD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH1 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE SWAP12 0xD 0xBE 0xE8 COINBASE 0xD4 0xEE 0xE6 DUP2 0xE1 SWAP12 ADDRESS 0x5D PUSH20 0xFE88F928A4E2731E6DA89B06E61CFC32D64736F PUSH13 0x63430008140033000000000000 ",
              "sourceMap": "1115:1194:5:-:0;;;1772:147;;;;;;;;;;;;;;;;;;:::i;:::-;1837:49;1873:6;1881:4;1837:35;:49::i;:::-;-1:-1:-1;;;;;;1896:16:5;;;1115:1194;;6076:333:3;6165:21;6176:9;6165:10;:21::i;:::-;6201:25;;-1:-1:-1;;;;;6201:25:3;;;;;;;;6241:11;;:15;6237:166;;6272:71;6309:9;-1:-1:-1;;;;;6301:33:3;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6338:4;6272:28;:71::i;:::-;;6076:333;;:::o;6237:166::-;6374:18;:16;:18::i;:::-;6076:333;;:::o;5114:437::-;5175:9;-1:-1:-1;;;;;5175:21:3;;5200:1;5175:26;5171:95;;5224:31;;-1:-1:-1;;;5224:31:3;;-1:-1:-1;;;;;1946:32:13;;5224:31:3;;;1928:51:13;1901:18;;5224:31:3;;;;;;;;5171:95;5324:9;4781:66;5276:57;;-1:-1:-1;;;;;;5276:57:3;-1:-1:-1;;;;;5276:57:3;;;;;;5375:35;;;-1:-1:-1;;;5375:35:3;;;;-1:-1:-1;;5375:33:3;;;;;:35;;;;;;;;;;;;;;:33;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5344:66;;5424:20;-1:-1:-1;;;;;5424:32:3;;5460:1;5424:37;5420:125;;5484:50;;-1:-1:-1;;;5484:50:3;;-1:-1:-1;;;;;1946:32:13;;5484:50:3;;;1928:51:13;1901:18;;5484:50:3;1782:203:13;4106:253:10;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:10;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4213:67:10;;-1:-1:-1;4213:67:10;-1:-1:-1;4297:55:10;4324:6;4213:67;;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:10:o;6598:122:3:-;6648:9;:13;6644:70;;6684:19;;-1:-1:-1;;;6684:19:3;;;;;;;;;;;6644:70;6598:122::o;4625:582:10:-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:10;;;:23;5045:49;5041:119;;;5121:24;;-1:-1:-1;;;5121:24:10;;-1:-1:-1;;;;;1946:32:13;;5121:24:10;;;1928:51:13;1901:18;;5121:24:10;1782:203:13;5041:119:10;-1:-1:-1;5180:10:10;4793:408;4625:582;;;;;:::o;5743:516::-;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:10;;;;;;;;;;;14:177:13;93:13;;-1:-1:-1;;;;;135:31:13;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:127::-;257:10;252:3;248:20;245:1;238:31;288:4;285:1;278:15;312:4;309:1;302:15;328:250;413:1;423:113;437:6;434:1;431:13;423:113;;;513:11;;;507:18;494:11;;;487:39;459:2;452:10;423:113;;;-1:-1:-1;;570:1:13;552:16;;545:27;328:250::o;583:981::-;671:6;679;732:2;720:9;711:7;707:23;703:32;700:52;;;748:1;745;738:12;700:52;771:40;801:9;771:40;:::i;:::-;855:2;840:18;;834:25;761:50;;-1:-1:-1;;;;;;908:14:13;;;905:34;;;935:1;932;925:12;905:34;973:6;962:9;958:22;948:32;;1018:7;1011:4;1007:2;1003:13;999:27;989:55;;1040:1;1037;1030:12;989:55;1069:2;1063:9;1091:2;1087;1084:10;1081:36;;;1097:18;;:::i;:::-;1172:2;1166:9;1140:2;1226:13;;-1:-1:-1;;1222:22:13;;;1246:2;1218:31;1214:40;1202:53;;;1270:18;;;1290:22;;;1267:46;1264:72;;;1316:18;;:::i;:::-;1356:10;1352:2;1345:22;1391:2;1383:6;1376:18;1431:7;1426:2;1421;1417;1413:11;1409:20;1406:33;1403:53;;;1452:1;1449;1442:12;1403:53;1465:68;1530:2;1525;1517:6;1513:15;1508:2;1504;1500:11;1465:68;:::i;:::-;1552:6;1542:16;;;;;;;583:981;;;;;:::o;1569:208::-;1639:6;1692:2;1680:9;1671:7;1667:23;1663:32;1660:52;;;1708:1;1705;1698:12;1660:52;1731:40;1761:9;1731:40;:::i;1990:287::-;2119:3;2157:6;2151:13;2173:66;2232:6;2227:3;2220:4;2212:6;2208:17;2173:66;:::i;:::-;2255:16;;;;;1990:287;-1:-1:-1;;1990:287:13:o;:::-;1115:1194:5;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_544": {
                  "entryPoint": null,
                  "id": 544,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_delegate_520": {
                  "entryPoint": 160,
                  "id": 520,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_fallback_536": {
                  "entryPoint": 12,
                  "id": 536,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_getBeacon_602": {
                  "entryPoint": null,
                  "id": 602,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@_implementation_593": {
                  "entryPoint": 26,
                  "id": 593,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 195,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:306:13",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:13",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "95:209:13",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "141:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "150:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "153:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "143:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "143:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "143:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "116:7:13"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "125:9:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "112:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "112:23:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "137:2:13",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "108:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "108:32:13"
                              },
                              "nodeType": "YulIf",
                              "src": "105:52:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "166:29:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "185:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "179:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "179:16:13"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "170:5:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "258:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "267:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "270:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "260:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "260:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "260:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "217:5:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "228:5:13"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "243:3:13",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "248:1:13",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "239:3:13"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "239:11:13"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "252:1:13",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "235:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "235:19:13"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "224:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "224:31:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "214:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "214:42:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "207:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "207:50:13"
                              },
                              "nodeType": "YulIf",
                              "src": "204:70:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "283:15:13",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "293:5:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "283:6:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "61:9:13",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "72:7:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "84:6:13",
                            "type": ""
                          }
                        ],
                        "src": "14:290:13"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}",
                  "id": 13,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {
                "558": [
                  {
                    "length": 32,
                    "start": 30
                  }
                ]
              },
              "linkReferences": {},
              "object": "6080604052600a600c565b005b60186014601a565b60a0565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156079573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190609b919060c3565b905090565b3660008037600080366000845af43d6000803e80801560be573d6000f35b3d6000fd5b60006020828403121560d457600080fd5b81516001600160a01b038116811460ea57600080fd5b939250505056fea2646970667358221220de9b0dbee841d4eee681e19b305d730fe88f928a4e2731e6da89b06e61cfc32d64736f6c63430008140033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xA PUSH1 0xC JUMP JUMPDEST STOP JUMPDEST PUSH1 0x18 PUSH1 0x14 PUSH1 0x1A JUMP JUMPDEST PUSH1 0xA0 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5C60DA1B 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 ISZERO DUP1 ISZERO PUSH1 0x79 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH1 0x9B SWAP2 SWAP1 PUSH1 0xC3 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH1 0xBE JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH1 0xD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH1 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE SWAP12 0xD 0xBE 0xE8 COINBASE 0xD4 0xEE 0xE6 DUP2 0xE1 SWAP12 ADDRESS 0x5D PUSH20 0xFE88F928A4E2731E6DA89B06E61CFC32D64736F PUSH13 0x63430008140033000000000000 ",
              "sourceMap": "1115:1194:5:-:0;;;2649:11:4;:9;:11::i;:::-;1115:1194:5;2323:83:4;2371:28;2381:17;:15;:17::i;:::-;2371:9;:28::i;:::-;2323:83::o;2022:138:5:-;2089:7;2293;-1:-1:-1;;;;;2115:36:5;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2108:45;;2022:138;:::o;949:895:4:-;1287:14;1284:1;1281;1268:34;1501:1;1498;1482:14;1479:1;1463:14;1456:5;1443:60;1577:16;1574:1;1571;1556:38;1615:6;1682:66;;;;1797:16;1794:1;1787:27;1682:66;1717:16;1714:1;1707:27;14:290:13;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:13;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:13:o"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidBeacon\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that gets the implementation address for each call from an {UpgradeableBeacon}. The beacon address can only be set once during construction, and cannot be changed afterwards. It is stored in an immutable variable to avoid unnecessary storage reads, and also in the beacon storage slot specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967] so that it can be accessed externally. CAUTION: Since the beacon address can never be changed, you must ensure that you either control the beacon, or trust the beacon to not upgrade the implementation maliciously. IMPORTANT: Do not use the implementation logic to modify the beacon storage slot. Doing so would leave the proxy in an inconsistent state where the beacon storage slot does not match the beacon address.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidBeacon(address)\":[{\"details\":\"The `beacon` of the proxy is invalid.\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"events\":{\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the proxy with `beacon`. If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - `beacon` must be a contract with the interface {IBeacon}. - If `data` is empty, `msg.value` must be zero.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol\":\"BeaconProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol\":{\"keccak256\":\"0x387ebdcb365b8e620f26645d2b34a161cd39eedfb0219e8baff55630c5ae113c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://744ea187c195e31cb9201e63ca291fca9e623747f54f0ba390b366a6213b8964\",\"dweb:/ipfs/Qmc547qfV4sz65DC9B4okx1HvgxwUzJR7zTfKKbTzL3UQT\"]},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"@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\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/proxy/beacon/IBeacon.sol": {
        "IBeacon": {
          "abi": [
            {
              "inputs": [],
              "name": "implementation",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "implementation()": "5c60da1b"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is the interface that {BeaconProxy} expects of its beacon.\",\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Must return an address that can be used as a delegate call target. {UpgradeableBeacon} will check that this address is a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":\"IBeacon\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol": {
        "UpgradeableBeacon": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "implementation_",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "initialOwner",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                }
              ],
              "name": "BeaconInvalidImplementation",
              "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": 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": "implementation",
                  "type": "address"
                }
              ],
              "name": "Upgraded",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "implementation",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "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"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newImplementation",
                  "type": "address"
                }
              ],
              "name": "upgradeTo",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_50": {
                  "entryPoint": null,
                  "id": 50,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_652": {
                  "entryPoint": null,
                  "id": 652,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_setImplementation_700": {
                  "entryPoint": 201,
                  "id": 700,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_transferOwnership_146": {
                  "entryPoint": 121,
                  "id": 146,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 329,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address_fromMemory": {
                  "entryPoint": 357,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:699:13",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:13",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:13"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:13"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:13",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:13",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:13"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:13"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:13",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:13"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:13"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:13"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:13",
                            "type": ""
                          }
                        ],
                        "src": "14:177:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "294:195:13",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "340:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "349:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "352:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "342:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "342:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "342:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "315:7:13"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "324:9:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "311:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "311:23:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "336:2:13",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "307:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "307:32:13"
                              },
                              "nodeType": "YulIf",
                              "src": "304:52:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "365:50:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "405:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "375:29:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "375:40:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "365:6:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "424:59:13",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "468:9:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "479:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "464:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "464:18:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "434:29:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "434:49:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "424:6:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "252:9:13",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "263:7:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "275:6:13",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "283:6:13",
                            "type": ""
                          }
                        ],
                        "src": "196:293:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "595:102:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "605:26:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "617:9:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "628:2:13",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "613:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "613:18:13"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "605:4:13"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "647:9:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "662:6:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "678:3:13",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "683:1:13",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "674:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "674:11:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "687:1:13",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "670:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "670:19:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "658:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "658:32:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "640:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "640:51:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "640:51:13"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "564:9:13",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "575:6:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "586:4:13",
                            "type": ""
                          }
                        ],
                        "src": "494:203:13"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}",
                  "id": 13,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b5060405161043838038061043883398101604081905261002f91610165565b806001600160a01b03811661005f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61006881610079565b50610072826100c9565b5050610198565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b6000036100ff5760405163211eb15960e21b81526001600160a01b0382166004820152602401610056565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b80516001600160a01b038116811461016057600080fd5b919050565b6000806040838503121561017857600080fd5b61018183610149565b915061018f60208401610149565b90509250929050565b610291806101a76000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a36600461022b565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f6100da565b6000546001600160a01b031661007e565b61006f6100c136600461022b565b6100ee565b6100ce61012e565b6100d78161015b565b50565b6100e261012e565b6100ec60006101db565b565b6100f661012e565b6001600160a01b03811661012557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100d7816101db565b6000546001600160a01b031633146100ec5760405163118cdaa760e01b815233600482015260240161011c565b806001600160a01b03163b6000036101915760405163211eb15960e21b81526001600160a01b038216600482015260240161011c565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561023d57600080fd5b81356001600160a01b038116811461025457600080fd5b939250505056fea26469706673582212202b43d46b54bf6a55afad3bc0ce51b0fb9f5ff8b2270082c064e07ae8d00392b664736f6c63430008140033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x438 CODESIZE SUB DUP1 PUSH2 0x438 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x165 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x5F JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x68 DUP2 PUSH2 0x79 JUMP JUMPDEST POP PUSH2 0x72 DUP3 PUSH2 0xC9 JUMP JUMPDEST POP POP PUSH2 0x198 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE PUSH1 0x0 SUB PUSH2 0xFF JUMPI PUSH1 0x40 MLOAD PUSH4 0x211EB159 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x56 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x160 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x181 DUP4 PUSH2 0x149 JUMP JUMPDEST SWAP2 POP PUSH2 0x18F PUSH1 0x20 DUP5 ADD PUSH2 0x149 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x291 DUP1 PUSH2 0x1A7 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x71 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x9A JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xA2 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xB3 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x6A CALLDATASIZE PUSH1 0x4 PUSH2 0x22B JUMP JUMPDEST PUSH2 0xC6 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6F PUSH2 0xDA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7E JUMP JUMPDEST PUSH2 0x6F PUSH2 0xC1 CALLDATASIZE PUSH1 0x4 PUSH2 0x22B JUMP JUMPDEST PUSH2 0xEE JUMP JUMPDEST PUSH2 0xCE PUSH2 0x12E JUMP JUMPDEST PUSH2 0xD7 DUP2 PUSH2 0x15B JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0xE2 PUSH2 0x12E JUMP JUMPDEST PUSH2 0xEC PUSH1 0x0 PUSH2 0x1DB JUMP JUMPDEST JUMP JUMPDEST PUSH2 0xF6 PUSH2 0x12E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x125 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xD7 DUP2 PUSH2 0x1DB JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xEC JUMPI PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x11C JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE PUSH1 0x0 SUB PUSH2 0x191 JUMPI PUSH1 0x40 MLOAD PUSH4 0x211EB159 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x11C JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2B NUMBER 0xD4 PUSH12 0x54BF6A55AFAD3BC0CE51B0FB SWAP16 PUSH0 0xF8 0xB2 0x27 STOP DUP3 0xC0 PUSH5 0xE07AE8D003 SWAP3 0xB6 PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ",
              "sourceMap": "555:1663:7:-:0;;;1059:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1126:12;-1:-1:-1;;;;;1273:26:0;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:0;;1350:1;1322:31;;;640:51:13;613:18;;1322:31:0;;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;1150:35:7::1;1169:15:::0;1150:18:::1;:35::i;:::-;1059:133:::0;;555:1663;;2912:187:0;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:0;;;-1:-1:-1;;;;;;3020:17:0;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;1932:284:7:-;2009:17;-1:-1:-1;;;;;2009:29:7;;2042:1;2009:34;2005:118;;2066:46;;-1:-1:-1;;;2066:46:7;;-1:-1:-1;;;;;658:32:13;;2066:46:7;;;640:51:13;613:18;;2066:46:7;494:203:13;2005:118:7;2132:15;:35;;-1:-1:-1;;;;;;2132:35:7;-1:-1:-1;;;;;2132:35:7;;;;;;;;2182:27;;;;-1:-1:-1;;2182:27:7;1932:284;:::o;14:177:13:-;93:13;;-1:-1:-1;;;;;135:31:13;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;494:203::-;555:1663:7;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_checkOwner_84": {
                  "entryPoint": 302,
                  "id": 84,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_msgSender_1149": {
                  "entryPoint": null,
                  "id": 1149,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@_setImplementation_700": {
                  "entryPoint": 347,
                  "id": 700,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_transferOwnership_146": {
                  "entryPoint": 475,
                  "id": 146,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@implementation_661": {
                  "entryPoint": null,
                  "id": 661,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@owner_67": {
                  "entryPoint": null,
                  "id": 67,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@renounceOwnership_98": {
                  "entryPoint": 218,
                  "id": 98,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@transferOwnership_126": {
                  "entryPoint": 238,
                  "id": 126,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@upgradeTo_674": {
                  "entryPoint": 198,
                  "id": 674,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 555,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:510:13",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:13",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "84:216:13",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "130:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "139:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "142:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "132:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "132:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "132:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "105:7:13"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "114:9:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "101:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "101:23:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "126:2:13",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "97:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "97:32:13"
                              },
                              "nodeType": "YulIf",
                              "src": "94:52:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "155:36:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "181:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "168:12:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "168:23:13"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "159:5:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "254:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "263:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "266:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "256:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "256:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "256:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "213:5:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "224:5:13"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "239:3:13",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "244:1:13",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "235:3:13"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "235:11:13"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "248:1:13",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "231:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "231:19:13"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "220:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "220:31:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "210:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "210:42:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "203:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "203:50:13"
                              },
                              "nodeType": "YulIf",
                              "src": "200:70:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "279:15:13",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "289:5:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "279:6:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "50:9:13",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "61:7:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "73:6:13",
                            "type": ""
                          }
                        ],
                        "src": "14:286:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "406:102:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "416:26:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "428:9:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "439:2:13",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "424:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "424:18:13"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "416:4:13"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "458:9:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "473:6:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "489:3:13",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "494:1:13",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "485:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "485:11:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "498:1:13",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "481:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "481:19:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "469:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "469:32:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "451:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "451:51:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "451:51:13"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "375:9:13",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "386:6:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "397:4:13",
                            "type": ""
                          }
                        ],
                        "src": "305:203:13"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}",
                  "id": 13,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a36600461022b565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f6100da565b6000546001600160a01b031661007e565b61006f6100c136600461022b565b6100ee565b6100ce61012e565b6100d78161015b565b50565b6100e261012e565b6100ec60006101db565b565b6100f661012e565b6001600160a01b03811661012557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100d7816101db565b6000546001600160a01b031633146100ec5760405163118cdaa760e01b815233600482015260240161011c565b806001600160a01b03163b6000036101915760405163211eb15960e21b81526001600160a01b038216600482015260240161011c565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561023d57600080fd5b81356001600160a01b038116811461025457600080fd5b939250505056fea26469706673582212202b43d46b54bf6a55afad3bc0ce51b0fb9f5ff8b2270082c064e07ae8d00392b664736f6c63430008140033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x71 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x9A JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xA2 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xB3 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x6A CALLDATASIZE PUSH1 0x4 PUSH2 0x22B JUMP JUMPDEST PUSH2 0xC6 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6F PUSH2 0xDA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7E JUMP JUMPDEST PUSH2 0x6F PUSH2 0xC1 CALLDATASIZE PUSH1 0x4 PUSH2 0x22B JUMP JUMPDEST PUSH2 0xEE JUMP JUMPDEST PUSH2 0xCE PUSH2 0x12E JUMP JUMPDEST PUSH2 0xD7 DUP2 PUSH2 0x15B JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0xE2 PUSH2 0x12E JUMP JUMPDEST PUSH2 0xEC PUSH1 0x0 PUSH2 0x1DB JUMP JUMPDEST JUMP JUMPDEST PUSH2 0xF6 PUSH2 0x12E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x125 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xD7 DUP2 PUSH2 0x1DB JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xEC JUMPI PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x11C JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE PUSH1 0x0 SUB PUSH2 0x191 JUMPI PUSH1 0x40 MLOAD PUSH4 0x211EB159 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x11C JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2B NUMBER 0xD4 PUSH12 0x54BF6A55AFAD3BC0CE51B0FB SWAP16 PUSH0 0xF8 0xB2 0x27 STOP DUP3 0xC0 PUSH5 0xE07AE8D003 SWAP3 0xB6 PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ",
              "sourceMap": "555:1663:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1632:125;;;;;;:::i;:::-;;:::i;:::-;;1270:103;1351:15;;-1:-1:-1;;;;;1351:15:7;1270:103;;;-1:-1:-1;;;;;469:32:13;;;451:51;;439:2;424:18;1270:103:7;;;;;;;2293:101:0;;;:::i;1638:85::-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:0;1638:85;;2543:215;;;;;;:::i;:::-;;:::i;1632:125:7:-;1531:13:0;:11;:13::i;:::-;1713:37:7::1;1732:17;1713:18;:37::i;:::-;1632:125:::0;:::o;2293:101:0:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;2543:215::-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:0;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:0;;2700:1:::1;2672:31;::::0;::::1;451:51:13::0;424:18;;2672:31:0::1;;;;;;;;2623:91;2723:28;2742:8;2723:18;:28::i;1796:162::-:0;1684:7;1710:6;-1:-1:-1;;;;;1710:6:0;735:10:11;1855:23:0;1851:101;;1901:40;;-1:-1:-1;;;1901:40:0;;735:10:11;1901:40:0;;;451:51:13;424:18;;1901:40:0;305:203:13;1932:284:7;2009:17;-1:-1:-1;;;;;2009:29:7;;2042:1;2009:34;2005:118;;2066:46;;-1:-1:-1;;;2066:46:7;;-1:-1:-1;;;;;469:32:13;;2066:46:7;;;451:51:13;424:18;;2066:46:7;305:203:13;2005:118:7;2132:15;:35;;-1:-1:-1;;;;;;2132:35:7;-1:-1:-1;;;;;2132:35:7;;;;;;;;2182:27;;;;-1:-1:-1;;2182:27:7;1932:284;:::o;2912:187:0:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:0;;;-1:-1:-1;;;;;;3020:17:0;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:286:13:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;168:23;;-1:-1:-1;;;;;220:31:13;;210:42;;200:70;;266:1;263;256:12;200:70;289:5;14:286;-1:-1:-1;;;14:286:13:o"
            },
            "methodIdentifiers": {
              "implementation()": "5c60da1b",
              "owner()": "8da5cb5b",
              "renounceOwnership()": "715018a6",
              "transferOwnership(address)": "f2fde38b",
              "upgradeTo(address)": "3659cfe6"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"BeaconInvalidImplementation\",\"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\":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\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their implementation contract, which is where they will delegate all function calls. An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\",\"errors\":{\"BeaconInvalidImplementation(address)\":[{\"details\":\"The `implementation` of the beacon is invalid.\"}],\"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\":{\"Upgraded(address)\":{\"details\":\"Emitted when the implementation returned by the beacon is changed.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Sets the address of the initial implementation, and the initial owner who can upgrade the beacon.\"},\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"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.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol\":\"UpgradeableBeacon\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol\":{\"keccak256\":\"0x5920bac7215d12961e23b207f6e81a1d64aa4935a4469abe95b64a96a3c3007b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b34bb828c45c3a4ebf6c2c585971abf5089e61357a3818a2900c7e85b74a1299\",\"dweb:/ipfs/QmewGAzKsPXYfSjCKxuH1SekKxtdyzhdbdyxjF5gohLigt\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol": {
        "ProxyAdmin": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "initialOwner",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "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": true,
                  "internalType": "address",
                  "name": "previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipTransferred",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "UPGRADE_INTERFACE_VERSION",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "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"
            },
            {
              "inputs": [
                {
                  "internalType": "contract ITransparentUpgradeableProxy",
                  "name": "proxy",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "upgradeAndCall",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_50": {
                  "entryPoint": null,
                  "id": 50,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_724": {
                  "entryPoint": null,
                  "id": 724,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_transferOwnership_146": {
                  "entryPoint": 110,
                  "id": 146,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 190,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:514:13",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:13",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "95:209:13",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "141:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "150:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "153:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "143:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "143:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "143:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "116:7:13"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "125:9:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "112:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "112:23:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "137:2:13",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "108:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "108:32:13"
                              },
                              "nodeType": "YulIf",
                              "src": "105:52:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "166:29:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "185:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "179:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "179:16:13"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "170:5:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "258:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "267:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "270:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "260:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "260:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "260:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "217:5:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "228:5:13"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "243:3:13",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "248:1:13",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "239:3:13"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "239:11:13"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "252:1:13",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "235:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "235:19:13"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "224:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "224:31:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "214:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "214:42:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "207:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "207:50:13"
                              },
                              "nodeType": "YulIf",
                              "src": "204:70:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "283:15:13",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "293:5:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "283:6:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "61:9:13",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "72:7:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "84:6:13",
                            "type": ""
                          }
                        ],
                        "src": "14:290:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "410:102:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "420:26:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "432:9:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "443:2:13",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "428:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "428:18:13"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "420:4:13"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "462:9:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "477:6:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "493:3:13",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "498:1:13",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "489:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "489:11:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "502:1:13",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "485:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "485:19:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "473:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "473:32:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "455:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "455:51:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "455:51:13"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "379:9:13",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "390:6:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "401:4:13",
                            "type": ""
                          }
                        ],
                        "src": "309:203:13"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}",
                  "id": 13,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea26469706673582212202bb12e95a81adca3d50fcaef2db3fec6a7f5a259333284e290a1c7304cfa029164736f6c63430008140033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x524 CODESIZE SUB DUP1 PUSH2 0x524 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0xBE JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x5E JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x67 DUP2 PUSH2 0x6E JUMP JUMPDEST POP POP PUSH2 0xEE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x427 DUP1 PUSH2 0xFD PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 EQ PUSH2 0x4F JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x9623609D EQ PUSH2 0x93 JUMPI DUP1 PUSH4 0xAD3CB1CC EQ PUSH2 0xA6 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xE4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x64 PUSH2 0x104 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x64 PUSH2 0xA1 CALLDATASIZE PUSH1 0x4 PUSH2 0x272 JUMP JUMPDEST PUSH2 0x118 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH5 0x352E302E3 PUSH1 0xDC SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8A SWAP2 SWAP1 PUSH2 0x38E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x64 PUSH2 0xFF CALLDATASIZE PUSH1 0x4 PUSH2 0x3A8 JUMP JUMPDEST PUSH2 0x187 JUMP JUMPDEST PUSH2 0x10C PUSH2 0x1CA JUMP JUMPDEST PUSH2 0x116 PUSH1 0x0 PUSH2 0x1F7 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x120 PUSH2 0x1CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x278F7943 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 CALLVALUE SWAP1 PUSH2 0x150 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x17D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x18F PUSH2 0x1CA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1BE JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1C7 DUP2 PUSH2 0x1F7 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x116 JUMPI PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1B5 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x287 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x292 DUP2 PUSH2 0x247 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2A2 DUP2 PUSH2 0x247 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x2E5 JUMPI PUSH2 0x2E5 PUSH2 0x25C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x30D JUMPI PUSH2 0x30D PUSH2 0x25C JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x326 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x36E JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x352 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3A1 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x348 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3A1 DUP2 PUSH2 0x247 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x3E9 SWAP1 DUP4 ADD DUP5 PUSH2 0x348 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2B 0xB1 0x2E SWAP6 0xA8 BYTE 0xDC LOG3 0xD5 0xF 0xCA 0xEF 0x2D 0xB3 INVALID 0xC6 0xA7 CREATE2 LOG2 MSIZE CALLER ORIGIN DUP5 0xE2 SWAP1 LOG1 0xC7 ADDRESS 0x4C STATICCALL MUL SWAP2 PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ",
              "sourceMap": "502:1442:8:-:0;;;1309:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1351:12;-1:-1:-1;;;;;1273:26:0;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:0;;1350:1;1322:31;;;455:51:13;428:18;;1322:31:0;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;1225:187;1309:58:8;502:1442;;2912:187:0;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:0;;;-1:-1:-1;;;;;;3020:17:0;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:290:13:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:13;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:13:o;309:203::-;502:1442:8;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@UPGRADE_INTERFACE_VERSION_714": {
                  "entryPoint": null,
                  "id": 714,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_checkOwner_84": {
                  "entryPoint": 458,
                  "id": 84,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_msgSender_1149": {
                  "entryPoint": null,
                  "id": 1149,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@_transferOwnership_146": {
                  "entryPoint": 503,
                  "id": 146,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@owner_67": {
                  "entryPoint": null,
                  "id": 67,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@renounceOwnership_98": {
                  "entryPoint": 260,
                  "id": 98,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@transferOwnership_126": {
                  "entryPoint": 391,
                  "id": 126,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@upgradeAndCall_748": {
                  "entryPoint": 280,
                  "id": 748,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 936,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_contract$_ITransparentUpgradeableProxy_$770t_addresst_bytes_memory_ptr": {
                  "entryPoint": 626,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_encode_string": {
                  "entryPoint": 840,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed": {
                  "entryPoint": 965,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 910,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "panic_error_0x41": {
                  "entryPoint": 604,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "validator_revert_contract_ITransparentUpgradeableProxy": {
                  "entryPoint": 583,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:3070:13",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:13",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "115:102:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "125:26:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "137:9:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "148:2:13",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "133:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "133:18:13"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "125:4:13"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "167:9:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "182:6:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "198:3:13",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "203:1:13",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "194:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "194:11:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "207:1:13",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "190:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "190:19:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "178:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "178:32:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "160:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "160:51:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "160:51:13"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "84:9:13",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "95:6:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "106:4:13",
                            "type": ""
                          }
                        ],
                        "src": "14:203:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "297:86:13",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "361:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "370:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "373:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "363:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "363:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "363:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "320:5:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "331:5:13"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "346:3:13",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "351:1:13",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "342:3:13"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "342:11:13"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "355:1:13",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "338:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "338:19:13"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "327:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "327:31:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "317:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "317:42:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "310:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "310:50:13"
                              },
                              "nodeType": "YulIf",
                              "src": "307:70:13"
                            }
                          ]
                        },
                        "name": "validator_revert_contract_ITransparentUpgradeableProxy",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "286:5:13",
                            "type": ""
                          }
                        ],
                        "src": "222:161:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "420:95:13",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "437:1:13",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "444:3:13",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "449:10:13",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "440:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "440:20:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "430:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "430:31:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "430:31:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "477:1:13",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "480:4:13",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "470:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "470:15:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "470:15:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "501:1:13",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "504:4:13",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "494:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "494:15:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "494:15:13"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "388:127:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "669:1144:13",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "715:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "724:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "727:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "717:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "717:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "717:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "690:7:13"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "699:9:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "686:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "686:23:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "711:2:13",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "682:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "682:32:13"
                              },
                              "nodeType": "YulIf",
                              "src": "679:52:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "740:36:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "766:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "753:12:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "753:23:13"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "744:5:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "840:5:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_contract_ITransparentUpgradeableProxy",
                                  "nodeType": "YulIdentifier",
                                  "src": "785:54:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "785:61:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "785:61:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "855:15:13",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "865:5:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "855:6:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "879:47:13",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "911:9:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "922:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "907:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "907:18:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "894:12:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "894:32:13"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "883:7:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "990:7:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_contract_ITransparentUpgradeableProxy",
                                  "nodeType": "YulIdentifier",
                                  "src": "935:54:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "935:63:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "935:63:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1007:17:13",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "1017:7:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1007:6:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1033:46:13",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1064:9:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1075:2:13",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1060:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1060:18:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1047:12:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1047:32:13"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1037:6:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1088:28:13",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1098:18:13",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1092:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1143:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1152:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1155:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1145:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1145:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1145:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1131:6:13"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1139:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1128:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1128:14:13"
                              },
                              "nodeType": "YulIf",
                              "src": "1125:34:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1168:32:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1182:9:13"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1193:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1178:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1178:22:13"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "1172:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1248:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1257:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1260:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1250:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1250:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1250:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "1227:2:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1231:4:13",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1223:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1223:13:13"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1238:7:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1219:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1219:27:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1212:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1212:35:13"
                              },
                              "nodeType": "YulIf",
                              "src": "1209:55:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1273:26:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1296:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1283:12:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1283:16:13"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "1277:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1322:22:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1324:16:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1324:18:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1324:18:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1314:2:13"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1318:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1311:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1311:10:13"
                              },
                              "nodeType": "YulIf",
                              "src": "1308:36:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1353:17:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1367:2:13",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "1363:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1363:7:13"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "1357:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1379:23:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1399:2:13",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1393:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1393:9:13"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1383:6:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1411:71:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1433:6:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "_3",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1457:2:13"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "1461:4:13",
                                                    "type": "",
                                                    "value": "0x1f"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1453:3:13"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1453:13:13"
                                              },
                                              {
                                                "name": "_4",
                                                "nodeType": "YulIdentifier",
                                                "src": "1468:2:13"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "1449:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1449:22:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1473:2:13",
                                            "type": "",
                                            "value": "63"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1445:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1445:31:13"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "1478:2:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1441:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1441:40:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1429:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1429:53:13"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1415:10:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1541:22:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1543:16:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1543:18:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1543:18:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1500:10:13"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1512:2:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1497:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1497:18:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1520:10:13"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1532:6:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1517:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1517:22:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "1494:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1494:46:13"
                              },
                              "nodeType": "YulIf",
                              "src": "1491:72:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1579:2:13",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1583:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1572:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1572:22:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1572:22:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1610:6:13"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1618:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1603:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1603:18:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1603:18:13"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1667:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1676:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1679:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1669:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1669:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1669:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "1644:2:13"
                                          },
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "1648:2:13"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1640:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1640:11:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1653:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1636:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1636:20:13"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1658:7:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1633:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1633:33:13"
                              },
                              "nodeType": "YulIf",
                              "src": "1630:53:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1709:6:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1717:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1705:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1705:15:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "1726:2:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1730:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1722:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1722:11:13"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1735:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "1692:12:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1692:46:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1692:46:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "memPtr",
                                            "nodeType": "YulIdentifier",
                                            "src": "1762:6:13"
                                          },
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "1770:2:13"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1758:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1758:15:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1775:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1754:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1754:24:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1780:1:13",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1747:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1747:35:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1747:35:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1791:16:13",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "1801:6:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1791:6:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_contract$_ITransparentUpgradeableProxy_$770t_addresst_bytes_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "619:9:13",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "630:7:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "642:6:13",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "650:6:13",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "658:6:13",
                            "type": ""
                          }
                        ],
                        "src": "520:1293:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1868:373:13",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1878:26:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1898:5:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1892:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1892:12:13"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "1882:6:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "1920:3:13"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1925:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1913:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1913:19:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1913:19:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1941:10:13",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1950:1:13",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "1945:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2012:110:13",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "2026:14:13",
                                    "value": {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "2036:4:13",
                                      "type": "",
                                      "value": "0x20"
                                    },
                                    "variables": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulTypedName",
                                        "src": "2030:2:13",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "pos",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2068:3:13"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2073:1:13"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "2064:3:13"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "2064:11:13"
                                            },
                                            {
                                              "name": "_1",
                                              "nodeType": "YulIdentifier",
                                              "src": "2077:2:13"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "2060:3:13"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2060:20:13"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "value",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2096:5:13"
                                                    },
                                                    {
                                                      "name": "i",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2103:1:13"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2092:3:13"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "2092:13:13"
                                                },
                                                {
                                                  "name": "_1",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2107:2:13"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "2088:3:13"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "2088:22:13"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "2082:5:13"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2082:29:13"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2053:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2053:59:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2053:59:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "1971:1:13"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1974:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1968:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1968:13:13"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "1982:21:13",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1984:17:13",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "1993:1:13"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1996:4:13",
                                          "type": "",
                                          "value": "0x20"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1989:3:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1989:12:13"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "1984:1:13"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "1964:3:13",
                                "statements": []
                              },
                              "src": "1960:162:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "pos",
                                            "nodeType": "YulIdentifier",
                                            "src": "2146:3:13"
                                          },
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "2151:6:13"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2142:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2142:16:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2160:4:13",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2138:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2138:27:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2167:1:13",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2131:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2131:38:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2131:38:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2178:57:13",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "2193:3:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "2206:6:13"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2214:2:13",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "2202:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2202:15:13"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2223:2:13",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "2219:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2219:7:13"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "2198:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2198:29:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2189:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2189:39:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2230:4:13",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2185:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2185:50:13"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "2178:3:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_string",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "1845:5:13",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "1852:3:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "1860:3:13",
                            "type": ""
                          }
                        ],
                        "src": "1818:423:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2367:99:13",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2384:9:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2395:2:13",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2377:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2377:21:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2377:21:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2407:53:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2433:6:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2445:9:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2456:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2441:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2441:18:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string",
                                  "nodeType": "YulIdentifier",
                                  "src": "2415:17:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2415:45:13"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2407:4:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2336:9:13",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2347:6:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2358:4:13",
                            "type": ""
                          }
                        ],
                        "src": "2246:220:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2541:207:13",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2587:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2596:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2599:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2589:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2589:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2589:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2562:7:13"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2571:9:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2558:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2558:23:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2583:2:13",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2554:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2554:32:13"
                              },
                              "nodeType": "YulIf",
                              "src": "2551:52:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2612:36:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2638:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2625:12:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2625:23:13"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2616:5:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2712:5:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_contract_ITransparentUpgradeableProxy",
                                  "nodeType": "YulIdentifier",
                                  "src": "2657:54:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2657:61:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2657:61:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2727:15:13",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2737:5:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2727:6:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2507:9:13",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2518:7:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2530:6:13",
                            "type": ""
                          }
                        ],
                        "src": "2471:277:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2900:168:13",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2917:9:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2932:6:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2948:3:13",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2953:1:13",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "2944:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2944:11:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2957:1:13",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "2940:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2940:19:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2928:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2928:32:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2910:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2910:51:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2910:51:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2981:9:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2992:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2977:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2977:18:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2997:2:13",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2970:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2970:30:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2970:30:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3009:53:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3035:6:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3047:9:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3058:2:13",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3043:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3043:18:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string",
                                  "nodeType": "YulIdentifier",
                                  "src": "3017:17:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3017:45:13"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3009:4:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2861:9:13",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2872:6:13",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2880:6:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2891:4:13",
                            "type": ""
                          }
                        ],
                        "src": "2753:315:13"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function validator_revert_contract_ITransparentUpgradeableProxy(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_contract$_ITransparentUpgradeableProxy_$770t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_ITransparentUpgradeableProxy(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_contract_ITransparentUpgradeableProxy(value_1)\n        value1 := value_1\n        let offset := calldataload(add(headStart, 64))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), 0)\n        value2 := memPtr\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_ITransparentUpgradeableProxy(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_string(value1, add(headStart, 64))\n    }\n}",
                  "id": 13,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea26469706673582212202bb12e95a81adca3d50fcaef2db3fec6a7f5a259333284e290a1c7304cfa029164736f6c63430008140033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 EQ PUSH2 0x4F JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x9623609D EQ PUSH2 0x93 JUMPI DUP1 PUSH4 0xAD3CB1CC EQ PUSH2 0xA6 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xE4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x64 PUSH2 0x104 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x64 PUSH2 0xA1 CALLDATASIZE PUSH1 0x4 PUSH2 0x272 JUMP JUMPDEST PUSH2 0x118 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH5 0x352E302E3 PUSH1 0xDC SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8A SWAP2 SWAP1 PUSH2 0x38E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x64 PUSH2 0xFF CALLDATASIZE PUSH1 0x4 PUSH2 0x3A8 JUMP JUMPDEST PUSH2 0x187 JUMP JUMPDEST PUSH2 0x10C PUSH2 0x1CA JUMP JUMPDEST PUSH2 0x116 PUSH1 0x0 PUSH2 0x1F7 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x120 PUSH2 0x1CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x278F7943 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 CALLVALUE SWAP1 PUSH2 0x150 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x17D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x18F PUSH2 0x1CA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1BE JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1C7 DUP2 PUSH2 0x1F7 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x116 JUMPI PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1B5 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x287 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x292 DUP2 PUSH2 0x247 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2A2 DUP2 PUSH2 0x247 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x2E5 JUMPI PUSH2 0x2E5 PUSH2 0x25C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x30D JUMPI PUSH2 0x30D PUSH2 0x25C JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x326 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x36E JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x352 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3A1 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x348 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3A1 DUP2 PUSH2 0x247 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x3E9 SWAP1 DUP4 ADD DUP5 PUSH2 0x348 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2B 0xB1 0x2E SWAP6 0xA8 BYTE 0xDC LOG3 0xD5 0xF 0xCA 0xEF 0x2D 0xB3 INVALID 0xC6 0xA7 CREATE2 LOG2 MSIZE CALLER ORIGIN DUP5 0xE2 SWAP1 LOG1 0xC7 ADDRESS 0x4C STATICCALL MUL SWAP2 PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ",
              "sourceMap": "502:1442:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2293:101:0;;;;;;;;;;;;;:::i;:::-;;1638:85;;;;;;;;;;-1:-1:-1;1684:7:0;1710:6;1638:85;;-1:-1:-1;;;;;1710:6:0;;;160:51:13;;148:2;133:18;1638:85:0;;;;;;;;1697:245:8;;;;;;:::i;:::-;;:::i;1167:58::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1167:58:8;;;;;;;;;;;;:::i;2543:215:0:-;;;;;;;;;;-1:-1:-1;2543:215:0;;;;;:::i;:::-;;:::i;2293:101::-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;1697:245:8:-;1531:13:0;:11;:13::i;:::-;1873:62:8::1;::::0;-1:-1:-1;;;1873:62:8;;-1:-1:-1;;;;;1873:22:8;::::1;::::0;::::1;::::0;1903:9:::1;::::0;1873:62:::1;::::0;1914:14;;1930:4;;1873:62:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;1697:245:::0;;;:::o;2543:215:0:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:0;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:0;;2700:1:::1;2672:31;::::0;::::1;160:51:13::0;133:18;;2672:31:0::1;;;;;;;;2623:91;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;1796:162::-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:0;735:10:11;1855:23:0;1851:101;;1901:40;;-1:-1:-1;;;1901:40:0;;735:10:11;1901:40:0;;;160:51:13;133:18;;1901:40:0;14:203:13;2912:187:0;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:0;;;-1:-1:-1;;;;;;3020:17:0;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;222:161:13:-;-1:-1:-1;;;;;327:31:13;;317:42;;307:70;;373:1;370;363:12;388:127;449:10;444:3;440:20;437:1;430:31;480:4;477:1;470:15;504:4;501:1;494:15;520:1293;642:6;650;658;711:2;699:9;690:7;686:23;682:32;679:52;;;727:1;724;717:12;679:52;766:9;753:23;785:61;840:5;785:61;:::i;:::-;865:5;-1:-1:-1;922:2:13;907:18;;894:32;935:63;894:32;935:63;:::i;:::-;1017:7;-1:-1:-1;1075:2:13;1060:18;;1047:32;1098:18;1128:14;;;1125:34;;;1155:1;1152;1145:12;1125:34;1193:6;1182:9;1178:22;1168:32;;1238:7;1231:4;1227:2;1223:13;1219:27;1209:55;;1260:1;1257;1250:12;1209:55;1296:2;1283:16;1318:2;1314;1311:10;1308:36;;;1324:18;;:::i;:::-;1399:2;1393:9;1367:2;1453:13;;-1:-1:-1;;1449:22:13;;;1473:2;1445:31;1441:40;1429:53;;;1497:18;;;1517:22;;;1494:46;1491:72;;;1543:18;;:::i;:::-;1583:10;1579:2;1572:22;1618:2;1610:6;1603:18;1658:7;1653:2;1648;1644;1640:11;1636:20;1633:33;1630:53;;;1679:1;1676;1669:12;1630:53;1735:2;1730;1726;1722:11;1717:2;1709:6;1705:15;1692:46;1780:1;1775:2;1770;1762:6;1758:15;1754:24;1747:35;1801:6;1791:16;;;;;;;520:1293;;;;;:::o;1818:423::-;1860:3;1898:5;1892:12;1925:6;1920:3;1913:19;1950:1;1960:162;1974:6;1971:1;1968:13;1960:162;;;2036:4;2092:13;;;2088:22;;2082:29;2064:11;;;2060:20;;2053:59;1989:12;1960:162;;;1964:3;2167:1;2160:4;2151:6;2146:3;2142:16;2138:27;2131:38;2230:4;2223:2;2219:7;2214:2;2206:6;2202:15;2198:29;2193:3;2189:39;2185:50;2178:57;;;1818:423;;;;:::o;2246:220::-;2395:2;2384:9;2377:21;2358:4;2415:45;2456:2;2445:9;2441:18;2433:6;2415:45;:::i;:::-;2407:53;2246:220;-1:-1:-1;;;2246:220:13:o;2471:277::-;2530:6;2583:2;2571:9;2562:7;2558:23;2554:32;2551:52;;;2599:1;2596;2589:12;2551:52;2638:9;2625:23;2657:61;2712:5;2657:61;:::i;2753:315::-;-1:-1:-1;;;;;2928:32:13;;2910:51;;2997:2;2992;2977:18;;2970:30;;;-1:-1:-1;;3017:45:13;;3043:18;;3035:6;3017:45;:::i;:::-;3009:53;2753:315;-1:-1:-1;;;;2753:315:13:o"
            },
            "methodIdentifiers": {
              "UPGRADE_INTERFACE_VERSION()": "ad3cb1cc",
              "owner()": "8da5cb5b",
              "renounceOwnership()": "715018a6",
              "transferOwnership(address)": "f2fde38b",
              "upgradeAndCall(address,address,bytes)": "9623609d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"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\"},{\"inputs\":[{\"internalType\":\"contract ITransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"errors\":{\"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.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Sets the initial owner who can perform upgrades.\"},\"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.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-_dispatchUpgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`. - If `data` is empty, `msg.value` must be zero.\"}},\"stateVariables\":{\"UPGRADE_INTERFACE_VERSION\":{\"details\":\"The version of the upgrade interface of the contract. If this getter is missing, both `upgrade(address)` and `upgradeAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called, while `upgradeAndCall` will invoke the `receive` function if the second argument is the empty byte string. If the getter returns `\\\"5.0.0\\\"`, only `upgradeAndCall(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.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xbfb6695731de677140fbf76c772ab08c4233a122fb51ac28ac120fc49bbbc4ec\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://68f8fded7cc318efa15874b7c6a983fe17a4a955d72d240353a9a4ca1e1b824c\",\"dweb:/ipfs/QmdcmBL9Qo4Tk3Dby4wFYabGyot9JNeLPxpSXZUgUm92BV\"]},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol\":{\"keccak256\":\"0x371c3467dccfbb2ac03b0edb4fadaacb9ad382772cee7850a3e73f39a56d102c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3574f1cc3ff2cb985a1385949bd3c76888e8dcf59e6a770ccb15c79b145b39bb\",\"dweb:/ipfs/QmXZDrFibUAMqjoRrpKxV3ma5RR9YfJXZyMrLWJ3bix9gi\"]},\"@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"keccak256\":\"0xbc9babed4d136e6cc1e74354aa66538a234f3808645fbe30463b4a7b7d8ca789\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75fd9323b206da2a87924fca2ca996dbd04ae0963f79f66fb8a0ef94bf283a3d\",\"dweb:/ipfs/QmYSoLcvpq8gRo8doLP4nnB43UAT1D3KvfFJRDSD2y4nYu\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": {
        "ITransparentUpgradeableProxy": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "previousAdmin",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "newAdmin",
                  "type": "address"
                }
              ],
              "name": "AdminChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "beacon",
                  "type": "address"
                }
              ],
              "name": "BeaconUpgraded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                }
              ],
              "name": "Upgraded",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "name": "upgradeToAndCall",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "upgradeToAndCall(address,bytes)": "4f1ef286"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for {TransparentUpgradeableProxy}. In order to implement transparency, {TransparentUpgradeableProxy} does not implement this interface directly, and its upgradeability mechanism is implemented by an internal dispatch mechanism. The compiler is unaware that these functions are implemented by {TransparentUpgradeableProxy} and will not include them in the ABI so this interface must be used to interact with it.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":\"ITransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xbfb6695731de677140fbf76c772ab08c4233a122fb51ac28ac120fc49bbbc4ec\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://68f8fded7cc318efa15874b7c6a983fe17a4a955d72d240353a9a4ca1e1b824c\",\"dweb:/ipfs/QmdcmBL9Qo4Tk3Dby4wFYabGyot9JNeLPxpSXZUgUm92BV\"]},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol\":{\"keccak256\":\"0x371c3467dccfbb2ac03b0edb4fadaacb9ad382772cee7850a3e73f39a56d102c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3574f1cc3ff2cb985a1385949bd3c76888e8dcf59e6a770ccb15c79b145b39bb\",\"dweb:/ipfs/QmXZDrFibUAMqjoRrpKxV3ma5RR9YfJXZyMrLWJ3bix9gi\"]},\"@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"keccak256\":\"0xbc9babed4d136e6cc1e74354aa66538a234f3808645fbe30463b4a7b7d8ca789\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75fd9323b206da2a87924fca2ca996dbd04ae0963f79f66fb8a0ef94bf283a3d\",\"dweb:/ipfs/QmYSoLcvpq8gRo8doLP4nnB43UAT1D3KvfFJRDSD2y4nYu\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]}},\"version\":1}"
        },
        "TransparentUpgradeableProxy": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_logic",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "initialOwner",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "_data",
                  "type": "bytes"
                }
              ],
              "stateMutability": "payable",
              "type": "constructor"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "target",
                  "type": "address"
                }
              ],
              "name": "AddressEmptyCode",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "admin",
                  "type": "address"
                }
              ],
              "name": "ERC1967InvalidAdmin",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                }
              ],
              "name": "ERC1967InvalidImplementation",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ERC1967NonPayable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "FailedInnerCall",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ProxyDeniedAdminAccess",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "previousAdmin",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "newAdmin",
                  "type": "address"
                }
              ],
              "name": "AdminChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                }
              ],
              "name": "Upgraded",
              "type": "event"
            },
            {
              "stateMutability": "payable",
              "type": "fallback"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_193": {
                  "entryPoint": null,
                  "id": 193,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_811": {
                  "entryPoint": null,
                  "id": 811,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_checkNonPayable_508": {
                  "entryPoint": 625,
                  "id": 508,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_proxyAdmin_820": {
                  "entryPoint": null,
                  "id": 820,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@_revert_1136": {
                  "entryPoint": 828,
                  "id": 1136,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_setAdmin_376": {
                  "entryPoint": 659,
                  "id": 376,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_setImplementation_294": {
                  "entryPoint": 372,
                  "id": 294,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@changeAdmin_393": {
                  "entryPoint": 258,
                  "id": 393,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@functionDelegateCall_1056": {
                  "entryPoint": 500,
                  "id": 1056,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@getAddressSlot_1199": {
                  "entryPoint": null,
                  "id": 1199,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@getAdmin_345": {
                  "entryPoint": null,
                  "id": 345,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@upgradeToAndCall_328": {
                  "entryPoint": 156,
                  "id": 328,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@verifyCallResultFromTarget_1096": {
                  "entryPoint": 726,
                  "id": 1096,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 884,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory": {
                  "entryPoint": 973,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 1197,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "copy_memory_to_memory_with_cleanup": {
                  "entryPoint": 935,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "panic_error_0x41": {
                  "entryPoint": 913,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:2460:13",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:13",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:13"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:13"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:13",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:13",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:13"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:13"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:13",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:13"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:13"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:13"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:13",
                            "type": ""
                          }
                        ],
                        "src": "14:177:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "228:95:13",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "245:1:13",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "252:3:13",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "257:10:13",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "248:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "248:20:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "238:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "238:31:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "238:31:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "285:1:13",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "288:4:13",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "278:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "278:15:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "278:15:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "309:1:13",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "312:4:13",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "302:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "302:15:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "302:15:13"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "196:127:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "394:184:13",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "404:10:13",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "413:1:13",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "408:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "473:63:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "498:3:13"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "503:1:13"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "494:3:13"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "494:11:13"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "517:3:13"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "522:1:13"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "513:3:13"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "513:11:13"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "507:5:13"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "507:18:13"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "487:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "487:39:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "487:39:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "434:1:13"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "437:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "431:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "431:13:13"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "445:19:13",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "447:15:13",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "456:1:13"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "459:2:13",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "452:3:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "452:10:13"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "447:1:13"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "427:3:13",
                                "statements": []
                              },
                              "src": "423:113:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "556:3:13"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "561:6:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "552:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "552:16:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "570:1:13",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "545:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "545:27:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "545:27:13"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory_with_cleanup",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "372:3:13",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "377:3:13",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "382:6:13",
                            "type": ""
                          }
                        ],
                        "src": "328:250:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "707:942:13",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "753:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "762:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "765:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "755:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "755:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "755:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "728:7:13"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "737:9:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "724:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "724:23:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "749:2:13",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "720:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "720:32:13"
                              },
                              "nodeType": "YulIf",
                              "src": "717:52:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "778:50:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "818:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "788:29:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "788:40:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "778:6:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "837:59:13",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "881:9:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "892:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "877:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "877:18:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "847:29:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "847:49:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "837:6:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "905:39:13",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "929:9:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "940:2:13",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "925:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "925:18:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "919:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "919:25:13"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "909:6:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "953:28:13",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "971:2:13",
                                        "type": "",
                                        "value": "64"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "975:1:13",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "967:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "967:10:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "979:1:13",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "963:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "963:18:13"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "957:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1008:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1017:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1020:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1010:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1010:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1010:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "996:6:13"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1004:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "993:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "993:14:13"
                              },
                              "nodeType": "YulIf",
                              "src": "990:34:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1033:32:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1047:9:13"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1058:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1043:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1043:22:13"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "1037:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1113:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1122:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1125:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1115:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1115:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1115:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "1092:2:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1096:4:13",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1088:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1088:13:13"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1103:7:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1084:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1084:27:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1077:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1077:35:13"
                              },
                              "nodeType": "YulIf",
                              "src": "1074:55:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1138:19:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1154:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1148:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1148:9:13"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "1142:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1180:22:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1182:16:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1182:18:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1182:18:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1172:2:13"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1176:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1169:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1169:10:13"
                              },
                              "nodeType": "YulIf",
                              "src": "1166:36:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1211:17:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1225:2:13",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "1221:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1221:7:13"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "1215:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1237:23:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1257:2:13",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1251:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1251:9:13"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1241:6:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1269:71:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1291:6:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "_3",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1315:2:13"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "1319:4:13",
                                                    "type": "",
                                                    "value": "0x1f"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1311:3:13"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1311:13:13"
                                              },
                                              {
                                                "name": "_4",
                                                "nodeType": "YulIdentifier",
                                                "src": "1326:2:13"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "1307:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1307:22:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1331:2:13",
                                            "type": "",
                                            "value": "63"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1303:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1303:31:13"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "1336:2:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1299:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1299:40:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1287:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1287:53:13"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1273:10:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1399:22:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1401:16:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1401:18:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1401:18:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1358:10:13"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1370:2:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1355:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1355:18:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1378:10:13"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1390:6:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1375:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1375:22:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "1352:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1352:46:13"
                              },
                              "nodeType": "YulIf",
                              "src": "1349:72:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1437:2:13",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1441:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1430:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1430:22:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1430:22:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1468:6:13"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1476:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1461:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1461:18:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1461:18:13"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1525:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1534:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1537:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1527:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1527:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1527:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "1502:2:13"
                                          },
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "1506:2:13"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1498:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1498:11:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1511:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1494:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1494:20:13"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1516:7:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1491:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1491:33:13"
                              },
                              "nodeType": "YulIf",
                              "src": "1488:53:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "1589:2:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1593:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1585:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1585:11:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1602:6:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1610:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1598:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1598:15:13"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1615:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory_with_cleanup",
                                  "nodeType": "YulIdentifier",
                                  "src": "1550:34:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1550:68:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1550:68:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1627:16:13",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "1637:6:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1627:6:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "657:9:13",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "668:7:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "680:6:13",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "688:6:13",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "696:6:13",
                            "type": ""
                          }
                        ],
                        "src": "583:1066:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1755:102:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1765:26:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1777:9:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1788:2:13",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1773:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1773:18:13"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1765:4:13"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1807:9:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1822:6:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1838:3:13",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1843:1:13",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1834:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1834:11:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1847:1:13",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1830:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1830:19:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1818:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1818:32:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1800:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1800:51:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1800:51:13"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1724:9:13",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1735:6:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1746:4:13",
                            "type": ""
                          }
                        ],
                        "src": "1654:203:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1991:175:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2001:26:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2013:9:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2024:2:13",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2009:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2009:18:13"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2001:4:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2036:29:13",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2054:3:13",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2059:1:13",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "2050:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2050:11:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2063:1:13",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "2046:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2046:19:13"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2040:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2081:9:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2096:6:13"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2104:2:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2092:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2092:15:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2074:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2074:34:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2074:34:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2128:9:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2139:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2124:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2124:18:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2148:6:13"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2156:2:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2144:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2144:15:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2117:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2117:43:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2117:43:13"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1952:9:13",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1963:6:13",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1971:6:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1982:4:13",
                            "type": ""
                          }
                        ],
                        "src": "1862:304:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2308:150:13",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2318:27:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2338:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2332:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2332:13:13"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "2322:6:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2393:6:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2401:4:13",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2389:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2389:17:13"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "2408:3:13"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2413:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory_with_cleanup",
                                  "nodeType": "YulIdentifier",
                                  "src": "2354:34:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2354:66:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2354:66:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2429:23:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "2440:3:13"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2445:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2436:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2436:16:13"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "2429:3:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "2284:3:13",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2289:6:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "2300:3:13",
                            "type": ""
                          }
                        ],
                        "src": "2171:287:13"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        let offset := mload(add(headStart, 64))\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory_with_cleanup(add(_2, 32), add(memPtr, 32), _3)\n        value2 := memPtr\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\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        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n}",
                  "id": 13,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea2646970667358221220d8ed0666e0d5b86fe11f185aac6b3afdbcea970bbbf2bb81eb0ed14076ef240d64736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea26469706673582212202bb12e95a81adca3d50fcaef2db3fec6a7f5a259333284e290a1c7304cfa029164736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103",
              "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH3 0xEB1 CODESIZE SUB DUP1 PUSH3 0xEB1 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x26 SWAP2 PUSH3 0x3CD JUMP JUMPDEST DUP3 DUP2 PUSH3 0x34 DUP3 DUP3 PUSH3 0x9C JUMP JUMPDEST POP POP DUP2 PUSH1 0x40 MLOAD PUSH3 0x45 SWAP1 PUSH3 0x366 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x72 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH3 0x93 PUSH3 0x8D PUSH1 0x80 MLOAD SWAP1 JUMP JUMPDEST PUSH3 0x102 JUMP JUMPDEST POP POP POP PUSH3 0x4CB JUMP JUMPDEST PUSH3 0xA7 DUP3 PUSH3 0x174 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 DUP1 MLOAD ISZERO PUSH3 0xF4 JUMPI PUSH3 0xEF DUP3 DUP3 PUSH3 0x1F4 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH3 0xFE PUSH3 0x271 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH3 0x144 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xE91 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH3 0x171 DUP2 PUSH3 0x293 JUMP JUMPDEST POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE PUSH1 0x0 SUB PUSH3 0x1B0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4C9C8CE3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH3 0x213 SWAP2 SWAP1 PUSH3 0x4AD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH3 0x250 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH3 0x255 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH3 0x268 DUP6 DUP4 DUP4 PUSH3 0x2D6 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE ISZERO PUSH3 0x291 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB398979F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x2BF JUMPI PUSH1 0x40 MLOAD PUSH4 0x3173BDD1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH3 0x1A7 JUMP JUMPDEST DUP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xE91 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH3 0x1D3 JUMP JUMPDEST PUSH1 0x60 DUP3 PUSH3 0x2EF JUMPI PUSH3 0x2E9 DUP3 PUSH3 0x33C JUMP JUMPDEST PUSH3 0x335 JUMP JUMPDEST DUP2 MLOAD ISZERO DUP1 ISZERO PUSH3 0x307 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO JUMPDEST ISZERO PUSH3 0x332 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9996B315 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH3 0x1A7 JUMP JUMPDEST POP DUP1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH3 0x34D JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA12F521 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x524 DUP1 PUSH3 0x96D DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x38C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x3C4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x3AA JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x3E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x3EE DUP5 PUSH3 0x374 JUMP JUMPDEST SWAP3 POP PUSH3 0x3FE PUSH1 0x20 DUP6 ADD PUSH3 0x374 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x41C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x431 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0x446 JUMPI PUSH3 0x446 PUSH3 0x391 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x471 JUMPI PUSH3 0x471 PUSH3 0x391 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0x48B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x49E DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0x3A7 JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x4C1 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x3A7 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x487 PUSH3 0x4E6 PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH1 0x10 ADD MSTORE PUSH2 0x487 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH2 0xC PUSH2 0xE JUMP JUMPDEST STOP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH4 0x278F7943 PUSH1 0xE1 SHL EQ PUSH2 0x71 JUMPI PUSH1 0x40 MLOAD PUSH4 0x34AD5DBB PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x79 PUSH2 0x83 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x79 PUSH2 0xB2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x93 CALLDATASIZE PUSH1 0x4 DUP2 DUP5 PUSH2 0x312 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xA0 SWAP2 SWAP1 PUSH2 0x352 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xAE DUP3 DUP3 PUSH2 0xC2 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x79 PUSH2 0xBD PUSH2 0x11D JUMP JUMPDEST PUSH2 0x155 JUMP JUMPDEST PUSH2 0xCB DUP3 PUSH2 0x179 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 DUP1 MLOAD ISZERO PUSH2 0x115 JUMPI PUSH2 0x110 DUP3 DUP3 PUSH2 0x1F5 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xAE PUSH2 0x26B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x150 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x174 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE PUSH1 0x0 SUB PUSH2 0x1B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4C9C8CE3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x212 SWAP2 SWAP1 PUSH2 0x422 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x24D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x252 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x262 DUP6 DUP4 DUP4 PUSH2 0x28A JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0x79 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB398979F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 PUSH2 0x29F JUMPI PUSH2 0x29A DUP3 PUSH2 0x2E9 JUMP JUMPDEST PUSH2 0x2E2 JUMP JUMPDEST DUP2 MLOAD ISZERO DUP1 ISZERO PUSH2 0x2B6 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO JUMPDEST ISZERO PUSH2 0x2DF JUMPI PUSH1 0x40 MLOAD PUSH4 0x9996B315 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1AB JUMP JUMPDEST POP DUP1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x2F9 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA12F521 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 GT ISZERO PUSH2 0x322 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP7 GT ISZERO PUSH2 0x32F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP3 ADD SWAP4 SWAP2 SWAP1 SWAP3 SUB SWAP2 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x365 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x37C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x3BF JUMPI PUSH2 0x3BF PUSH2 0x33C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x3E7 JUMPI PUSH2 0x3E7 PUSH2 0x33C JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x400 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x443 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x429 JUMP JUMPDEST POP PUSH1 0x0 SWAP3 ADD SWAP2 DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD8 0xED MOD PUSH7 0xE0D5B86FE11F18 GAS 0xAC PUSH12 0x3AFDBCEA970BBBF2BB81EB0E 0xD1 BLOCKHASH PUSH23 0xEF240D64736F6C63430008140033608060405234801561 STOP LT JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x524 CODESIZE SUB DUP1 PUSH2 0x524 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0xBE JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x5E JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x67 DUP2 PUSH2 0x6E JUMP JUMPDEST POP POP PUSH2 0xEE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x427 DUP1 PUSH2 0xFD PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 EQ PUSH2 0x4F JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x9623609D EQ PUSH2 0x93 JUMPI DUP1 PUSH4 0xAD3CB1CC EQ PUSH2 0xA6 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xE4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x64 PUSH2 0x104 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x64 PUSH2 0xA1 CALLDATASIZE PUSH1 0x4 PUSH2 0x272 JUMP JUMPDEST PUSH2 0x118 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH5 0x352E302E3 PUSH1 0xDC SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8A SWAP2 SWAP1 PUSH2 0x38E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x64 PUSH2 0xFF CALLDATASIZE PUSH1 0x4 PUSH2 0x3A8 JUMP JUMPDEST PUSH2 0x187 JUMP JUMPDEST PUSH2 0x10C PUSH2 0x1CA JUMP JUMPDEST PUSH2 0x116 PUSH1 0x0 PUSH2 0x1F7 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x120 PUSH2 0x1CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x278F7943 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 CALLVALUE SWAP1 PUSH2 0x150 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x17D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x18F PUSH2 0x1CA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1BE JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1C7 DUP2 PUSH2 0x1F7 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x116 JUMPI PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1B5 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x287 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x292 DUP2 PUSH2 0x247 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2A2 DUP2 PUSH2 0x247 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x2E5 JUMPI PUSH2 0x2E5 PUSH2 0x25C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x30D JUMPI PUSH2 0x30D PUSH2 0x25C JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x326 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x36E JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x352 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3A1 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x348 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3A1 DUP2 PUSH2 0x247 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x3E9 SWAP1 DUP4 ADD DUP5 PUSH2 0x348 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2B 0xB1 0x2E SWAP6 0xA8 BYTE 0xDC LOG3 0xD5 0xF 0xCA 0xEF 0x2D 0xB3 INVALID 0xC6 0xA7 CREATE2 LOG2 MSIZE CALLER ORIGIN DUP5 0xE2 SWAP1 LOG1 0xC7 ADDRESS 0x4C STATICCALL MUL SWAP2 PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER 0xB5 BALANCE 0x27 PUSH9 0x4A568B3173AE13B9F8 0xA6 ADD PUSH15 0x243E63B6E8EE1178D6A717850B5D61 SUB ",
              "sourceMap": "4145:2226:9:-:0;;;4988:296;;;;;;;;;;;;;;;;;;:::i;:::-;5079:6;5087:5;1154:52:2;5079:6:9;5087:5;1154:29:2;:52::i;:::-;1080:133;;5136:12:9::1;5121:28;;;;;:::i;:::-;-1:-1:-1::0;;;;;1818:32:13;;;1800:51;;1788:2;1773:18;5121:28:9::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;5104:46:9::1;;::::0;5238:39:::1;5263:13;5426:6:::0;;;5351:88;5263:13:::1;5238:24;:39::i;:::-;4988:296:::0;;;4145:2226;;2779:335:3;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:3;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;:::-;;2779:335;;:::o;2960:148::-;3079:18;:16;:18::i;:::-;2779:335;;:::o;4331:133::-;4394:34;4407:10;-1:-1:-1;;;;;;;;;;;3861:44:3;-1:-1:-1;;;;;3861:44:3;;3792:120;4407:10;4394:34;;;-1:-1:-1;;;;;2092:15:13;;;2074:34;;2144:15;;;2139:2;2124:18;;2117:43;2009:18;4394:34:3;;;;;;;4438:19;4448:8;4438:9;:19::i;:::-;4331:133;:::o;2186:281::-;2263:17;-1:-1:-1;;;;;2263:29:3;;2296:1;2263:34;2259:119;;2320:47;;-1:-1:-1;;;2320:47:3;;-1:-1:-1;;;;;1818:32:13;;2320:47:3;;;1800:51:13;1773:18;;2320:47:3;;;;;;;;2259:119;2443:17;1327:66;2387:47;:73;;-1:-1:-1;;;;;;2387:73:3;-1:-1:-1;;;;;2387:73:3;;;;;;;;;;-1:-1:-1;2186:281:3:o;4106:253:10:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:10;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4213:67:10;;-1:-1:-1;4213:67:10;-1:-1:-1;4297:55:10;4324:6;4213:67;;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:10:o;6598:122:3:-;6648:9;:13;6644:70;;6684:19;;-1:-1:-1;;;6684:19:3;;;;;;;;;;;6644:70;6598:122::o;3994:217::-;-1:-1:-1;;;;;4053:22:3;;4049:91;;4098:31;;-1:-1:-1;;;4098:31:3;;4126:1;4098:31;;;1800:51:13;1773:18;;4098:31:3;1654:203:13;4049:91:3;4196:8;-1:-1:-1;;;;;;;;;;;4149:38:3;1684:190:12:o;4625:582:10:-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:10;;;:23;5045:49;5041:119;;;5121:24;;-1:-1:-1;;;5121:24:10;;-1:-1:-1;;;;;1818:32:13;;5121:24:10;;;1800:51:13;1773:18;;5121:24:10;1654:203:13;5041:119:10;-1:-1:-1;5180:10:10;4793:408;4625:582;;;;;:::o;5743:516::-;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:10;;;;;;;;;;;4145:2226:9;;;;;;;;:::o;14:177:13:-;93:13;;-1:-1:-1;;;;;135:31:13;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:127::-;257:10;252:3;248:20;245:1;238:31;288:4;285:1;278:15;312:4;309:1;302:15;328:250;413:1;423:113;437:6;434:1;431:13;423:113;;;513:11;;;507:18;494:11;;;487:39;459:2;452:10;423:113;;;-1:-1:-1;;570:1:13;552:16;;545:27;328:250::o;583:1066::-;680:6;688;696;749:2;737:9;728:7;724:23;720:32;717:52;;;765:1;762;755:12;717:52;788:40;818:9;788:40;:::i;:::-;778:50;;847:49;892:2;881:9;877:18;847:49;:::i;:::-;940:2;925:18;;919:25;837:59;;-1:-1:-1;;;;;;993:14:13;;;990:34;;;1020:1;1017;1010:12;990:34;1058:6;1047:9;1043:22;1033:32;;1103:7;1096:4;1092:2;1088:13;1084:27;1074:55;;1125:1;1122;1115:12;1074:55;1154:2;1148:9;1176:2;1172;1169:10;1166:36;;;1182:18;;:::i;:::-;1257:2;1251:9;1225:2;1311:13;;-1:-1:-1;;1307:22:13;;;1331:2;1303:31;1299:40;1287:53;;;1355:18;;;1375:22;;;1352:46;1349:72;;;1401:18;;:::i;:::-;1441:10;1437:2;1430:22;1476:2;1468:6;1461:18;1516:7;1511:2;1506;1502;1498:11;1494:20;1491:33;1488:53;;;1537:1;1534;1527:12;1488:53;1550:68;1615:2;1610;1602:6;1598:15;1593:2;1589;1585:11;1550:68;:::i;:::-;1637:6;1627:16;;;;;;;583:1066;;;;;:::o;2171:287::-;2300:3;2338:6;2332:13;2354:66;2413:6;2408:3;2401:4;2393:6;2389:17;2354:66;:::i;:::-;2436:16;;;;;2171:287;-1:-1:-1;;2171:287:13:o;:::-;4145:2226:9;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_544": {
                  "entryPoint": null,
                  "id": 544,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_checkNonPayable_508": {
                  "entryPoint": 619,
                  "id": 508,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_delegate_520": {
                  "entryPoint": 341,
                  "id": 520,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_dispatchUpgradeToAndCall_883": {
                  "entryPoint": 131,
                  "id": 883,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_fallback_536": {
                  "entryPoint": 178,
                  "id": 536,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_fallback_854": {
                  "entryPoint": 14,
                  "id": 854,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_implementation_205": {
                  "entryPoint": 285,
                  "id": 205,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@_proxyAdmin_820": {
                  "entryPoint": null,
                  "id": 820,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@_revert_1136": {
                  "entryPoint": 745,
                  "id": 1136,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_setImplementation_294": {
                  "entryPoint": 377,
                  "id": 294,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@functionDelegateCall_1056": {
                  "entryPoint": 501,
                  "id": 1056,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@getAddressSlot_1199": {
                  "entryPoint": null,
                  "id": 1199,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@getImplementation_267": {
                  "entryPoint": null,
                  "id": 267,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@upgradeToAndCall_328": {
                  "entryPoint": 194,
                  "id": 328,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@verifyCallResultFromTarget_1096": {
                  "entryPoint": 650,
                  "id": 1096,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address_payablet_bytes_memory_ptr": {
                  "entryPoint": 850,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 1058,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "calldata_array_index_range_access_t_bytes_calldata_ptr": {
                  "entryPoint": 786,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 2
                },
                "panic_error_0x41": {
                  "entryPoint": 828,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:2212:13",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:13",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "144:201:13",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "182:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "191:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "194:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "184:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "184:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "184:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "startIndex",
                                    "nodeType": "YulIdentifier",
                                    "src": "160:10:13"
                                  },
                                  {
                                    "name": "endIndex",
                                    "nodeType": "YulIdentifier",
                                    "src": "172:8:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "157:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "157:24:13"
                              },
                              "nodeType": "YulIf",
                              "src": "154:44:13"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "231:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "240:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "243:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "233:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "233:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "233:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "endIndex",
                                    "nodeType": "YulIdentifier",
                                    "src": "213:8:13"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "223:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "210:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "210:20:13"
                              },
                              "nodeType": "YulIf",
                              "src": "207:40:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "256:36:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "273:6:13"
                                  },
                                  {
                                    "name": "startIndex",
                                    "nodeType": "YulIdentifier",
                                    "src": "281:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "269:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "269:23:13"
                              },
                              "variableNames": [
                                {
                                  "name": "offsetOut",
                                  "nodeType": "YulIdentifier",
                                  "src": "256:9:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "301:38:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "endIndex",
                                    "nodeType": "YulIdentifier",
                                    "src": "318:8:13"
                                  },
                                  {
                                    "name": "startIndex",
                                    "nodeType": "YulIdentifier",
                                    "src": "328:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "314:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "314:25:13"
                              },
                              "variableNames": [
                                {
                                  "name": "lengthOut",
                                  "nodeType": "YulIdentifier",
                                  "src": "301:9:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "calldata_array_index_range_access_t_bytes_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "78:6:13",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "86:6:13",
                            "type": ""
                          },
                          {
                            "name": "startIndex",
                            "nodeType": "YulTypedName",
                            "src": "94:10:13",
                            "type": ""
                          },
                          {
                            "name": "endIndex",
                            "nodeType": "YulTypedName",
                            "src": "106:8:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "offsetOut",
                            "nodeType": "YulTypedName",
                            "src": "119:9:13",
                            "type": ""
                          },
                          {
                            "name": "lengthOut",
                            "nodeType": "YulTypedName",
                            "src": "130:9:13",
                            "type": ""
                          }
                        ],
                        "src": "14:331:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "382:95:13",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "399:1:13",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "406:3:13",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "411:10:13",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "402:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "402:20:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "392:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "392:31:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "392:31:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "439:1:13",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "442:4:13",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "432:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "432:15:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "432:15:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "463:1:13",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "466:4:13",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "456:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "456:15:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "456:15:13"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "350:127:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "586:999:13",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "632:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "641:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "644:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "634:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "634:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "634:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "607:7:13"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "616:9:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "603:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "603:23:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "628:2:13",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "599:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "599:32:13"
                              },
                              "nodeType": "YulIf",
                              "src": "596:52:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "657:36:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "683:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "670:12:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "670:23:13"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "661:5:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "756:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "765:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "768:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "758:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "758:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "758:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "715:5:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "726:5:13"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "741:3:13",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "746:1:13",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "737:3:13"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "737:11:13"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "750:1:13",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "733:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "733:19:13"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "722:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "722:31:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "712:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "712:42:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "705:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "705:50:13"
                              },
                              "nodeType": "YulIf",
                              "src": "702:70:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "781:15:13",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "791:5:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "781:6:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "805:46:13",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "836:9:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "847:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "832:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "832:18:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "819:12:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "819:32:13"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "809:6:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "860:28:13",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "870:18:13",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "864:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "915:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "924:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "927:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "917:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "917:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "917:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "903:6:13"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "911:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "900:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "900:14:13"
                              },
                              "nodeType": "YulIf",
                              "src": "897:34:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "940:32:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "954:9:13"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "965:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "950:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "950:22:13"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "944:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1020:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1029:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1032:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1022:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1022:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1022:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "999:2:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1003:4:13",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "995:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "995:13:13"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1010:7:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "991:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "991:27:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "984:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "984:35:13"
                              },
                              "nodeType": "YulIf",
                              "src": "981:55:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1045:26:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1068:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1055:12:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1055:16:13"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "1049:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1094:22:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1096:16:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1096:18:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1096:18:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1086:2:13"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1090:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1083:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1083:10:13"
                              },
                              "nodeType": "YulIf",
                              "src": "1080:36:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1125:17:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1139:2:13",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "1135:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1135:7:13"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "1129:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1151:23:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1171:2:13",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1165:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1165:9:13"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1155:6:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1183:71:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1205:6:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "_3",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1229:2:13"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "1233:4:13",
                                                    "type": "",
                                                    "value": "0x1f"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1225:3:13"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1225:13:13"
                                              },
                                              {
                                                "name": "_4",
                                                "nodeType": "YulIdentifier",
                                                "src": "1240:2:13"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "1221:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1221:22:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1245:2:13",
                                            "type": "",
                                            "value": "63"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1217:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1217:31:13"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "1250:2:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1213:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1213:40:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1201:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1201:53:13"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1187:10:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1313:22:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1315:16:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1315:18:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1315:18:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1272:10:13"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1284:2:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1269:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1269:18:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1292:10:13"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1304:6:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1289:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1289:22:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "1266:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1266:46:13"
                              },
                              "nodeType": "YulIf",
                              "src": "1263:72:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1351:2:13",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1355:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1344:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1344:22:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1344:22:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1382:6:13"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1390:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1375:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1375:18:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1375:18:13"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1439:16:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1448:1:13",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1451:1:13",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1441:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1441:12:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1441:12:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "1416:2:13"
                                          },
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "1420:2:13"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1412:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1412:11:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1425:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1408:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1408:20:13"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1430:7:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1405:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1405:33:13"
                              },
                              "nodeType": "YulIf",
                              "src": "1402:53:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1481:6:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1489:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1477:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1477:15:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "1498:2:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1502:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1494:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1494:11:13"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1507:2:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "1464:12:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1464:46:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1464:46:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "memPtr",
                                            "nodeType": "YulIdentifier",
                                            "src": "1534:6:13"
                                          },
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "1542:2:13"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1530:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1530:15:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1547:2:13",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1526:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1526:24:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1552:1:13",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1519:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1519:35:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1519:35:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1563:16:13",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "1573:6:13"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1563:6:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_payablet_bytes_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "544:9:13",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "555:7:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "567:6:13",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "575:6:13",
                            "type": ""
                          }
                        ],
                        "src": "482:1103:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1691:102:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1701:26:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1713:9:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1724:2:13",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1709:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1709:18:13"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1701:4:13"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1743:9:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1758:6:13"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1774:3:13",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1779:1:13",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1770:3:13"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1770:11:13"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1783:1:13",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1766:3:13"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1766:19:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1754:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1754:32:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1736:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1736:51:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1736:51:13"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1660:9:13",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1671:6:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1682:4:13",
                            "type": ""
                          }
                        ],
                        "src": "1590:203:13"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1935:275:13",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1945:27:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1965:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1959:5:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1959:13:13"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "1949:6:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1981:10:13",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1990:1:13",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "1985:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2052:77:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "pos",
                                              "nodeType": "YulIdentifier",
                                              "src": "2077:3:13"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "2082:1:13"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "2073:3:13"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2073:11:13"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "value0",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2100:6:13"
                                                    },
                                                    {
                                                      "name": "i",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2108:1:13"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2096:3:13"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "2096:14:13"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "2112:4:13",
                                                  "type": "",
                                                  "value": "0x20"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "2092:3:13"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "2092:25:13"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "2086:5:13"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2086:32:13"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2066:6:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2066:53:13"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2066:53:13"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "2011:1:13"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2014:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2008:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2008:13:13"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "2022:21:13",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "2024:17:13",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "2033:1:13"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2036:4:13",
                                          "type": "",
                                          "value": "0x20"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "2029:3:13"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2029:12:13"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "2024:1:13"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "2004:3:13",
                                "statements": []
                              },
                              "src": "2000:129:13"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2138:26:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "2152:3:13"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2157:6:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2148:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2148:16:13"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2142:2:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2180:2:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2184:1:13",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2173:6:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2173:13:13"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2173:13:13"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2195:9:13",
                              "value": {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "2202:2:13"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "2195:3:13"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "1911:3:13",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1916:6:13",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "1927:3:13",
                            "type": ""
                          }
                        ],
                        "src": "1798:412:13"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function calldata_array_index_range_access_t_bytes_calldata_ptr(offset, length, startIndex, endIndex) -> offsetOut, lengthOut\n    {\n        if gt(startIndex, endIndex) { revert(0, 0) }\n        if gt(endIndex, length) { revert(0, 0) }\n        offsetOut := add(offset, startIndex)\n        lengthOut := sub(endIndex, startIndex)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_address_payablet_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), 0)\n        value1 := memPtr\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            mstore(add(pos, i), mload(add(add(value0, i), 0x20)))\n        }\n        let _1 := add(pos, length)\n        mstore(_1, 0)\n        end := _1\n    }\n}",
                  "id": 13,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {
                "775": [
                  {
                    "length": 32,
                    "start": 16
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea2646970667358221220d8ed0666e0d5b86fe11f185aac6b3afdbcea970bbbf2bb81eb0ed14076ef240d64736f6c63430008140033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH2 0xC PUSH2 0xE JUMP JUMPDEST STOP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH4 0x278F7943 PUSH1 0xE1 SHL EQ PUSH2 0x71 JUMPI PUSH1 0x40 MLOAD PUSH4 0x34AD5DBB PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x79 PUSH2 0x83 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x79 PUSH2 0xB2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x93 CALLDATASIZE PUSH1 0x4 DUP2 DUP5 PUSH2 0x312 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xA0 SWAP2 SWAP1 PUSH2 0x352 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xAE DUP3 DUP3 PUSH2 0xC2 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x79 PUSH2 0xBD PUSH2 0x11D JUMP JUMPDEST PUSH2 0x155 JUMP JUMPDEST PUSH2 0xCB DUP3 PUSH2 0x179 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 DUP1 MLOAD ISZERO PUSH2 0x115 JUMPI PUSH2 0x110 DUP3 DUP3 PUSH2 0x1F5 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xAE PUSH2 0x26B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x150 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x174 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE PUSH1 0x0 SUB PUSH2 0x1B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4C9C8CE3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x212 SWAP2 SWAP1 PUSH2 0x422 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x24D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x252 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x262 DUP6 DUP4 DUP4 PUSH2 0x28A JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0x79 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB398979F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 PUSH2 0x29F JUMPI PUSH2 0x29A DUP3 PUSH2 0x2E9 JUMP JUMPDEST PUSH2 0x2E2 JUMP JUMPDEST DUP2 MLOAD ISZERO DUP1 ISZERO PUSH2 0x2B6 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO JUMPDEST ISZERO PUSH2 0x2DF JUMPI PUSH1 0x40 MLOAD PUSH4 0x9996B315 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1AB JUMP JUMPDEST POP DUP1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x2F9 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA12F521 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 GT ISZERO PUSH2 0x322 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP7 GT ISZERO PUSH2 0x32F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP3 ADD SWAP4 SWAP2 SWAP1 SWAP3 SUB SWAP2 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x365 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x37C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x3BF JUMPI PUSH2 0x3BF PUSH2 0x33C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x3E7 JUMPI PUSH2 0x3E7 PUSH2 0x33C JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x400 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x443 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x429 JUMP JUMPDEST POP PUSH1 0x0 SWAP3 ADD SWAP2 DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD8 0xED MOD PUSH7 0xE0D5B86FE11F18 GAS 0xAC PUSH12 0x3AFDBCEA970BBBF2BB81EB0E 0xD1 BLOCKHASH PUSH23 0xEF240D64736F6C63430008140033000000000000000000 ",
              "sourceMap": "4145:2226:9:-:0;;;2649:11:4;:9;:11::i;:::-;4145:2226:9;5581:369;5426:6;-1:-1:-1;;;;;5642:27:9;:10;:27;5638:306;;5689:7;;-1:-1:-1;;;;;;5689:7:9;-1:-1:-1;;;5689:65:9;5685:201;;5781:24;;-1:-1:-1;;;5781:24:9;;;;;;;;;;;5685:201;5844:27;:25;:27::i;:::-;5581:369::o;5638:306::-;5916:17;:15;:17::i;6152:217::-;6208:25;;6267:12;:8;6276:1;6267:8;6208:25;6267:12;:::i;:::-;6256:42;;;;;;;:::i;:::-;6207:91;;;;6308:54;6338:17;6357:4;6308:29;:54::i;:::-;6197:172;;6152:217::o;2323:83:4:-;2371:28;2381:17;:15;:17::i;:::-;2371:9;:28::i;2779:335:3:-;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:3;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;:::-;;6197:172:9;;6152:217::o;2960:148:3:-;3079:18;:16;:18::i;1581:132:2:-;1648:7;1674:32;1327:66:3;2035:53;-1:-1:-1;;;;;2035:53:3;;1957:138;1674:32:2;1667:39;;1581:132;:::o;949:895:4:-;1287:14;1284:1;1281;1268:34;1501:1;1498;1482:14;1479:1;1463:14;1456:5;1443:60;1577:16;1574:1;1571;1556:38;1615:6;1682:66;;;;1797:16;1794:1;1787:27;1682:66;1717:16;1714:1;1707:27;2186:281:3;2263:17;-1:-1:-1;;;;;2263:29:3;;2296:1;2263:34;2259:119;;2320:47;;-1:-1:-1;;;2320:47:3;;-1:-1:-1;;;;;1754:32:13;;2320:47:3;;;1736:51:13;1709:18;;2320:47:3;;;;;;;;2259:119;1327:66;2387:73;;-1:-1:-1;;;;;;2387:73:3;-1:-1:-1;;;;;2387:73:3;;;;;;;;;;2186:281::o;4106:253:10:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:10;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:67;;;;4297:55;4324:6;4332:7;4341:10;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:10:o;6598:122:3:-;6648:9;:13;6644:70;;6684:19;;-1:-1:-1;;;6684:19:3;;;;;;;;;;;4625:582:10;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:10;;;:23;5045:49;5041:119;;;5121:24;;-1:-1:-1;;;5121:24:10;;-1:-1:-1;;;;;1754:32:13;;5121:24:10;;;1736:51:13;1709:18;;5121:24:10;1590:203:13;5041:119:10;-1:-1:-1;5180:10:10;4793:408;4625:582;;;;;:::o;5743:516::-;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:10;;;;;;;;;;;14:331:13;119:9;130;172:8;160:10;157:24;154:44;;;194:1;191;184:12;154:44;223:6;213:8;210:20;207:40;;;243:1;240;233:12;207:40;-1:-1:-1;;269:23:13;;;314:25;;;;;-1:-1:-1;14:331:13:o;350:127::-;411:10;406:3;402:20;399:1;392:31;442:4;439:1;432:15;466:4;463:1;456:15;482:1103;567:6;575;628:2;616:9;607:7;603:23;599:32;596:52;;;644:1;641;634:12;596:52;670:23;;-1:-1:-1;;;;;722:31:13;;712:42;;702:70;;768:1;765;758:12;702:70;791:5;-1:-1:-1;847:2:13;832:18;;819:32;870:18;900:14;;;897:34;;;927:1;924;917:12;897:34;965:6;954:9;950:22;940:32;;1010:7;1003:4;999:2;995:13;991:27;981:55;;1032:1;1029;1022:12;981:55;1068:2;1055:16;1090:2;1086;1083:10;1080:36;;;1096:18;;:::i;:::-;1171:2;1165:9;1139:2;1225:13;;-1:-1:-1;;1221:22:13;;;1245:2;1217:31;1213:40;1201:53;;;1269:18;;;1289:22;;;1266:46;1263:72;;;1315:18;;:::i;:::-;1355:10;1351:2;1344:22;1390:2;1382:6;1375:18;1430:7;1425:2;1420;1416;1412:11;1408:20;1405:33;1402:53;;;1451:1;1448;1441:12;1402:53;1507:2;1502;1498;1494:11;1489:2;1481:6;1477:15;1464:46;1552:1;1547:2;1542;1534:6;1530:15;1526:24;1519:35;1573:6;1563:16;;;;;;;482:1103;;;;;:::o;1798:412::-;1927:3;1965:6;1959:13;1990:1;2000:129;2014:6;2011:1;2008:13;2000:129;;;2112:4;2096:14;;;2092:25;;2086:32;2073:11;;;2066:53;2029:12;2000:129;;;-1:-1:-1;2184:1:13;2148:16;;2173:13;;;-1:-1:-1;2148:16:13;1798:412;-1:-1:-1;1798:412:13:o"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProxyDeniedAdminAccess\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable through an associated {ProxyAdmin} instance. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches the {ITransparentUpgradeableProxy-upgradeToAndCall} function exposed by the proxy itself. 2. If the admin calls the proxy, it can call the `upgradeToAndCall` function but any other call won't be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error indicating the proxy admin cannot fallback to the target implementation. These properties mean that the admin account can only be used for upgrading the proxy, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. For this reason, the proxy deploys an instance of {ProxyAdmin} and allows upgrades only if they come through it. You should think of the `ProxyAdmin` instance as the administrative interface of the proxy, including the ability to change who can trigger upgrades by transferring ownership. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead `upgradeToAndCall` is implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. NOTE: This proxy does not inherit from {Context} deliberately. The {ProxyAdmin} of this contract won't send a meta-transaction in any way, and any other meta-transaction setup should be made in the implementation contract. IMPORTANT: This contract avoids unnecessary storage reads by setting the admin only during construction as an immutable variable, preventing any changes thereafter. However, the admin slot defined in ERC-1967 can still be overwritten by the implementation logic pointed to by this proxy. In such cases, the contract may end up in an undesirable state where the admin slot is different from the actual admin. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the `upgradeToAndCall` function inaccessible, preventing upgradeability and compromising transparency.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidAdmin(address)\":[{\"details\":\"The `admin` of the proxy is invalid.\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"ProxyDeniedAdminAccess()\":[{\"details\":\"The proxy caller is the current admin, and can't fallback to the proxy target.\"}]},\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by an instance of a {ProxyAdmin} with an `initialOwner`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xbfb6695731de677140fbf76c772ab08c4233a122fb51ac28ac120fc49bbbc4ec\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://68f8fded7cc318efa15874b7c6a983fe17a4a955d72d240353a9a4ca1e1b824c\",\"dweb:/ipfs/QmdcmBL9Qo4Tk3Dby4wFYabGyot9JNeLPxpSXZUgUm92BV\"]},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol\":{\"keccak256\":\"0x371c3467dccfbb2ac03b0edb4fadaacb9ad382772cee7850a3e73f39a56d102c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3574f1cc3ff2cb985a1385949bd3c76888e8dcf59e6a770ccb15c79b145b39bb\",\"dweb:/ipfs/QmXZDrFibUAMqjoRrpKxV3ma5RR9YfJXZyMrLWJ3bix9gi\"]},\"@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"keccak256\":\"0xbc9babed4d136e6cc1e74354aa66538a234f3808645fbe30463b4a7b7d8ca789\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75fd9323b206da2a87924fca2ca996dbd04ae0963f79f66fb8a0ef94bf283a3d\",\"dweb:/ipfs/QmYSoLcvpq8gRo8doLP4nnB43UAT1D3KvfFJRDSD2y4nYu\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Address.sol": {
        "Address": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "target",
                  "type": "address"
                }
              ],
              "name": "AddressEmptyCode",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "AddressInsufficientBalance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "FailedInnerCall",
              "type": "error"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203a752d4b725cec5c0cc945f121b6c9b153f6634a9e599679e926ab1c252da8c964736f6c63430008140033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GASPRICE PUSH22 0x2D4B725CEC5C0CC945F121B6C9B153F6634A9E599679 0xE9 0x26 0xAB SHR 0x25 0x2D 0xA8 0xC9 PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ",
              "sourceMap": "195:6066:10:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;195:6066:10;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203a752d4b725cec5c0cc945f121b6c9b153f6634a9e599679e926ab1c252da8c964736f6c63430008140033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GASPRICE PUSH22 0x2D4B725CEC5C0CC945F121B6C9B153F6634A9E599679 0xE9 0x26 0xAB SHR 0x25 0x2D 0xA8 0xC9 PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ",
              "sourceMap": "195:6066:10:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Context.sol": {
        "Context": {
          "abi": [],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"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.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/StorageSlot.sol": {
        "StorageSlot": {
          "abi": [],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d8aca57778cf6eb93bdd7d4afd8f8938dc9defec20085a42fe457385086111f264736f6c63430008140033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD8 0xAC 0xA5 PUSH24 0x78CF6EB93BDD7D4AFD8F8938DC9DEFEC20085A42FE457385 ADDMOD PUSH2 0x11F2 PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ",
              "sourceMap": "1245:2685:12:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1245:2685:12;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d8aca57778cf6eb93bdd7d4afd8f8938dc9defec20085a42fe457385086111f264736f6c63430008140033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD8 0xAC 0xA5 PUSH24 0x78CF6EB93BDD7D4AFD8F8938DC9DEFEC20085A42FE457385 ADDMOD PUSH2 0x11F2 PUSH5 0x736F6C6343 STOP ADDMOD EQ STOP CALLER ",
              "sourceMap": "1245:2685:12:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"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;     } } ```\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":\"StorageSlot\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]}},\"version\":1}"
        }
      }
    }
  }
}