{
    "abi": [
        {
            "type": "function",
            "name": "UPGRADE_INTERFACE_VERSION",
            "inputs": [],
            "outputs": [
                {
                    "name": "",
                    "type": "string",
                    "internalType": "string"
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "calculateHeaderHash",
            "inputs": [
                {
                    "name": "_header",
                    "type": "tuple",
                    "internalType": "struct CanonicalStateChain.Header",
                    "components": [
                        {
                            "name": "epoch",
                            "type": "uint64",
                            "internalType": "uint64"
                        },
                        {
                            "name": "l2Height",
                            "type": "uint64",
                            "internalType": "uint64"
                        },
                        {
                            "name": "prevHash",
                            "type": "bytes32",
                            "internalType": "bytes32"
                        },
                        {
                            "name": "outputRoot",
                            "type": "bytes32",
                            "internalType": "bytes32"
                        },
                        {
                            "name": "celestiaPointers",
                            "type": "tuple[]",
                            "internalType": "struct CanonicalStateChain.CelestiaPointer[]",
                            "components": [
                                {
                                    "name": "height",
                                    "type": "uint64",
                                    "internalType": "uint64"
                                },
                                {
                                    "name": "shareStart",
                                    "type": "uint24",
                                    "internalType": "uint24"
                                },
                                {
                                    "name": "shareLen",
                                    "type": "uint16",
                                    "internalType": "uint16"
                                }
                            ]
                        }
                    ]
                }
            ],
            "outputs": [
                {
                    "name": "",
                    "type": "bytes32",
                    "internalType": "bytes32"
                }
            ],
            "stateMutability": "pure"
        },
        {
            "type": "function",
            "name": "chain",
            "inputs": [
                {
                    "name": "",
                    "type": "uint256",
                    "internalType": "uint256"
                }
            ],
            "outputs": [
                {
                    "name": "",
                    "type": "bytes32",
                    "internalType": "bytes32"
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "chainHead",
            "inputs": [],
            "outputs": [
                {
                    "name": "",
                    "type": "uint256",
                    "internalType": "uint256"
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "challenge",
            "inputs": [],
            "outputs": [
                {
                    "name": "",
                    "type": "address",
                    "internalType": "address"
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "getHead",
            "inputs": [],
            "outputs": [
                {
                    "name": "",
                    "type": "tuple",
                    "internalType": "struct CanonicalStateChain.Header",
                    "components": [
                        {
                            "name": "epoch",
                            "type": "uint64",
                            "internalType": "uint64"
                        },
                        {
                            "name": "l2Height",
                            "type": "uint64",
                            "internalType": "uint64"
                        },
                        {
                            "name": "prevHash",
                            "type": "bytes32",
                            "internalType": "bytes32"
                        },
                        {
                            "name": "outputRoot",
                            "type": "bytes32",
                            "internalType": "bytes32"
                        },
                        {
                            "name": "celestiaPointers",
                            "type": "tuple[]",
                            "internalType": "struct CanonicalStateChain.CelestiaPointer[]",
                            "components": [
                                {
                                    "name": "height",
                                    "type": "uint64",
                                    "internalType": "uint64"
                                },
                                {
                                    "name": "shareStart",
                                    "type": "uint24",
                                    "internalType": "uint24"
                                },
                                {
                                    "name": "shareLen",
                                    "type": "uint16",
                                    "internalType": "uint16"
                                }
                            ]
                        }
                    ]
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "getHeaderByHash",
            "inputs": [
                {
                    "name": "_hash",
                    "type": "bytes32",
                    "internalType": "bytes32"
                }
            ],
            "outputs": [
                {
                    "name": "",
                    "type": "tuple",
                    "internalType": "struct CanonicalStateChain.Header",
                    "components": [
                        {
                            "name": "epoch",
                            "type": "uint64",
                            "internalType": "uint64"
                        },
                        {
                            "name": "l2Height",
                            "type": "uint64",
                            "internalType": "uint64"
                        },
                        {
                            "name": "prevHash",
                            "type": "bytes32",
                            "internalType": "bytes32"
                        },
                        {
                            "name": "outputRoot",
                            "type": "bytes32",
                            "internalType": "bytes32"
                        },
                        {
                            "name": "celestiaPointers",
                            "type": "tuple[]",
                            "internalType": "struct CanonicalStateChain.CelestiaPointer[]",
                            "components": [
                                {
                                    "name": "height",
                                    "type": "uint64",
                                    "internalType": "uint64"
                                },
                                {
                                    "name": "shareStart",
                                    "type": "uint24",
                                    "internalType": "uint24"
                                },
                                {
                                    "name": "shareLen",
                                    "type": "uint16",
                                    "internalType": "uint16"
                                }
                            ]
                        }
                    ]
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "getHeaderByNum",
            "inputs": [
                {
                    "name": "_index",
                    "type": "uint256",
                    "internalType": "uint256"
                }
            ],
            "outputs": [
                {
                    "name": "",
                    "type": "tuple",
                    "internalType": "struct CanonicalStateChain.Header",
                    "components": [
                        {
                            "name": "epoch",
                            "type": "uint64",
                            "internalType": "uint64"
                        },
                        {
                            "name": "l2Height",
                            "type": "uint64",
                            "internalType": "uint64"
                        },
                        {
                            "name": "prevHash",
                            "type": "bytes32",
                            "internalType": "bytes32"
                        },
                        {
                            "name": "outputRoot",
                            "type": "bytes32",
                            "internalType": "bytes32"
                        },
                        {
                            "name": "celestiaPointers",
                            "type": "tuple[]",
                            "internalType": "struct CanonicalStateChain.CelestiaPointer[]",
                            "components": [
                                {
                                    "name": "height",
                                    "type": "uint64",
                                    "internalType": "uint64"
                                },
                                {
                                    "name": "shareStart",
                                    "type": "uint24",
                                    "internalType": "uint24"
                                },
                                {
                                    "name": "shareLen",
                                    "type": "uint16",
                                    "internalType": "uint16"
                                }
                            ]
                        }
                    ]
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "getL2Output",
            "inputs": [
                {
                    "name": "_index",
                    "type": "uint256",
                    "internalType": "uint256"
                }
            ],
            "outputs": [
                {
                    "name": "",
                    "type": "tuple",
                    "internalType": "struct CanonicalStateChain.Output",
                    "components": [
                        {
                            "name": "outputRoot",
                            "type": "bytes32",
                            "internalType": "bytes32"
                        },
                        {
                            "name": "timestamp",
                            "type": "uint64",
                            "internalType": "uint64"
                        }
                    ]
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "headerMetadata",
            "inputs": [
                {
                    "name": "",
                    "type": "bytes32",
                    "internalType": "bytes32"
                }
            ],
            "outputs": [
                {
                    "name": "timestamp",
                    "type": "uint64",
                    "internalType": "uint64"
                },
                {
                    "name": "publisher",
                    "type": "address",
                    "internalType": "address"
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "initialize",
            "inputs": [
                {
                    "name": "_publisher",
                    "type": "address",
                    "internalType": "address"
                },
                {
                    "name": "_header",
                    "type": "tuple",
                    "internalType": "struct CanonicalStateChain.Header",
                    "components": [
                        {
                            "name": "epoch",
                            "type": "uint64",
                            "internalType": "uint64"
                        },
                        {
                            "name": "l2Height",
                            "type": "uint64",
                            "internalType": "uint64"
                        },
                        {
                            "name": "prevHash",
                            "type": "bytes32",
                            "internalType": "bytes32"
                        },
                        {
                            "name": "outputRoot",
                            "type": "bytes32",
                            "internalType": "bytes32"
                        },
                        {
                            "name": "celestiaPointers",
                            "type": "tuple[]",
                            "internalType": "struct CanonicalStateChain.CelestiaPointer[]",
                            "components": [
                                {
                                    "name": "height",
                                    "type": "uint64",
                                    "internalType": "uint64"
                                },
                                {
                                    "name": "shareStart",
                                    "type": "uint24",
                                    "internalType": "uint24"
                                },
                                {
                                    "name": "shareLen",
                                    "type": "uint16",
                                    "internalType": "uint16"
                                }
                            ]
                        }
                    ]
                }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "maxPointers",
            "inputs": [],
            "outputs": [
                {
                    "name": "",
                    "type": "uint8",
                    "internalType": "uint8"
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "owner",
            "inputs": [],
            "outputs": [
                {
                    "name": "",
                    "type": "address",
                    "internalType": "address"
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "proxiableUUID",
            "inputs": [],
            "outputs": [
                {
                    "name": "",
                    "type": "bytes32",
                    "internalType": "bytes32"
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "publisher",
            "inputs": [],
            "outputs": [
                {
                    "name": "",
                    "type": "address",
                    "internalType": "address"
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "pushBlock",
            "inputs": [
                {
                    "name": "_header",
                    "type": "tuple",
                    "internalType": "struct CanonicalStateChain.Header",
                    "components": [
                        {
                            "name": "epoch",
                            "type": "uint64",
                            "internalType": "uint64"
                        },
                        {
                            "name": "l2Height",
                            "type": "uint64",
                            "internalType": "uint64"
                        },
                        {
                            "name": "prevHash",
                            "type": "bytes32",
                            "internalType": "bytes32"
                        },
                        {
                            "name": "outputRoot",
                            "type": "bytes32",
                            "internalType": "bytes32"
                        },
                        {
                            "name": "celestiaPointers",
                            "type": "tuple[]",
                            "internalType": "struct CanonicalStateChain.CelestiaPointer[]",
                            "components": [
                                {
                                    "name": "height",
                                    "type": "uint64",
                                    "internalType": "uint64"
                                },
                                {
                                    "name": "shareStart",
                                    "type": "uint24",
                                    "internalType": "uint24"
                                },
                                {
                                    "name": "shareLen",
                                    "type": "uint16",
                                    "internalType": "uint16"
                                }
                            ]
                        }
                    ]
                }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "renounceOwnership",
            "inputs": [],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "rollback",
            "inputs": [
                {
                    "name": "_blockNumber",
                    "type": "uint256",
                    "internalType": "uint256"
                },
                {
                    "name": "_blockHash",
                    "type": "bytes32",
                    "internalType": "bytes32"
                }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "setChallengeContract",
            "inputs": [
                {
                    "name": "_challenge",
                    "type": "address",
                    "internalType": "address"
                }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "setMaxPointers",
            "inputs": [
                {
                    "name": "_maxPointers",
                    "type": "uint8",
                    "internalType": "uint8"
                }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "setPublisher",
            "inputs": [
                {
                    "name": "_publisher",
                    "type": "address",
                    "internalType": "address"
                }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "startingTimestamp",
            "inputs": [],
            "outputs": [
                {
                    "name": "",
                    "type": "uint64",
                    "internalType": "uint64"
                }
            ],
            "stateMutability": "view"
        },
        {
            "type": "function",
            "name": "transferOwnership",
            "inputs": [
                {
                    "name": "newOwner",
                    "type": "address",
                    "internalType": "address"
                }
            ],
            "outputs": [],
            "stateMutability": "nonpayable"
        },
        {
            "type": "function",
            "name": "upgradeToAndCall",
            "inputs": [
                {
                    "name": "newImplementation",
                    "type": "address",
                    "internalType": "address"
                },
                {
                    "name": "data",
                    "type": "bytes",
                    "internalType": "bytes"
                }
            ],
            "outputs": [],
            "stateMutability": "payable"
        },
        {
            "type": "event",
            "name": "BlockAdded",
            "inputs": [
                {
                    "name": "blockNumber",
                    "type": "uint256",
                    "indexed": true,
                    "internalType": "uint256"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "ChallengeChanged",
            "inputs": [
                {
                    "name": "challenge",
                    "type": "address",
                    "indexed": true,
                    "internalType": "address"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "Initialized",
            "inputs": [
                {
                    "name": "version",
                    "type": "uint64",
                    "indexed": false,
                    "internalType": "uint64"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "OwnershipTransferred",
            "inputs": [
                {
                    "name": "previousOwner",
                    "type": "address",
                    "indexed": true,
                    "internalType": "address"
                },
                {
                    "name": "newOwner",
                    "type": "address",
                    "indexed": true,
                    "internalType": "address"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "PublisherChanged",
            "inputs": [
                {
                    "name": "publisher",
                    "type": "address",
                    "indexed": true,
                    "internalType": "address"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "RolledBack",
            "inputs": [
                {
                    "name": "blockNumber",
                    "type": "uint256",
                    "indexed": true,
                    "internalType": "uint256"
                }
            ],
            "anonymous": false
        },
        {
            "type": "event",
            "name": "Upgraded",
            "inputs": [
                {
                    "name": "implementation",
                    "type": "address",
                    "indexed": true,
                    "internalType": "address"
                }
            ],
            "anonymous": false
        },
        {
            "type": "error",
            "name": "AddressEmptyCode",
            "inputs": [
                {
                    "name": "target",
                    "type": "address",
                    "internalType": "address"
                }
            ]
        },
        {
            "type": "error",
            "name": "ERC1967InvalidImplementation",
            "inputs": [
                {
                    "name": "implementation",
                    "type": "address",
                    "internalType": "address"
                }
            ]
        },
        {
            "type": "error",
            "name": "ERC1967NonPayable",
            "inputs": []
        },
        {
            "type": "error",
            "name": "FailedInnerCall",
            "inputs": []
        },
        {
            "type": "error",
            "name": "InvalidInitialization",
            "inputs": []
        },
        {
            "type": "error",
            "name": "NotInitializing",
            "inputs": []
        },
        {
            "type": "error",
            "name": "OwnableInvalidOwner",
            "inputs": [
                {
                    "name": "owner",
                    "type": "address",
                    "internalType": "address"
                }
            ]
        },
        {
            "type": "error",
            "name": "OwnableUnauthorizedAccount",
            "inputs": [
                {
                    "name": "account",
                    "type": "address",
                    "internalType": "address"
                }
            ]
        },
        {
            "type": "error",
            "name": "UUPSUnauthorizedCallContext",
            "inputs": []
        },
        {
            "type": "error",
            "name": "UUPSUnsupportedProxiableUUID",
            "inputs": [
                {
                    "name": "slot",
                    "type": "bytes32",
                    "internalType": "bytes32"
                }
            ]
        }
    ],
    "bytecode": {
        "object": "0x60a0806040523461002a57306080526119af90816100308239608051818181610c1f0152610cfe0152f35b600080fdfe608060409080825260048036101561001657600080fd5b600092833560e01c9283628f51c6146114705750826328a8d0e41461142f57826334c9bca5146111f557826341d3ecd814610f265782634411470314610ee95782634f1ef28614610c8357826352d1902d14610c0b5782635852cc0c14610be3578263691bc74a14610bc15782636d1005c514610b8c578263715018a614610b225782637255f37e14610a2e57826388786272146109f55782638c72c54e146109cd5782638da5cb5b146109975782638f74b7391461052d578263a25ae557146104bb578263ad3cb1cc14610441578263b37256b9146103d9578263b76971ce146102eb578263cab6366114610285578263d2ef739814610258578263dc281aff1461015c57505063f2fde38b1461012d57600080fd5b346101595760203660031901126101595761015661014961148c565b6101516118a5565b611831565b80f35b80fd5b9091503461025457826003193601126102545782906101796117ba565b5060025482526020926006845281832054835283528082209281519261019e846114d8565b8454916001600160401b0383818095168752851c168186015260036001966001810154868801526002810154606088015201908154926101dd84611543565b946101ea8751968761150e565b84865282860193825282822091935b85851061021857608089018790528751806102148b82611682565b0390f35b898481928a51610227816114f3565b61ffff8c62ffffff895480928a821686521c168584015260581c168c8201528152019301940193916101f9565b8280fd5b83903461028157816003193601126102815760015490516001600160a01b039091168152602090f35b5080fd5b83346101595760203660031901126101595761029f61148c565b6102a76118a5565b81546001600160a01b0319166001600160a01b039190911690811782557f55eb99d77b0e1ed261c0a8d11f026f811b8af01455a2b45189bcc87b93dfbbb78280a280f35b9091503461025457602091826003193601126103d55761030c9392936117ba565b5080358352835280822092815192610323846114d8565b8454916001600160401b0383818095168752851c1681860152600360019660018101548688015260028101546060880152019081549261036284611543565b9461036f8751968761150e565b84865282860193825282822091935b85851061039957608089018790528751806102148b82611682565b898481928a516103a8816114f3565b61ffff8c62ffffff895480928a821686521c168584015260581c168c82015281520193019401939161037e565b8380fd5b8334610159576020366003190112610159576103f361148c565b6103fb6118a5565b600180546001600160a01b0319166001600160a01b039290921691821790557fe06eac444661557e3ac16a5251a66b82c3f985c3e3b15eac7ea4b4fac6eeac2c8280a280f35b839034610281578160031936011261028157805161045e816114a7565b60058152602090640352e302e360dc1b6020820152825193849260208452825192836020860152825b8481106104a557505050828201840152601f01601f19168101030190f35b8181018301518882018801528795508201610487565b838234610281576020908160031936011261025457828285516104dd816114a7565b828152015280358352600682528383205483528152826002818420015492600583526001600160401b03918291205416828551610519816114a7565b858152019081528451938452511690820152f35b90915034610254576020916003198381360112610993578135916001600160401b039182841161098f5760a084830191853603011261098f5786546001600160a01b0316330361094c57610580816117e8565b9360025494858952600688528689205489528388528480888b205416911611156108f757604481013592858952600688528689205484036108a35760848201906105ca82856117fc565b90501561084b576105db82856117fc565b905060ff60035416106107fc576105fa6105f5368661155a565b611791565b96878b52818a5286898c2054166107c2579061061c61069a9392959495611722565b600255878b5289526003888b20606488610635876117e8565b16966001600160401b03199788845416178355610684610657602483016117e8565b84546fffffffffffffffff0000000000000000191660409190911b67ffffffffffffffff60401b16178455565b60019860018401550135600282015501926117fc565b92906106a68484611747565b9189528789209089925b84841061073c57505050505050600254855260068452818386205560058351946106d9866114a7565b428316865233818701908152938752528285209351845492516001600160e01b0319909316911617911b600160401b600160e01b03161790556002547fa37f9fb2f8e66e6e5746e84c33d55fc62d920182d22358f2adc6855d3ac4d4378280a280f35b86610746826117e8565b16828454161783558981013562ffffff811681036107be5783546affffff0000000000000000191660409190911b62ffffff60401b16178355888101359061ffff821682036107be57835461ffff60581b191660589290921b61ffff60581b16919091178355859081906060019301930192916106b0565b8b80fd5b885162461bcd60e51b81528083018b90526014602482015273626c6f636b20616c72656164792065786973747360601b6044820152606490fd5b875162461bcd60e51b81529081018990526024808201527f626c6f636b2068617320746f6f206d616e792063656c657374696120706f696e6044820152637465727360e01b6064820152608490fd5b875162461bcd60e51b8152908101899052602c60248201527f626c6f636b206d75737420686176652061746c65617374206f6e652063656c6560448201526b39ba34b0903837b4b73a32b960a11b6064820152608490fd5b865162461bcd60e51b8152908101889052602860248201527f7072657648617368206d757374206265207468652070726576696f757320626c6044820152670dec6d640d0c2e6d60c31b6064820152608490fd5b855162461bcd60e51b8152808401889052602960248201527f65706f6368206d7573742062652067726561746572207468616e2070726576696044820152680deeae640cae0dec6d60bb1b6064820152608490fd5b845162461bcd60e51b8152808301879052601d60248201527f6f6e6c79207075626c69736865722063616e2061646420626c6f636b730000006044820152606490fd5b8680fd5b8480fd5b8390346102815781600319360112610281576000805160206119838339815191525490516001600160a01b039091168152602090f35b839034610281578160031936011261028157905490516001600160a01b039091168152602090f35b8390346102815781600319360112610281576001600160401b038183806020955260068552818120548152600585522054169051908152f35b9091503461025457602091826003193601126103d557610a4f9392936117ba565b508035835260068452818320548352835280822092815192610a70846114d8565b8454916001600160401b0383818095168752851c16818601526003600196600181015486880152600281015460608801520190815492610aaf84611543565b94610abc8751968761150e565b84865282860193825282822091935b858510610ae657608089018790528751806102148b82611682565b898481928a51610af5816114f3565b61ffff8c62ffffff895480928a821686521c168584015260581c168c820152815201930194019391610acb565b8334610159578060031936011261015957610b3b6118a5565b60008051602061198383398151915280546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b838234610281576020366003190112610281573560ff811680910361028157610bb36118a5565b60ff19600354161760035580f35b83903461028157816003193601126102815760209060ff600354169051908152f35b9150346102545760203660031901126102545760209282913581526006845220549051908152f35b8334610159578060031936011261015957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163003610c7657602090517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b5163703e46dd60e11b8152fd5b8091925060031936011261025457610c9961148c565b9060249384356001600160401b03811161028157366023820112156102815780850135610cc581611667565b94610cd28551968761150e565b81865260209182870193368a8383010111610ee5578186928b8693018737880101526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116308114908115610eb7575b50610ea757610d376118a5565b81169585516352d1902d60e01b815283818a818b5afa869181610e78575b50610d71575050505050505191634c9c8ce360e01b8352820152fd5b9088888894938c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91828103610e635750853b15610e4f575080546001600160a01b031916821790558451889392917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a2825115610e31575050610e239582915190845af4913d15610e27573d610e15610e0c82611667565b9251928361150e565b81528581943d92013e61191f565b5080f35b506060925061191f565b955095505050505034610e4357505080f35b63b398979f60e01b8152fd5b8651634c9c8ce360e01b8152808501849052fd5b8751632a87526960e21b815280860191909152fd5b9091508481813d8311610ea0575b610e90818361150e565b8101031261098f57519038610d55565b503d610e86565b855163703e46dd60e11b81528890fd5b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141538610d2a565b8580fd5b8334610159576020366003190112610159578235906001600160401b03821161015957506105f5602093610f1f9236910161155a565b9051908152f35b915034610254578160031936011261025457610f4061148c565b6001600160401b0392602435848111610ee557610f60903690850161155a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0094855460ff81851c161592828216958615806111ee575b600180981490816111e4575b1590816111db575b506111cb5767ffffffffffffffff1983811688178a5592856111ac575b50610fd59291926118de565b610fdd6118de565b610fe633611831565b89546001600160a01b0319166001600160a01b039190911617895561100a82611791565b91828a52602097885260806003878c208684511685825416178155611057878c86015116829067ffffffffffffffff60401b82549160401b169067ffffffffffffffff60401b1916179055565b888401518a8201556060840151600282015501910151918883519361107c8585611747565b01918b52888b2090888c935b8b86861061114057505050505050508780526006865280848920558351916110af836114a7565b428116835233878401908152918952600587528489209251835492516001600160e01b031990931691161790841b600160401b600160e01b03161790556003805460ff19166015179055611101578480f35b7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29368ff000000000000000019815416905551908152a1388080808480f35b8161119e61ffff8d8695518d815116898b5416178a5561118162ffffff87830151168b9062ffffff60401b82549160401b169062ffffff60401b1916179055565b0151885461ffff60581b1916911660581b61ffff60581b16178755565b019301930192918990611088565b68ffffffffffffffffff19166801000000000000000117895538610fc9565b855163f92ee8a960e01b81528890fd5b90501538610fac565b303b159150610fa4565b5084610f98565b83903461028157806003193601126102815760018054843592906001600160a01b031633036113da5760028054841015611385576001840195868511611372578686526006916020916006835260243585892054036113115785969798955b611286575b8888806002557fbd56a1ce5e71ef906a2c86c43372d012f8ab2422ff19bfdba9b686ac0936f86f8280a280f35b8154861161130c578587968a52848452858a20548a528184526003868b208b81558b898201558b85820155018054908b8155816112ef575b5050806112e9918b52858552868b20548b52600585528a87812055808b528585528a87812055611722565b95611254565b8b52848b20908101905b818110156112be578b81558998016112f9565b611259565b845162461bcd60e51b8152908101839052603560248201527f626c6f636b2068617368206d757374206d6174636820626c6f636b206e756d626044820152740cae4e640e0c2e4cadce840c4d8dec6d640d0c2e6d605b1b6064820152608490fd5b634e487b7160e01b865260119052602485fd5b815162461bcd60e51b8152602081880152602960248201527f626c6f636b206e756d626572206d757374206265206c657373207468616e20636044820152681a185a5b881a19585960ba1b6064820152608490fd5b5162461bcd60e51b8152602081860152602a60248201527f6f6e6c79206368616c6c656e676520636f6e74726163742063616e20726f6c6c6044820152693130b1b59031b430b4b760b11b6064820152608490fd5b91503461025457602036600319011261025457918192358152600560205220548151906001600160401b038116825260018060a01b0390831c166020820152f35b8490346102815781600319360112610281576020906002548152f35b600435906001600160a01b03821682036114a257565b600080fd5b604081019081106001600160401b038211176114c257604052565b634e487b7160e01b600052604160045260246000fd5b60a081019081106001600160401b038211176114c257604052565b606081019081106001600160401b038211176114c257604052565b90601f801991011681019081106001600160401b038211176114c257604052565b35906001600160401b03821682036114a257565b6001600160401b0381116114c25760051b60200190565b919060a0838203126114a257604092835190611575826114d8565b81946115808261152f565b8352602061158f81840161152f565b818501528183013582850152606092606081013560608601526080810135906001600160401b0382116114a257019185601f840112156114a2578235906115d582611543565b966115e28251988961150e565b828852836060818a019402860101948186116114a2578401925b858410611610575050505050505060800152565b86848303126114a257825190611625826114f3565b61162e8561152f565b82528585013562ffffff811681036114a25786830152838501359061ffff821682036114a257828792868b9501528152019301926115fc565b6001600160401b0381116114c257601f01601f191660200190565b90602080835260c08301906001600160401b0380845116828601528184015193816040951660408701528260e0608060408401519360609460608b01526060810151828b015201519760a0808201528851809752019601946000925b8584106116ef575050505050505090565b86518051821689528086015162ffffff168987015282015161ffff168883015296820196958401956001909301926116de565b60001981146117315760010190565b634e487b7160e01b600052601160045260246000fd5b6801000000000000000082116114c25780549180825582811061176957505050565b600091600052602060002092830192015b82811061178657505050565b81815560010161177a565b6040516117b4816117a6602082019485611682565b03601f19810183528261150e565b51902090565b604051906117c7826114d8565b60606080836000815260006020820152600060408201526000838201520152565b356001600160401b03811681036114a25790565b903590601e19813603018212156114a257018035906001600160401b0382116114a2576020019160608202360383136114a257565b6001600160a01b0390811690811561188c5760008051602061198383398151915280546001600160a01b031981168417909155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b604051631e4fbdf760e01b815260006004820152602490fd5b600080516020611983833981519152546001600160a01b031633036118c657565b60405163118cdaa760e01b8152336004820152602490fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561190d57565b604051631afcd79f60e31b8152600490fd5b90611946575080511561193457805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580611979575b611957575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561194f56fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300a164736f6c6343000816000a",
        "sourceMap": "939:9493:0:-:0;;;;;;;1171:4:83;1163:13;;939:9493:0;;;;;;1163:13:83;939:9493:0;;;;;;;;;;;;;;",
        "linkReferences": {}
    },
    "deployedBytecode": {
        "object": "0x608060409080825260048036101561001657600080fd5b600092833560e01c9283628f51c6146114705750826328a8d0e41461142f57826334c9bca5146111f557826341d3ecd814610f265782634411470314610ee95782634f1ef28614610c8357826352d1902d14610c0b5782635852cc0c14610be3578263691bc74a14610bc15782636d1005c514610b8c578263715018a614610b225782637255f37e14610a2e57826388786272146109f55782638c72c54e146109cd5782638da5cb5b146109975782638f74b7391461052d578263a25ae557146104bb578263ad3cb1cc14610441578263b37256b9146103d9578263b76971ce146102eb578263cab6366114610285578263d2ef739814610258578263dc281aff1461015c57505063f2fde38b1461012d57600080fd5b346101595760203660031901126101595761015661014961148c565b6101516118a5565b611831565b80f35b80fd5b9091503461025457826003193601126102545782906101796117ba565b5060025482526020926006845281832054835283528082209281519261019e846114d8565b8454916001600160401b0383818095168752851c168186015260036001966001810154868801526002810154606088015201908154926101dd84611543565b946101ea8751968761150e565b84865282860193825282822091935b85851061021857608089018790528751806102148b82611682565b0390f35b898481928a51610227816114f3565b61ffff8c62ffffff895480928a821686521c168584015260581c168c8201528152019301940193916101f9565b8280fd5b83903461028157816003193601126102815760015490516001600160a01b039091168152602090f35b5080fd5b83346101595760203660031901126101595761029f61148c565b6102a76118a5565b81546001600160a01b0319166001600160a01b039190911690811782557f55eb99d77b0e1ed261c0a8d11f026f811b8af01455a2b45189bcc87b93dfbbb78280a280f35b9091503461025457602091826003193601126103d55761030c9392936117ba565b5080358352835280822092815192610323846114d8565b8454916001600160401b0383818095168752851c1681860152600360019660018101548688015260028101546060880152019081549261036284611543565b9461036f8751968761150e565b84865282860193825282822091935b85851061039957608089018790528751806102148b82611682565b898481928a516103a8816114f3565b61ffff8c62ffffff895480928a821686521c168584015260581c168c82015281520193019401939161037e565b8380fd5b8334610159576020366003190112610159576103f361148c565b6103fb6118a5565b600180546001600160a01b0319166001600160a01b039290921691821790557fe06eac444661557e3ac16a5251a66b82c3f985c3e3b15eac7ea4b4fac6eeac2c8280a280f35b839034610281578160031936011261028157805161045e816114a7565b60058152602090640352e302e360dc1b6020820152825193849260208452825192836020860152825b8481106104a557505050828201840152601f01601f19168101030190f35b8181018301518882018801528795508201610487565b838234610281576020908160031936011261025457828285516104dd816114a7565b828152015280358352600682528383205483528152826002818420015492600583526001600160401b03918291205416828551610519816114a7565b858152019081528451938452511690820152f35b90915034610254576020916003198381360112610993578135916001600160401b039182841161098f5760a084830191853603011261098f5786546001600160a01b0316330361094c57610580816117e8565b9360025494858952600688528689205489528388528480888b205416911611156108f757604481013592858952600688528689205484036108a35760848201906105ca82856117fc565b90501561084b576105db82856117fc565b905060ff60035416106107fc576105fa6105f5368661155a565b611791565b96878b52818a5286898c2054166107c2579061061c61069a9392959495611722565b600255878b5289526003888b20606488610635876117e8565b16966001600160401b03199788845416178355610684610657602483016117e8565b84546fffffffffffffffff0000000000000000191660409190911b67ffffffffffffffff60401b16178455565b60019860018401550135600282015501926117fc565b92906106a68484611747565b9189528789209089925b84841061073c57505050505050600254855260068452818386205560058351946106d9866114a7565b428316865233818701908152938752528285209351845492516001600160e01b0319909316911617911b600160401b600160e01b03161790556002547fa37f9fb2f8e66e6e5746e84c33d55fc62d920182d22358f2adc6855d3ac4d4378280a280f35b86610746826117e8565b16828454161783558981013562ffffff811681036107be5783546affffff0000000000000000191660409190911b62ffffff60401b16178355888101359061ffff821682036107be57835461ffff60581b191660589290921b61ffff60581b16919091178355859081906060019301930192916106b0565b8b80fd5b885162461bcd60e51b81528083018b90526014602482015273626c6f636b20616c72656164792065786973747360601b6044820152606490fd5b875162461bcd60e51b81529081018990526024808201527f626c6f636b2068617320746f6f206d616e792063656c657374696120706f696e6044820152637465727360e01b6064820152608490fd5b875162461bcd60e51b8152908101899052602c60248201527f626c6f636b206d75737420686176652061746c65617374206f6e652063656c6560448201526b39ba34b0903837b4b73a32b960a11b6064820152608490fd5b865162461bcd60e51b8152908101889052602860248201527f7072657648617368206d757374206265207468652070726576696f757320626c6044820152670dec6d640d0c2e6d60c31b6064820152608490fd5b855162461bcd60e51b8152808401889052602960248201527f65706f6368206d7573742062652067726561746572207468616e2070726576696044820152680deeae640cae0dec6d60bb1b6064820152608490fd5b845162461bcd60e51b8152808301879052601d60248201527f6f6e6c79207075626c69736865722063616e2061646420626c6f636b730000006044820152606490fd5b8680fd5b8480fd5b8390346102815781600319360112610281576000805160206119838339815191525490516001600160a01b039091168152602090f35b839034610281578160031936011261028157905490516001600160a01b039091168152602090f35b8390346102815781600319360112610281576001600160401b038183806020955260068552818120548152600585522054169051908152f35b9091503461025457602091826003193601126103d557610a4f9392936117ba565b508035835260068452818320548352835280822092815192610a70846114d8565b8454916001600160401b0383818095168752851c16818601526003600196600181015486880152600281015460608801520190815492610aaf84611543565b94610abc8751968761150e565b84865282860193825282822091935b858510610ae657608089018790528751806102148b82611682565b898481928a51610af5816114f3565b61ffff8c62ffffff895480928a821686521c168584015260581c168c820152815201930194019391610acb565b8334610159578060031936011261015957610b3b6118a5565b60008051602061198383398151915280546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b838234610281576020366003190112610281573560ff811680910361028157610bb36118a5565b60ff19600354161760035580f35b83903461028157816003193601126102815760209060ff600354169051908152f35b9150346102545760203660031901126102545760209282913581526006845220549051908152f35b8334610159578060031936011261015957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163003610c7657602090517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b5163703e46dd60e11b8152fd5b8091925060031936011261025457610c9961148c565b9060249384356001600160401b03811161028157366023820112156102815780850135610cc581611667565b94610cd28551968761150e565b81865260209182870193368a8383010111610ee5578186928b8693018737880101526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116308114908115610eb7575b50610ea757610d376118a5565b81169585516352d1902d60e01b815283818a818b5afa869181610e78575b50610d71575050505050505191634c9c8ce360e01b8352820152fd5b9088888894938c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91828103610e635750853b15610e4f575080546001600160a01b031916821790558451889392917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a2825115610e31575050610e239582915190845af4913d15610e27573d610e15610e0c82611667565b9251928361150e565b81528581943d92013e61191f565b5080f35b506060925061191f565b955095505050505034610e4357505080f35b63b398979f60e01b8152fd5b8651634c9c8ce360e01b8152808501849052fd5b8751632a87526960e21b815280860191909152fd5b9091508481813d8311610ea0575b610e90818361150e565b8101031261098f57519038610d55565b503d610e86565b855163703e46dd60e11b81528890fd5b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141538610d2a565b8580fd5b8334610159576020366003190112610159578235906001600160401b03821161015957506105f5602093610f1f9236910161155a565b9051908152f35b915034610254578160031936011261025457610f4061148c565b6001600160401b0392602435848111610ee557610f60903690850161155a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0094855460ff81851c161592828216958615806111ee575b600180981490816111e4575b1590816111db575b506111cb5767ffffffffffffffff1983811688178a5592856111ac575b50610fd59291926118de565b610fdd6118de565b610fe633611831565b89546001600160a01b0319166001600160a01b039190911617895561100a82611791565b91828a52602097885260806003878c208684511685825416178155611057878c86015116829067ffffffffffffffff60401b82549160401b169067ffffffffffffffff60401b1916179055565b888401518a8201556060840151600282015501910151918883519361107c8585611747565b01918b52888b2090888c935b8b86861061114057505050505050508780526006865280848920558351916110af836114a7565b428116835233878401908152918952600587528489209251835492516001600160e01b031990931691161790841b600160401b600160e01b03161790556003805460ff19166015179055611101578480f35b7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29368ff000000000000000019815416905551908152a1388080808480f35b8161119e61ffff8d8695518d815116898b5416178a5561118162ffffff87830151168b9062ffffff60401b82549160401b169062ffffff60401b1916179055565b0151885461ffff60581b1916911660581b61ffff60581b16178755565b019301930192918990611088565b68ffffffffffffffffff19166801000000000000000117895538610fc9565b855163f92ee8a960e01b81528890fd5b90501538610fac565b303b159150610fa4565b5084610f98565b83903461028157806003193601126102815760018054843592906001600160a01b031633036113da5760028054841015611385576001840195868511611372578686526006916020916006835260243585892054036113115785969798955b611286575b8888806002557fbd56a1ce5e71ef906a2c86c43372d012f8ab2422ff19bfdba9b686ac0936f86f8280a280f35b8154861161130c578587968a52848452858a20548a528184526003868b208b81558b898201558b85820155018054908b8155816112ef575b5050806112e9918b52858552868b20548b52600585528a87812055808b528585528a87812055611722565b95611254565b8b52848b20908101905b818110156112be578b81558998016112f9565b611259565b845162461bcd60e51b8152908101839052603560248201527f626c6f636b2068617368206d757374206d6174636820626c6f636b206e756d626044820152740cae4e640e0c2e4cadce840c4d8dec6d640d0c2e6d605b1b6064820152608490fd5b634e487b7160e01b865260119052602485fd5b815162461bcd60e51b8152602081880152602960248201527f626c6f636b206e756d626572206d757374206265206c657373207468616e20636044820152681a185a5b881a19585960ba1b6064820152608490fd5b5162461bcd60e51b8152602081860152602a60248201527f6f6e6c79206368616c6c656e676520636f6e74726163742063616e20726f6c6c6044820152693130b1b59031b430b4b760b11b6064820152608490fd5b91503461025457602036600319011261025457918192358152600560205220548151906001600160401b038116825260018060a01b0390831c166020820152f35b8490346102815781600319360112610281576020906002548152f35b600435906001600160a01b03821682036114a257565b600080fd5b604081019081106001600160401b038211176114c257604052565b634e487b7160e01b600052604160045260246000fd5b60a081019081106001600160401b038211176114c257604052565b606081019081106001600160401b038211176114c257604052565b90601f801991011681019081106001600160401b038211176114c257604052565b35906001600160401b03821682036114a257565b6001600160401b0381116114c25760051b60200190565b919060a0838203126114a257604092835190611575826114d8565b81946115808261152f565b8352602061158f81840161152f565b818501528183013582850152606092606081013560608601526080810135906001600160401b0382116114a257019185601f840112156114a2578235906115d582611543565b966115e28251988961150e565b828852836060818a019402860101948186116114a2578401925b858410611610575050505050505060800152565b86848303126114a257825190611625826114f3565b61162e8561152f565b82528585013562ffffff811681036114a25786830152838501359061ffff821682036114a257828792868b9501528152019301926115fc565b6001600160401b0381116114c257601f01601f191660200190565b90602080835260c08301906001600160401b0380845116828601528184015193816040951660408701528260e0608060408401519360609460608b01526060810151828b015201519760a0808201528851809752019601946000925b8584106116ef575050505050505090565b86518051821689528086015162ffffff168987015282015161ffff168883015296820196958401956001909301926116de565b60001981146117315760010190565b634e487b7160e01b600052601160045260246000fd5b6801000000000000000082116114c25780549180825582811061176957505050565b600091600052602060002092830192015b82811061178657505050565b81815560010161177a565b6040516117b4816117a6602082019485611682565b03601f19810183528261150e565b51902090565b604051906117c7826114d8565b60606080836000815260006020820152600060408201526000838201520152565b356001600160401b03811681036114a25790565b903590601e19813603018212156114a257018035906001600160401b0382116114a2576020019160608202360383136114a257565b6001600160a01b0390811690811561188c5760008051602061198383398151915280546001600160a01b031981168417909155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b604051631e4fbdf760e01b815260006004820152602490fd5b600080516020611983833981519152546001600160a01b031633036118c657565b60405163118cdaa760e01b8152336004820152602490fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561190d57565b604051631afcd79f60e31b8152600490fd5b90611946575080511561193457805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580611979575b611957575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561194f56fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300a164736f6c6343000816000a",
        "sourceMap": "939:9493:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;939:9493:0;;;;2357:1:81;939:9493:0;;:::i;:::-;2303:62:81;;:::i;:::-;2357:1;:::i;:::-;939:9493:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8115:9;939:9493;;;;;8109:5;939:9493;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;939:9493:0;;;;;;;;;;;;;;;;;;;;;;;;;8115:9;939:9493;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;939:9493:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;939:9493:0;;;;;;:::i;:::-;2303:62:81;;:::i;:::-;939:9493:0;;-1:-1:-1;;;;;;939:9493:0;-1:-1:-1;;;;;939:9493:0;;;;;;;;;9454:28;939:9493;;9454:28;939:9493;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;939:9493:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;939:9493:0;;;;;;:::i;:::-;2303:62:81;;:::i;:::-;939:9493:0;;;-1:-1:-1;;;;;;939:9493:0;-1:-1:-1;;;;;939:9493:0;;;;;;;;;9780:28;;;;939:9493;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;-1:-1:-1;;939:9493:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;939:9493:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7685:5;939:9493;;;;;;;;;;;7734:25;939:9493;;;7734:25;939:9493;;7761:14;939:9493;;-1:-1:-1;;;;;939:9493:0;;;;;;;;;;;;:::i;:::-;;;;7727:66;939:9493;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;939:9493:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;939:9493:0;5702:10;:23;939:9493;;5859:13;;;:::i;:::-;939:9493;5889:9;939:9493;;;;;5883:5;939:9493;;;;;;;;;;;;;;;;;;;;5859:47;939:9493;;;6004:16;;;939:9493;;;;;5883:5;939:9493;;;;;;6004:36;;939:9493;;6137:24;;;;;;;;:::i;:::-;:35;;;939:9493;;6273:24;;;;:::i;:::-;939:9493;;;6308:11;939:9493;;-1:-1:-1;939:9493:0;;6469:28;939:9493;;;;:::i;:::-;6469:28;:::i;:::-;939:9493;;;;;;;;;;;;;;;6615:11;;939:9493;6615:11;;;;;;:::i;:::-;5889:9;939:9493;;;;;;6308:11;939:9493;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;939:9493:0;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;939:9493:0;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;;;;;5889:9;939:9493;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;5889:9;939:9493;;;5883:5;939:9493;;;;;;;6735:14;939:9493;;;;;;:::i;:::-;6794:15;939:9493;;;;5702:10;6759:85;;;939:9493;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;939:9493:0;;;;;;;;-1:-1:-1;;;;;;;939:9493:0;;;;5889:9;939:9493;6860:21;939:9493;;6860:21;939:9493;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;939:9493:0;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;939:9493:0;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;;;;-1:-1:-1;;;6004:16:0;939:9493;;;;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;;;;;6004:16;939:9493;;;-1:-1:-1;;;939:9493:0;;;;6137:24;;939:9493;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;;;;;6004:16;939:9493;;;-1:-1:-1;;;939:9493:0;;;;6137:24;;939:9493;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;;;;;6004:16;939:9493;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;939:9493:0;;;-1:-1:-1;;;;;939:9493:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;939:9493:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;939:9493:0;;;;;;7896:5;939:9493;;;;;;;;7881:14;939:9493;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;7478:5;939:9493;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;939:9493:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2303:62:81;;:::i;:::-;-1:-1:-1;;;;;;;;;;;939:9493:0;;-1:-1:-1;;;;;;939:9493:0;;;;;1280:65:81;;-1:-1:-1;;;;;939:9493:0;3975:40:81;1280:65;;3975:40;939:9493:0;;;;;;;;;;-1:-1:-1;;939:9493:0;;;;;;;;;;;;;2303:62:81;;:::i;:::-;939:9493:0;;10365:26;939:9493;;;10365:26;939:9493;;;;;;;;;;;;;;;;;;;;3651:24;939:9493;;;;;;;;;;;;;;;;-1:-1:-1;;939:9493:0;;;;;;;;;;;3949:40;939:9493;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5111:6:83;-1:-1:-1;;;;;939:9493:0;5102:4:83;5094:23;5090:145;;939:9493:0;;;1327:66:90;939:9493:0;;;5090:145:83;939:9493:0;-1:-1:-1;;;5195:29:83;;;939:9493:0;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;939:9493:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4688:6:83;939:9493:0;;4679:4:83;4671:23;;;:120;;;;939:9493:0;4654:251:83;;;2303:62:81;;:::i;:::-;939:9493:0;;;;;;;;6151:52:83;;;;;;;;;;;;;;939:9493:0;-1:-1:-1;6147:437:83;;939:9493:0;;;;;;;2320:47:90;;;;6513:60:83;;;;939:9493:0;6513:60:83;6147:437;1327:66:90;;;;;;;;6245:40:83;;;;6241:120;;2263:29:90;;;:34;2259:119;;-1:-1:-1;939:9493:0;;-1:-1:-1;;;;;;939:9493:0;;;;;;;;;;;2922:27:90;939:9493:0;;2922:27:90;939:9493:0;;2964:15:90;:11;;4255:25:99;;4297:55;4255:25;;;;;;;;;939:9493:0;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;4297:55:99;:::i;:::-;;939:9493:0;;;-1:-1:-1;939:9493:0;;-1:-1:-1;4297:55:99;:::i;2960:148:90:-;6648:9;;;;;;;;;6644:70;;2960:148;;939:9493:0;;6644:70:90;-1:-1:-1;;;6684:19:90;;;2259:119;939:9493:0;;-1:-1:-1;;;2320:47:90;;;;;939:9493:0;;;2320:47:90;6241:120:83;939:9493:0;;-1:-1:-1;;;6312:34:83;;;;;939:9493:0;;;;6312:34:83;6151:52;;;;;;;;;;;;;;;;;:::i;:::-;;;939:9493:0;;;;;6151:52:83;;;;;;;;;4654:251;939:9493:0;;-1:-1:-1;;;4865:29:83;;939:9493:0;;4865:29:83;4671:120;939:9493:0;;;1327:66:90;939:9493:0;;4749:42:83;;4671:120;;;939:9493:0;;;;;;;;;;;-1:-1:-1;;939:9493:0;;;;;;;-1:-1:-1;;;;;939:9493:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;939:9493:0;;;;;;;;;;;;;;;:::i;:::-;8837:64:82;939:9493:0;;;;;;;;4301:16:82;939:9493:0;;;;4726:16:82;;;:34;;;939:9493:0;4805:1:82;4790:16;;;:50;;;;939:9493:0;4855:13:82;:30;;;;939:9493:0;4851:91:82;;;-1:-1:-1;;939:9493:0;;;;;;;;;4979:67:82;;939:9493:0;6893:76:82;;;;;;:::i;:::-;;;:::i;:::-;6961:1;4809:10:0;6961:1:82;:::i;:::-;939:9493:0;;-1:-1:-1;;;;;;939:9493:0;-1:-1:-1;;;;;939:9493:0;;;;;;;4913:28;;;:::i;:::-;939:9493;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4985:5;939:9493;;;;;;;;;;;;;:::i;:::-;5115:15;939:9493;;;;4809:10;5080:85;;;939:9493;;;;;;5056:14;939:9493;;;;;;;;;;;-1:-1:-1;;;;;;939:9493:0;;;;;;;;;-1:-1:-1;;;;;;;939:9493:0;;;;;;;-1:-1:-1;;939:9493:0;5190:2;939:9493;;;5066:101:82;;939:9493:0;;;5066:101:82;5142:14;939:9493:0;;;;;;;;;;;;5142:14:82;5066:101;;;;939:9493:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;;-1:-1:-1;;;;939:9493:0;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;;;;;;;;4979:67:82;-1:-1:-1;;939:9493:0;;;;;4979:67:82;;;4851:91;939:9493:0;;-1:-1:-1;;;4908:23:82;;939:9493:0;;4908:23:82;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:82;;4726:34;;;;;939:9493:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;939:9493:0;8505:10;:23;939:9493;;8642:9;;939:9493;8627:24;;939:9493;;;;;;;;;;;;;;;8750:5;939:9493;;;8750:5;939:9493;;;;;;;;8750:37;939:9493;;8935:28;;;;8930:179;939:9493;;;8930:179;939:9493;;;8642:9;939:9493;9158:24;;;;939:9493;;8981:3;939:9493;;8965:14;;;;939:9493;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8981:3;939:9493;;;8981:3;939:9493;;;;;;;;;;;;9045:14;939:9493;;;;;;;;;;;;;;;;;;8981:3;:::i;:::-;8935:28;;;939:9493;;;;;;;;;;;;;;;;;;;;;;;;;8965:14;;;939:9493;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;939:9493:0;;;;;;;;;;;;;;;-1:-1:-1;;939:9493:0;;;;;;;;;;3833:56;939:9493;;;;;;;-1:-1:-1;;;;;939:9493:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3546:24;939:9493;;;;;;;;-1:-1:-1;;;;;939:9493:0;;;;;;:::o;:::-;;;;;;;;;;;-1:-1:-1;;;;;939:9493:0;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;939:9493:0;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;939:9493:0;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;939:9493:0;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;939:9493:0;;;;;;:::o;:::-;-1:-1:-1;;;;;939:9493:0;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;939:9493:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;939:9493:0;;;;;;-1:-1:-1;;939:9493:0;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;939:9493:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;939:9493:0;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;939:9493:0;-1:-1:-1;939:9493:0;;-1:-1:-1;939:9493:0;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;7043:150;939:9493;;7166:19;;;;;;;;;:::i;:::-;;939:9493;;7166:19;;;;;;:::i;:::-;939:9493;7156:30;;7043:150;:::o;939:9493::-;;;;;;;:::i;:::-;;;;-1:-1:-1;939:9493:0;;-1:-1:-1;939:9493:0;;;;-1:-1:-1;939:9493:0;;;;-1:-1:-1;939:9493:0;;;;;;:::o;:::-;;-1:-1:-1;;;;;939:9493:0;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;939:9493:0;;;;;;;;;;;;;;;;:::o;3405:215:81:-;-1:-1:-1;;;;;939:9493:0;;;;3489:22:81;;3485:91;;-1:-1:-1;;;;;;;;;;;939:9493:0;;-1:-1:-1;;;;;;939:9493:0;;;;;;;;3975:40:81;-1:-1:-1;;3975:40:81;3405:215::o;3485:91::-;939:9493:0;;-1:-1:-1;;;3534:31:81;;3509:1;3534:31;;;939:9493:0;;;3534:31:81;2658:162;-1:-1:-1;;;;;;;;;;;939:9493:0;-1:-1:-1;;;;;939:9493:0;966:10:84;2717:23:81;2713:101;;2658:162::o;2713:101::-;939:9493:0;;-1:-1:-1;;;2763:40:81;;966:10:84;2763:40:81;;;939:9493:0;;;2763:40:81;7084:141:82;939:9493:0;8837:64:82;939:9493:0;;;;7150:18:82;7146:73;;7084:141::o;7146:73::-;939:9493:0;;-1:-1:-1;;;7191:17:82;;;;;4625:582:99;;4797:8;;-1:-1:-1;939:9493:0;;5874:21:99;:17;;6046:142;;;;;;5870:383;939:9493:0;;-1:-1:-1;;;6225:17:99;;;;;4793:408;939:9493:0;;5045:22:99;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;939:9493:0;;-1:-1:-1;;;5121:24:99;;-1:-1:-1;;;;;939:9493:0;;;5121:24:99;;;939:9493:0;;;5121:24:99;5045:49;5071:18;;;:23;5045:49;",
        "linkReferences": {},
        "immutableReferences": {
            "52728": [
                {
                    "start": 3103,
                    "length": 32
                },
                {
                    "start": 3326,
                    "length": 32
                }
            ]
        }
    },
    "methodIdentifiers": {
        "UPGRADE_INTERFACE_VERSION()": "ad3cb1cc",
        "calculateHeaderHash((uint64,uint64,bytes32,bytes32,(uint64,uint24,uint16)[]))": "44114703",
        "chain(uint256)": "5852cc0c",
        "chainHead()": "008f51c6",
        "challenge()": "d2ef7398",
        "getHead()": "dc281aff",
        "getHeaderByHash(bytes32)": "b76971ce",
        "getHeaderByNum(uint256)": "7255f37e",
        "getL2Output(uint256)": "a25ae557",
        "headerMetadata(bytes32)": "28a8d0e4",
        "initialize(address,(uint64,uint64,bytes32,bytes32,(uint64,uint24,uint16)[]))": "41d3ecd8",
        "maxPointers()": "691bc74a",
        "owner()": "8da5cb5b",
        "proxiableUUID()": "52d1902d",
        "publisher()": "8c72c54e",
        "pushBlock((uint64,uint64,bytes32,bytes32,(uint64,uint24,uint16)[]))": "8f74b739",
        "renounceOwnership()": "715018a6",
        "rollback(uint256,bytes32)": "34c9bca5",
        "setChallengeContract(address)": "b37256b9",
        "setMaxPointers(uint8)": "6d1005c5",
        "setPublisher(address)": "cab63661",
        "startingTimestamp()": "88786272",
        "transferOwnership(address)": "f2fde38b",
        "upgradeToAndCall(address,bytes)": "4f1ef286"
    },
    "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"BlockAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenge\",\"type\":\"address\"}],\"name\":\"ChallengeChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"}],\"name\":\"PublisherChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"RolledBack\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"epoch\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l2Height\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"prevHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"shareStart\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"shareLen\",\"type\":\"uint16\"}],\"internalType\":\"struct CanonicalStateChain.CelestiaPointer[]\",\"name\":\"celestiaPointers\",\"type\":\"tuple[]\"}],\"internalType\":\"struct CanonicalStateChain.Header\",\"name\":\"_header\",\"type\":\"tuple\"}],\"name\":\"calculateHeaderHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"chain\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainHead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challenge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getHead\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"epoch\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l2Height\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"prevHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"shareStart\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"shareLen\",\"type\":\"uint16\"}],\"internalType\":\"struct CanonicalStateChain.CelestiaPointer[]\",\"name\":\"celestiaPointers\",\"type\":\"tuple[]\"}],\"internalType\":\"struct CanonicalStateChain.Header\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"getHeaderByHash\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"epoch\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l2Height\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"prevHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"shareStart\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"shareLen\",\"type\":\"uint16\"}],\"internalType\":\"struct CanonicalStateChain.CelestiaPointer[]\",\"name\":\"celestiaPointers\",\"type\":\"tuple[]\"}],\"internalType\":\"struct CanonicalStateChain.Header\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getHeaderByNum\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"epoch\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l2Height\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"prevHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"shareStart\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"shareLen\",\"type\":\"uint16\"}],\"internalType\":\"struct CanonicalStateChain.CelestiaPointer[]\",\"name\":\"celestiaPointers\",\"type\":\"tuple[]\"}],\"internalType\":\"struct CanonicalStateChain.Header\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getL2Output\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"internalType\":\"struct CanonicalStateChain.Output\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"headerMetadata\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"publisher\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_publisher\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"epoch\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l2Height\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"prevHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"shareStart\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"shareLen\",\"type\":\"uint16\"}],\"internalType\":\"struct CanonicalStateChain.CelestiaPointer[]\",\"name\":\"celestiaPointers\",\"type\":\"tuple[]\"}],\"internalType\":\"struct CanonicalStateChain.Header\",\"name\":\"_header\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxPointers\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"publisher\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"epoch\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l2Height\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"prevHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"shareStart\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"shareLen\",\"type\":\"uint16\"}],\"internalType\":\"struct CanonicalStateChain.CelestiaPointer[]\",\"name\":\"celestiaPointers\",\"type\":\"tuple[]\"}],\"internalType\":\"struct CanonicalStateChain.Header\",\"name\":\"_header\",\"type\":\"tuple\"}],\"name\":\"pushBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_blockHash\",\"type\":\"bytes32\"}],\"name\":\"rollback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_challenge\",\"type\":\"address\"}],\"name\":\"setChallengeContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_maxPointers\",\"type\":\"uint8\"}],\"name\":\"setMaxPointers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_publisher\",\"type\":\"address\"}],\"name\":\"setPublisher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startingTimestamp\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"LightLink Hummingbird\",\"custom:proxied\":\"@title Canonical State Chain\",\"custom:version\":\"v1.1.0-beta\",\"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.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"BlockAdded(uint256)\":{\"params\":{\"blockNumber\":\"- The block number of the new block.\"}},\"ChallengeChanged(address)\":{\"params\":{\"challenge\":\"- The new challenge contract address.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"PublisherChanged(address)\":{\"params\":{\"publisher\":\"- The new publisher address.\"}},\"RolledBack(uint256)\":{\"params\":{\"blockNumber\":\"- The block number the chain was rolled back to.\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"calculateHeaderHash((uint64,uint64,bytes32,bytes32,(uint64,uint24,uint16)[]))\":{\"params\":{\"_header\":\"- The block header to hash.\"},\"returns\":{\"_0\":\"The hash of the block header.\"}},\"getHead()\":{\"returns\":{\"_0\":\"The block header.\"}},\"getHeaderByHash(bytes32)\":{\"params\":{\"_hash\":\"- The hash of the block header to get.\"}},\"getHeaderByNum(uint256)\":{\"params\":{\"_index\":\"- The block number to get the header for.\"},\"returns\":{\"_0\":\"The block header.\"}},\"initialize(address,(uint64,uint64,bytes32,bytes32,(uint64,uint24,uint16)[]))\":{\"params\":{\"_header\":\"- The genesis block header.\",\"_publisher\":\"- The address of the publisher.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"pushBlock((uint64,uint64,bytes32,bytes32,(uint64,uint24,uint16)[]))\":{\"params\":{\"_header\":\"- The block header to add.\"}},\"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.\"},\"rollback(uint256,bytes32)\":{\"params\":{\"_blockHash\":\"- The hash the block being purged.\",\"_blockNumber\":\"- The block number to roll back to.\"}},\"setChallengeContract(address)\":{\"details\":\"Only the owner can call this function.\",\"params\":{\"_challenge\":\"- The new challenge contract address.\"}},\"setMaxPointers(uint8)\":{\"details\":\"Only the owner can call this function.\",\"params\":{\"_maxPointers\":\"- The new maximum number of celestia pointers.\"}},\"setPublisher(address)\":{\"details\":\"Only the owner can call this function.\",\"params\":{\"_publisher\":\"- The new publisher address.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"events\":{\"BlockAdded(uint256)\":{\"notice\":\"Emitted when a new block is added to the chain.\"},\"ChallengeChanged(address)\":{\"notice\":\"Emitted when the challenge contract address is changed.\"},\"PublisherChanged(address)\":{\"notice\":\"Emitted when the publisher address is changed.\"},\"RolledBack(uint256)\":{\"notice\":\"Emitted when the chain is rolled back.\"}},\"kind\":\"user\",\"methods\":{\"calculateHeaderHash((uint64,uint64,bytes32,bytes32,(uint64,uint24,uint16)[]))\":{\"notice\":\"Returns the hash of a block header.\"},\"chain(uint256)\":{\"notice\":\"The canonical chain of block hashes.\"},\"chainHead()\":{\"notice\":\"The index of the last block in the chain.\"},\"challenge()\":{\"notice\":\"The challenge contract is the address of the challenge contract. This contract can rollback the chain after a successful challenge is made.\"},\"getHead()\":{\"notice\":\"Returns the block header at the head of the chain.\"},\"getHeaderByHash(bytes32)\":{\"notice\":\"Returns the block header hash at a given block number.\"},\"getHeaderByNum(uint256)\":{\"notice\":\"Returns the block header at a given block number.\"},\"headerMetadata(bytes32)\":{\"notice\":\"The metadata of a block header.\"},\"initialize(address,(uint64,uint64,bytes32,bytes32,(uint64,uint24,uint16)[]))\":{\"notice\":\"Initializes the contract with the publisher and the genesis block.\"},\"maxPointers()\":{\"notice\":\"The maximum number of celestia pointers a block can have.\"},\"publisher()\":{\"notice\":\"The address of the publisher. The publisher is the only address         that can add new blocks to the chain.\"},\"pushBlock((uint64,uint64,bytes32,bytes32,(uint64,uint24,uint16)[]))\":{\"notice\":\"Optimistically pushes block headers to the canonical chain.         The only fields that are checked are the epoch, prevHash and that the         block has atleast one celestia pointer. Other fields are optimistically         assumed to be correct, however they can be challenged and rolled back         via challenge contract.\"},\"rollback(uint256,bytes32)\":{\"notice\":\"Rolls back the chain to a previous block number. This function can only be         called by the challenge contract.\"},\"setChallengeContract(address)\":{\"notice\":\"Sets the challenge contract address.\"},\"setMaxPointers(uint8)\":{\"notice\":\"Sets the maximum number of celestia pointers a block can have.\"},\"setPublisher(address)\":{\"notice\":\"Sets the publisher address.\"}},\"notice\":\"The Canonical State Chain (CSC) is the source of truth for the layer two chain.         All layer two blocks will eventually be bundled up by the hummingbird publisher         and published to the CSC. The chain can only be rolled back by the challenge contract,         assuming the block is within the challenge/pending window.         The chain is append only, and the publisher is the only address that can add new blocks         to the chain. The owner of the contract can replace the publisher address, and is expected         to be the DAO Governance contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L1/CanonicalStateChain.sol\":\"CanonicalStateChain\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\":blobstream-contracts/=node_modules/blobstream-contracts/\",\":ds-test/=node_modules/blobstream-contracts/lib/ds-test/src/\",\":erc4626-tests/=node_modules/blobstream-contracts/lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":hardhat/=node_modules/hardhat/\",\":openzeppelin-contracts-upgradeable/=node_modules/blobstream-contracts/lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=node_modules/openzeppelin-contracts/\",\":solady/=node_modules/solady/\",\":tree/=node_modules/blobstream-contracts/src/lib/tree/\",\":verifier/=node_modules/blobstream-contracts/src/lib/verifier/\"],\"viaIR\":true},\"sources\":{\"contracts/L1/CanonicalStateChain.sol\":{\"keccak256\":\"0xbb2f2f17688e496347e8ac8c2c1829886422467a449f4e0aee76df62b999d05f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5749b47abeaea737c95971388ef944eb9d293d392017b0ea15a3c2ae122cbfeb\",\"dweb:/ipfs/QmTr4bTsoCwS64tiy9sasPYTivJB6bTFyj6r3mAJSoesyd\"]},\"node_modules/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"]},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]}},\"version\":1}",
    "metadata": {
        "compiler": {
            "version": "0.8.22+commit.4fc1097e"
        },
        "language": "Solidity",
        "output": {
            "abi": [
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "target",
                            "type": "address"
                        }
                    ],
                    "type": "error",
                    "name": "AddressEmptyCode"
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "implementation",
                            "type": "address"
                        }
                    ],
                    "type": "error",
                    "name": "ERC1967InvalidImplementation"
                },
                {
                    "inputs": [],
                    "type": "error",
                    "name": "ERC1967NonPayable"
                },
                {
                    "inputs": [],
                    "type": "error",
                    "name": "FailedInnerCall"
                },
                {
                    "inputs": [],
                    "type": "error",
                    "name": "InvalidInitialization"
                },
                {
                    "inputs": [],
                    "type": "error",
                    "name": "NotInitializing"
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "owner",
                            "type": "address"
                        }
                    ],
                    "type": "error",
                    "name": "OwnableInvalidOwner"
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "account",
                            "type": "address"
                        }
                    ],
                    "type": "error",
                    "name": "OwnableUnauthorizedAccount"
                },
                {
                    "inputs": [],
                    "type": "error",
                    "name": "UUPSUnauthorizedCallContext"
                },
                {
                    "inputs": [
                        {
                            "internalType": "bytes32",
                            "name": "slot",
                            "type": "bytes32"
                        }
                    ],
                    "type": "error",
                    "name": "UUPSUnsupportedProxiableUUID"
                },
                {
                    "inputs": [
                        {
                            "internalType": "uint256",
                            "name": "blockNumber",
                            "type": "uint256",
                            "indexed": true
                        }
                    ],
                    "type": "event",
                    "name": "BlockAdded",
                    "anonymous": false
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "challenge",
                            "type": "address",
                            "indexed": true
                        }
                    ],
                    "type": "event",
                    "name": "ChallengeChanged",
                    "anonymous": false
                },
                {
                    "inputs": [
                        {
                            "internalType": "uint64",
                            "name": "version",
                            "type": "uint64",
                            "indexed": false
                        }
                    ],
                    "type": "event",
                    "name": "Initialized",
                    "anonymous": false
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "previousOwner",
                            "type": "address",
                            "indexed": true
                        },
                        {
                            "internalType": "address",
                            "name": "newOwner",
                            "type": "address",
                            "indexed": true
                        }
                    ],
                    "type": "event",
                    "name": "OwnershipTransferred",
                    "anonymous": false
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "publisher",
                            "type": "address",
                            "indexed": true
                        }
                    ],
                    "type": "event",
                    "name": "PublisherChanged",
                    "anonymous": false
                },
                {
                    "inputs": [
                        {
                            "internalType": "uint256",
                            "name": "blockNumber",
                            "type": "uint256",
                            "indexed": true
                        }
                    ],
                    "type": "event",
                    "name": "RolledBack",
                    "anonymous": false
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "implementation",
                            "type": "address",
                            "indexed": true
                        }
                    ],
                    "type": "event",
                    "name": "Upgraded",
                    "anonymous": false
                },
                {
                    "inputs": [],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "UPGRADE_INTERFACE_VERSION",
                    "outputs": [
                        {
                            "internalType": "string",
                            "name": "",
                            "type": "string"
                        }
                    ]
                },
                {
                    "inputs": [
                        {
                            "internalType": "struct CanonicalStateChain.Header",
                            "name": "_header",
                            "type": "tuple",
                            "components": [
                                {
                                    "internalType": "uint64",
                                    "name": "epoch",
                                    "type": "uint64"
                                },
                                {
                                    "internalType": "uint64",
                                    "name": "l2Height",
                                    "type": "uint64"
                                },
                                {
                                    "internalType": "bytes32",
                                    "name": "prevHash",
                                    "type": "bytes32"
                                },
                                {
                                    "internalType": "bytes32",
                                    "name": "outputRoot",
                                    "type": "bytes32"
                                },
                                {
                                    "internalType": "struct CanonicalStateChain.CelestiaPointer[]",
                                    "name": "celestiaPointers",
                                    "type": "tuple[]",
                                    "components": [
                                        {
                                            "internalType": "uint64",
                                            "name": "height",
                                            "type": "uint64"
                                        },
                                        {
                                            "internalType": "uint24",
                                            "name": "shareStart",
                                            "type": "uint24"
                                        },
                                        {
                                            "internalType": "uint16",
                                            "name": "shareLen",
                                            "type": "uint16"
                                        }
                                    ]
                                }
                            ]
                        }
                    ],
                    "stateMutability": "pure",
                    "type": "function",
                    "name": "calculateHeaderHash",
                    "outputs": [
                        {
                            "internalType": "bytes32",
                            "name": "",
                            "type": "bytes32"
                        }
                    ]
                },
                {
                    "inputs": [
                        {
                            "internalType": "uint256",
                            "name": "",
                            "type": "uint256"
                        }
                    ],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "chain",
                    "outputs": [
                        {
                            "internalType": "bytes32",
                            "name": "",
                            "type": "bytes32"
                        }
                    ]
                },
                {
                    "inputs": [],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "chainHead",
                    "outputs": [
                        {
                            "internalType": "uint256",
                            "name": "",
                            "type": "uint256"
                        }
                    ]
                },
                {
                    "inputs": [],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "challenge",
                    "outputs": [
                        {
                            "internalType": "address",
                            "name": "",
                            "type": "address"
                        }
                    ]
                },
                {
                    "inputs": [],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "getHead",
                    "outputs": [
                        {
                            "internalType": "struct CanonicalStateChain.Header",
                            "name": "",
                            "type": "tuple",
                            "components": [
                                {
                                    "internalType": "uint64",
                                    "name": "epoch",
                                    "type": "uint64"
                                },
                                {
                                    "internalType": "uint64",
                                    "name": "l2Height",
                                    "type": "uint64"
                                },
                                {
                                    "internalType": "bytes32",
                                    "name": "prevHash",
                                    "type": "bytes32"
                                },
                                {
                                    "internalType": "bytes32",
                                    "name": "outputRoot",
                                    "type": "bytes32"
                                },
                                {
                                    "internalType": "struct CanonicalStateChain.CelestiaPointer[]",
                                    "name": "celestiaPointers",
                                    "type": "tuple[]",
                                    "components": [
                                        {
                                            "internalType": "uint64",
                                            "name": "height",
                                            "type": "uint64"
                                        },
                                        {
                                            "internalType": "uint24",
                                            "name": "shareStart",
                                            "type": "uint24"
                                        },
                                        {
                                            "internalType": "uint16",
                                            "name": "shareLen",
                                            "type": "uint16"
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                },
                {
                    "inputs": [
                        {
                            "internalType": "bytes32",
                            "name": "_hash",
                            "type": "bytes32"
                        }
                    ],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "getHeaderByHash",
                    "outputs": [
                        {
                            "internalType": "struct CanonicalStateChain.Header",
                            "name": "",
                            "type": "tuple",
                            "components": [
                                {
                                    "internalType": "uint64",
                                    "name": "epoch",
                                    "type": "uint64"
                                },
                                {
                                    "internalType": "uint64",
                                    "name": "l2Height",
                                    "type": "uint64"
                                },
                                {
                                    "internalType": "bytes32",
                                    "name": "prevHash",
                                    "type": "bytes32"
                                },
                                {
                                    "internalType": "bytes32",
                                    "name": "outputRoot",
                                    "type": "bytes32"
                                },
                                {
                                    "internalType": "struct CanonicalStateChain.CelestiaPointer[]",
                                    "name": "celestiaPointers",
                                    "type": "tuple[]",
                                    "components": [
                                        {
                                            "internalType": "uint64",
                                            "name": "height",
                                            "type": "uint64"
                                        },
                                        {
                                            "internalType": "uint24",
                                            "name": "shareStart",
                                            "type": "uint24"
                                        },
                                        {
                                            "internalType": "uint16",
                                            "name": "shareLen",
                                            "type": "uint16"
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                },
                {
                    "inputs": [
                        {
                            "internalType": "uint256",
                            "name": "_index",
                            "type": "uint256"
                        }
                    ],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "getHeaderByNum",
                    "outputs": [
                        {
                            "internalType": "struct CanonicalStateChain.Header",
                            "name": "",
                            "type": "tuple",
                            "components": [
                                {
                                    "internalType": "uint64",
                                    "name": "epoch",
                                    "type": "uint64"
                                },
                                {
                                    "internalType": "uint64",
                                    "name": "l2Height",
                                    "type": "uint64"
                                },
                                {
                                    "internalType": "bytes32",
                                    "name": "prevHash",
                                    "type": "bytes32"
                                },
                                {
                                    "internalType": "bytes32",
                                    "name": "outputRoot",
                                    "type": "bytes32"
                                },
                                {
                                    "internalType": "struct CanonicalStateChain.CelestiaPointer[]",
                                    "name": "celestiaPointers",
                                    "type": "tuple[]",
                                    "components": [
                                        {
                                            "internalType": "uint64",
                                            "name": "height",
                                            "type": "uint64"
                                        },
                                        {
                                            "internalType": "uint24",
                                            "name": "shareStart",
                                            "type": "uint24"
                                        },
                                        {
                                            "internalType": "uint16",
                                            "name": "shareLen",
                                            "type": "uint16"
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                },
                {
                    "inputs": [
                        {
                            "internalType": "uint256",
                            "name": "_index",
                            "type": "uint256"
                        }
                    ],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "getL2Output",
                    "outputs": [
                        {
                            "internalType": "struct CanonicalStateChain.Output",
                            "name": "",
                            "type": "tuple",
                            "components": [
                                {
                                    "internalType": "bytes32",
                                    "name": "outputRoot",
                                    "type": "bytes32"
                                },
                                {
                                    "internalType": "uint64",
                                    "name": "timestamp",
                                    "type": "uint64"
                                }
                            ]
                        }
                    ]
                },
                {
                    "inputs": [
                        {
                            "internalType": "bytes32",
                            "name": "",
                            "type": "bytes32"
                        }
                    ],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "headerMetadata",
                    "outputs": [
                        {
                            "internalType": "uint64",
                            "name": "timestamp",
                            "type": "uint64"
                        },
                        {
                            "internalType": "address",
                            "name": "publisher",
                            "type": "address"
                        }
                    ]
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "_publisher",
                            "type": "address"
                        },
                        {
                            "internalType": "struct CanonicalStateChain.Header",
                            "name": "_header",
                            "type": "tuple",
                            "components": [
                                {
                                    "internalType": "uint64",
                                    "name": "epoch",
                                    "type": "uint64"
                                },
                                {
                                    "internalType": "uint64",
                                    "name": "l2Height",
                                    "type": "uint64"
                                },
                                {
                                    "internalType": "bytes32",
                                    "name": "prevHash",
                                    "type": "bytes32"
                                },
                                {
                                    "internalType": "bytes32",
                                    "name": "outputRoot",
                                    "type": "bytes32"
                                },
                                {
                                    "internalType": "struct CanonicalStateChain.CelestiaPointer[]",
                                    "name": "celestiaPointers",
                                    "type": "tuple[]",
                                    "components": [
                                        {
                                            "internalType": "uint64",
                                            "name": "height",
                                            "type": "uint64"
                                        },
                                        {
                                            "internalType": "uint24",
                                            "name": "shareStart",
                                            "type": "uint24"
                                        },
                                        {
                                            "internalType": "uint16",
                                            "name": "shareLen",
                                            "type": "uint16"
                                        }
                                    ]
                                }
                            ]
                        }
                    ],
                    "stateMutability": "nonpayable",
                    "type": "function",
                    "name": "initialize"
                },
                {
                    "inputs": [],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "maxPointers",
                    "outputs": [
                        {
                            "internalType": "uint8",
                            "name": "",
                            "type": "uint8"
                        }
                    ]
                },
                {
                    "inputs": [],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "owner",
                    "outputs": [
                        {
                            "internalType": "address",
                            "name": "",
                            "type": "address"
                        }
                    ]
                },
                {
                    "inputs": [],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "proxiableUUID",
                    "outputs": [
                        {
                            "internalType": "bytes32",
                            "name": "",
                            "type": "bytes32"
                        }
                    ]
                },
                {
                    "inputs": [],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "publisher",
                    "outputs": [
                        {
                            "internalType": "address",
                            "name": "",
                            "type": "address"
                        }
                    ]
                },
                {
                    "inputs": [
                        {
                            "internalType": "struct CanonicalStateChain.Header",
                            "name": "_header",
                            "type": "tuple",
                            "components": [
                                {
                                    "internalType": "uint64",
                                    "name": "epoch",
                                    "type": "uint64"
                                },
                                {
                                    "internalType": "uint64",
                                    "name": "l2Height",
                                    "type": "uint64"
                                },
                                {
                                    "internalType": "bytes32",
                                    "name": "prevHash",
                                    "type": "bytes32"
                                },
                                {
                                    "internalType": "bytes32",
                                    "name": "outputRoot",
                                    "type": "bytes32"
                                },
                                {
                                    "internalType": "struct CanonicalStateChain.CelestiaPointer[]",
                                    "name": "celestiaPointers",
                                    "type": "tuple[]",
                                    "components": [
                                        {
                                            "internalType": "uint64",
                                            "name": "height",
                                            "type": "uint64"
                                        },
                                        {
                                            "internalType": "uint24",
                                            "name": "shareStart",
                                            "type": "uint24"
                                        },
                                        {
                                            "internalType": "uint16",
                                            "name": "shareLen",
                                            "type": "uint16"
                                        }
                                    ]
                                }
                            ]
                        }
                    ],
                    "stateMutability": "nonpayable",
                    "type": "function",
                    "name": "pushBlock"
                },
                {
                    "inputs": [],
                    "stateMutability": "nonpayable",
                    "type": "function",
                    "name": "renounceOwnership"
                },
                {
                    "inputs": [
                        {
                            "internalType": "uint256",
                            "name": "_blockNumber",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "_blockHash",
                            "type": "bytes32"
                        }
                    ],
                    "stateMutability": "nonpayable",
                    "type": "function",
                    "name": "rollback"
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "_challenge",
                            "type": "address"
                        }
                    ],
                    "stateMutability": "nonpayable",
                    "type": "function",
                    "name": "setChallengeContract"
                },
                {
                    "inputs": [
                        {
                            "internalType": "uint8",
                            "name": "_maxPointers",
                            "type": "uint8"
                        }
                    ],
                    "stateMutability": "nonpayable",
                    "type": "function",
                    "name": "setMaxPointers"
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "_publisher",
                            "type": "address"
                        }
                    ],
                    "stateMutability": "nonpayable",
                    "type": "function",
                    "name": "setPublisher"
                },
                {
                    "inputs": [],
                    "stateMutability": "view",
                    "type": "function",
                    "name": "startingTimestamp",
                    "outputs": [
                        {
                            "internalType": "uint64",
                            "name": "",
                            "type": "uint64"
                        }
                    ]
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "newOwner",
                            "type": "address"
                        }
                    ],
                    "stateMutability": "nonpayable",
                    "type": "function",
                    "name": "transferOwnership"
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "newImplementation",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "data",
                            "type": "bytes"
                        }
                    ],
                    "stateMutability": "payable",
                    "type": "function",
                    "name": "upgradeToAndCall"
                }
            ],
            "devdoc": {
                "kind": "dev",
                "methods": {
                    "calculateHeaderHash((uint64,uint64,bytes32,bytes32,(uint64,uint24,uint16)[]))": {
                        "params": {
                            "_header": "- The block header to hash."
                        },
                        "returns": {
                            "_0": "The hash of the block header."
                        }
                    },
                    "getHead()": {
                        "returns": {
                            "_0": "The block header."
                        }
                    },
                    "getHeaderByHash(bytes32)": {
                        "params": {
                            "_hash": "- The hash of the block header to get."
                        }
                    },
                    "getHeaderByNum(uint256)": {
                        "params": {
                            "_index": "- The block number to get the header for."
                        },
                        "returns": {
                            "_0": "The block header."
                        }
                    },
                    "initialize(address,(uint64,uint64,bytes32,bytes32,(uint64,uint24,uint16)[]))": {
                        "params": {
                            "_header": "- The genesis block header.",
                            "_publisher": "- The address of the publisher."
                        }
                    },
                    "owner()": {
                        "details": "Returns the address of the current owner."
                    },
                    "proxiableUUID()": {
                        "details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."
                    },
                    "pushBlock((uint64,uint64,bytes32,bytes32,(uint64,uint24,uint16)[]))": {
                        "params": {
                            "_header": "- The block header to add."
                        }
                    },
                    "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."
                    },
                    "rollback(uint256,bytes32)": {
                        "params": {
                            "_blockHash": "- The hash the block being purged.",
                            "_blockNumber": "- The block number to roll back to."
                        }
                    },
                    "setChallengeContract(address)": {
                        "details": "Only the owner can call this function.",
                        "params": {
                            "_challenge": "- The new challenge contract address."
                        }
                    },
                    "setMaxPointers(uint8)": {
                        "details": "Only the owner can call this function.",
                        "params": {
                            "_maxPointers": "- The new maximum number of celestia pointers."
                        }
                    },
                    "setPublisher(address)": {
                        "details": "Only the owner can call this function.",
                        "params": {
                            "_publisher": "- The new publisher address."
                        }
                    },
                    "transferOwnership(address)": {
                        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
                    },
                    "upgradeToAndCall(address,bytes)": {
                        "custom:oz-upgrades-unsafe-allow-reachable": "delegatecall",
                        "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."
                    }
                },
                "version": 1
            },
            "userdoc": {
                "kind": "user",
                "methods": {
                    "calculateHeaderHash((uint64,uint64,bytes32,bytes32,(uint64,uint24,uint16)[]))": {
                        "notice": "Returns the hash of a block header."
                    },
                    "chain(uint256)": {
                        "notice": "The canonical chain of block hashes."
                    },
                    "chainHead()": {
                        "notice": "The index of the last block in the chain."
                    },
                    "challenge()": {
                        "notice": "The challenge contract is the address of the challenge contract. This contract can rollback the chain after a successful challenge is made."
                    },
                    "getHead()": {
                        "notice": "Returns the block header at the head of the chain."
                    },
                    "getHeaderByHash(bytes32)": {
                        "notice": "Returns the block header hash at a given block number."
                    },
                    "getHeaderByNum(uint256)": {
                        "notice": "Returns the block header at a given block number."
                    },
                    "headerMetadata(bytes32)": {
                        "notice": "The metadata of a block header."
                    },
                    "initialize(address,(uint64,uint64,bytes32,bytes32,(uint64,uint24,uint16)[]))": {
                        "notice": "Initializes the contract with the publisher and the genesis block."
                    },
                    "maxPointers()": {
                        "notice": "The maximum number of celestia pointers a block can have."
                    },
                    "publisher()": {
                        "notice": "The address of the publisher. The publisher is the only address         that can add new blocks to the chain."
                    },
                    "pushBlock((uint64,uint64,bytes32,bytes32,(uint64,uint24,uint16)[]))": {
                        "notice": "Optimistically pushes block headers to the canonical chain.         The only fields that are checked are the epoch, prevHash and that the         block has atleast one celestia pointer. Other fields are optimistically         assumed to be correct, however they can be challenged and rolled back         via challenge contract."
                    },
                    "rollback(uint256,bytes32)": {
                        "notice": "Rolls back the chain to a previous block number. This function can only be         called by the challenge contract."
                    },
                    "setChallengeContract(address)": {
                        "notice": "Sets the challenge contract address."
                    },
                    "setMaxPointers(uint8)": {
                        "notice": "Sets the maximum number of celestia pointers a block can have."
                    },
                    "setPublisher(address)": {
                        "notice": "Sets the publisher address."
                    }
                },
                "version": 1
            }
        },
        "settings": {
            "remappings": [
                "@openzeppelin/=node_modules/@openzeppelin/",
                "@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/",
                "blobstream-contracts/=node_modules/blobstream-contracts/",
                "ds-test/=node_modules/blobstream-contracts/lib/ds-test/src/",
                "erc4626-tests/=node_modules/blobstream-contracts/lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
                "forge-std/=lib/forge-std/src/",
                "hardhat/=node_modules/hardhat/",
                "openzeppelin-contracts-upgradeable/=node_modules/blobstream-contracts/lib/openzeppelin-contracts-upgradeable/",
                "openzeppelin-contracts/=node_modules/openzeppelin-contracts/",
                "solady/=node_modules/solady/",
                "tree/=node_modules/blobstream-contracts/src/lib/tree/",
                "verifier/=node_modules/blobstream-contracts/src/lib/verifier/"
            ],
            "optimizer": {
                "enabled": true,
                "runs": 200
            },
            "metadata": {
                "bytecodeHash": "none"
            },
            "compilationTarget": {
                "contracts/L1/CanonicalStateChain.sol": "CanonicalStateChain"
            },
            "evmVersion": "paris",
            "libraries": {},
            "viaIR": true
        },
        "sources": {
            "contracts/L1/CanonicalStateChain.sol": {
                "keccak256": "0xbb2f2f17688e496347e8ac8c2c1829886422467a449f4e0aee76df62b999d05f",
                "urls": [
                    "bzz-raw://5749b47abeaea737c95971388ef944eb9d293d392017b0ea15a3c2ae122cbfeb",
                    "dweb:/ipfs/QmTr4bTsoCwS64tiy9sasPYTivJB6bTFyj6r3mAJSoesyd"
                ],
                "license": "MIT"
            },
            "node_modules/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": {
                "keccak256": "0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a",
                "urls": [
                    "bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6",
                    "dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"
                ],
                "license": "MIT"
            },
            "node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol": {
                "keccak256": "0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b",
                "urls": [
                    "bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609",
                    "dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"
                ],
                "license": "MIT"
            },
            "node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol": {
                "keccak256": "0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53",
                "urls": [
                    "bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930",
                    "dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj"
                ],
                "license": "MIT"
            },
            "node_modules/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": {
                "keccak256": "0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397",
                "urls": [
                    "bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9",
                    "dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"
                ],
                "license": "MIT"
            },
            "node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol": {
                "keccak256": "0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c",
                "urls": [
                    "bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9",
                    "dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v"
                ],
                "license": "MIT"
            },
            "node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol": {
                "keccak256": "0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65",
                "urls": [
                    "bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a",
                    "dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE"
                ],
                "license": "MIT"
            },
            "node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol": {
                "keccak256": "0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c",
                "urls": [
                    "bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa",
                    "dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"
                ],
                "license": "MIT"
            },
            "node_modules/@openzeppelin/contracts/utils/Address.sol": {
                "keccak256": "0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721",
                "urls": [
                    "bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245",
                    "dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"
                ],
                "license": "MIT"
            },
            "node_modules/@openzeppelin/contracts/utils/StorageSlot.sol": {
                "keccak256": "0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418",
                "urls": [
                    "bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c",
                    "dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"
                ],
                "license": "MIT"
            }
        },
        "version": 1
    },
    "id": 0
}
