Commit 6574c458 authored by Inphi's avatar Inphi Committed by GitHub

Fix KZG Precompile Oracle (#9577)

* op-e2e: Fix flaky TestOutputCannonStepWithKZGPointEvaluation test

* fault-proofs: Fix on-chain KZG precompile oracle

* fix for flakes in CI

and add nil check when logging oracleKey
parent df80b5d3
......@@ -9,7 +9,6 @@ import (
"math/big"
"os"
"path"
"strings"
"testing"
"time"
......@@ -42,20 +41,25 @@ func MarkdownTracer() vm.EVMLogger {
}
type MIPSEVM struct {
env *vm.EVM
evmState *state.StateDB
addrs *Addresses
env *vm.EVM
evmState *state.StateDB
addrs *Addresses
localOracle PreimageOracle
}
func NewMIPSEVM(contracts *Contracts, addrs *Addresses) *MIPSEVM {
env, evmState := NewEVMEnv(contracts, addrs)
return &MIPSEVM{env, evmState, addrs}
return &MIPSEVM{env, evmState, addrs, nil}
}
func (m *MIPSEVM) SetTracer(tracer vm.EVMLogger) {
m.env.Config.Tracer = tracer
}
func (m *MIPSEVM) SetLocalOracle(oracle PreimageOracle) {
m.localOracle = oracle
}
// Step is a pure function that computes the poststate from the VM state encoded in the StepWitness.
func (m *MIPSEVM) Step(t *testing.T, stepWitness *StepWitness) []byte {
sender := common.Address{0x13, 0x37}
......@@ -66,7 +70,7 @@ func (m *MIPSEVM) Step(t *testing.T, stepWitness *StepWitness) []byte {
if stepWitness.HasPreimage() {
t.Logf("reading preimage key %x at offset %d", stepWitness.PreimageKey, stepWitness.PreimageOffset)
poInput, err := encodePreimageOracleInput(t, stepWitness, LocalContext{})
poInput, err := encodePreimageOracleInput(t, stepWitness, LocalContext{}, m.localOracle)
require.NoError(t, err, "encode preimage oracle input")
_, leftOverGas, err := m.env.Call(vm.AccountRef(sender), m.addrs.Oracle, poInput, startingGas, big.NewInt(0))
require.NoErrorf(t, err, "evm should not fail, took %d gas", startingGas-leftOverGas)
......@@ -100,7 +104,7 @@ func encodeStepInput(t *testing.T, wit *StepWitness, localContext LocalContext)
return input
}
func encodePreimageOracleInput(t *testing.T, wit *StepWitness, localContext LocalContext) ([]byte, error) {
func encodePreimageOracleInput(t *testing.T, wit *StepWitness, localContext LocalContext, localOracle PreimageOracle) ([]byte, error) {
if wit.PreimageKey == ([32]byte{}) {
return nil, errors.New("cannot encode pre-image oracle input, witness has no pre-image to proof")
}
......@@ -132,6 +136,18 @@ func encodePreimageOracleInput(t *testing.T, wit *StepWitness, localContext Loca
wit.PreimageValue[8:])
require.NoError(t, err)
return input, nil
case preimage.KZGPointEvaluationKeyType:
if localOracle == nil {
return nil, fmt.Errorf("local oracle is required for point evaluation preimages")
}
preimage := localOracle.GetPreimage(preimage.Keccak256Key(wit.PreimageKey).PreimageKey())
input, err := preimageAbi.Pack(
"loadKZGPointEvaluationPreimagePart",
new(big.Int).SetUint64(uint64(wit.PreimageOffset)),
preimage,
)
require.NoError(t, err)
return input, nil
default:
return nil, fmt.Errorf("unsupported pre-image type %d, cannot prepare preimage with key %x offset %d for oracle",
wit.PreimageKey[0], wit.PreimageKey, wit.PreimageOffset)
......@@ -147,15 +163,13 @@ func TestEVM(t *testing.T) {
for _, f := range testFiles {
t.Run(f.Name(), func(t *testing.T) {
var oracle PreimageOracle
if strings.HasPrefix(f.Name(), "oracle") {
oracle = staticOracle(t, []byte("hello world"))
}
oracle := selectOracleFixture(t, f.Name())
// Short-circuit early for exit_group.bin
exitGroup := f.Name() == "exit_group.bin"
evm := NewMIPSEVM(contracts, addrs)
evm.SetTracer(tracer)
evm.SetLocalOracle(oracle)
fn := path.Join("open_mips_tests/test/bin", f.Name())
programMem, err := os.ReadFile(fn)
......
.section .test, "x"
.balign 4
.set noreorder
.global test
.ent test
# load hash at 0x30001000
# 0x47173285 a8d7341e 5e972fc6 77286384 f802f8ef 42a5ec5f 03bbfa25 4cb01fad = keccak("hello world")
# 0x06173285 a8d7341e 5e972fc6 77286384 f802f8ef 42a5ec5f 03bbfa25 4cb01fad = keccak("hello world").key (kzg)
test:
lui $s0, 0x3000
ori $s0, 0x1000
lui $t0, 0x0617
ori $t0, 0x3285
sw $t0, 0($s0)
lui $t0, 0xa8d7
ori $t0, 0x341e
sw $t0, 4($s0)
lui $t0, 0x5e97
ori $t0, 0x2fc6
sw $t0, 8($s0)
lui $t0, 0x7728
ori $t0, 0x6384
sw $t0, 0xc($s0)
lui $t0, 0xf802
ori $t0, 0xf8ef
sw $t0, 0x10($s0)
lui $t0, 0x42a5
ori $t0, 0xec5f
sw $t0, 0x14($s0)
lui $t0, 0x03bb
ori $t0, 0xfa25
sw $t0, 0x18($s0)
lui $t0, 0x4cb0
ori $t0, 0x1fad
sw $t0, 0x1c($s0)
# preimage request - write(fdPreimageWrite, preimageData, 32)
li $a0, 6
li $a1, 0x30001000
li $t0, 8
li $a2, 4
$writeloop:
li $v0, 4004
syscall
addiu $a1, $a1, 4
addiu $t0, $t0, -1
bnez $t0, $writeloop
nop
# preimage response to 0x30002000 - read(fdPreimageRead, addr, count)
# read preimage length
li $a0, 5
li $a1, 0x31000000
li $a2, 4
li $v0, 4003
syscall
li $a1, 0x31000004
li $v0, 4003
syscall
# read the 1 byte preimage data
li $a1, 0x31000008
li $v0, 4003
syscall
nop
# length at 0x31000000. We also check that the lower 32 bits are zero
lui $s1, 0x3100
lw $t0, 0($s1)
sltiu $t6, $t0, 1
li $s1, 0x31000004
lw $t0, 0($s1)
# len should be 1
li $t4, 1
subu $t5, $t0, $t4
sltiu $v0, $t5, 1
and $v0, $v0, $t6
# most likely broken. need to check pc for exact case
# save results
lui $s0, 0xbfff # Load the base address 0xbffffff0
ori $s0, 0xfff0
ori $s1, $0, 1 # Prepare the 'done' status
sw $v0, 8($s0) # Set the test result
sw $s1, 4($s0) # Set 'done'
$done:
jr $ra
nop
.end test
......@@ -31,10 +31,7 @@ func TestState(t *testing.T) {
for _, f := range testFiles {
t.Run(f.Name(), func(t *testing.T) {
var oracle PreimageOracle
if strings.HasPrefix(f.Name(), "oracle") {
oracle = staticOracle(t, []byte("hello world"))
}
oracle := selectOracleFixture(t, f.Name())
// Short-circuit early for exit_group.bin
exitGroup := f.Name() == "exit_group.bin"
......@@ -269,3 +266,34 @@ func staticOracle(t *testing.T, preimageData []byte) *testOracle {
},
}
}
func staticPrecompileOracle(t *testing.T, preimageData []byte, result []byte) *testOracle {
return &testOracle{
hint: func(v []byte) {},
getPreimage: func(k [32]byte) []byte {
switch k[0] {
case byte(preimage.Keccak256KeyType):
if k != preimage.Keccak256Key(crypto.Keccak256Hash(preimageData)).PreimageKey() {
t.Fatalf("invalid preimage request for %x", k)
}
return preimageData
case byte(preimage.KZGPointEvaluationKeyType):
if k != preimage.KZGPointEvaluationKey(crypto.Keccak256Hash(preimageData)).PreimageKey() {
t.Fatalf("invalid preimage request for %x", k)
}
return result
}
panic("unreachable")
},
}
}
func selectOracleFixture(t *testing.T, programName string) PreimageOracle {
if strings.HasPrefix(programName, "oracle_kzg") {
return staticPrecompileOracle(t, []byte("hello world"), []byte{0x1})
} else if strings.HasPrefix(programName, "oracle") {
return staticOracle(t, []byte("hello world"))
} else {
return nil
}
}
......@@ -42,8 +42,8 @@ type PreimageOracleLeaf struct {
// PreimageOracleMetaData contains all meta data concerning the PreimageOracle contract.
var PreimageOracleMetaData = &bind.MetaData{
ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_minProposalSize\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_challengePeriod\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_cancunActivation\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"KECCAK_TREE_DEPTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_LEAF_COUNT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_BOND_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addLeavesLPP\",\"inputs\":[{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_inputStartBlock\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_stateCommitments\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_finalize\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengeFirstLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengeLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_stateMatrix\",\"type\":\"tuple\",\"internalType\":\"structLibKeccak.StateMatrix\",\"components\":[{\"name\":\"state\",\"type\":\"uint64[25]\",\"internalType\":\"uint64[25]\"}]},{\"name\":\"_preState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_preStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengePeriod\",\"inputs\":[],\"outputs\":[{\"name\":\"challengePeriod_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTreeRootLPP\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"treeRoot_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initLPP\",\"inputs\":[{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_claimedSize\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"loadBlobPreimagePart\",\"inputs\":[{\"name\":\"_z\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_y\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_commitment\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadKZGPointEvaluationPreimage\",\"inputs\":[{\"name\":\"_input\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadKeccak256PreimagePart\",\"inputs\":[{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_preimage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadLocalData\",\"inputs\":[{\"name\":\"_ident\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_localContext\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_word\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_size\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"key_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadSha256PreimagePart\",\"inputs\":[{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_preimage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"minProposalSize\",\"inputs\":[],\"outputs\":[{\"name\":\"minProposalSize_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimageLengths\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimagePartOk\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimageParts\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBlocksLen\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"len_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBonds\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBranches\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalCount\",\"inputs\":[],\"outputs\":[{\"name\":\"count_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalMetadata\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"LPPMetaData\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalParts\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposals\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"readPreimage\",\"inputs\":[{\"name\":\"_key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_offset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"dat_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"datLen_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"squeezeLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_stateMatrix\",\"type\":\"tuple\",\"internalType\":\"structLibKeccak.StateMatrix\",\"components\":[{\"name\":\"state\",\"type\":\"uint64[25]\",\"internalType\":\"uint64[25]\"}]},{\"name\":\"_preState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_preStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zeroHashes\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"error\",\"name\":\"ActiveProposal\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AlreadyFinalized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BadProposal\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BondTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CancunNotActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientBond\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInputSize\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPreimage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotEOA\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PartOffsetOOB\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PostStateMatches\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StatesNotContiguous\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TreeSizeOverflow\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WrongStartingBlock\",\"inputs\":[]}]",
Bin: "0x60e06040523480156200001157600080fd5b506040516200397b3803806200397b8339810160408190526200003491620000f9565b60c083905260a0829052608081905260005b62000054600160106200013e565b811015620000ef576003816010811062000072576200007262000158565b0154600382601081106200008a576200008a62000158565b0154604080516020810193909352820152606001604051602081830303815290604052805190602001206003826001620000c591906200016e565b60108110620000d857620000d862000158565b015580620000e68162000189565b91505062000046565b50505050620001a5565b6000806000606084860312156200010f57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b60008282101562000153576200015362000128565b500390565b634e487b7160e01b600052603260045260246000fd5b6000821982111562000184576200018462000128565b500190565b6000600182016200019e576200019e62000128565b5060010190565b60805160a05160c051613791620001ea6000396000818161054d0152611d2801526000818161062d01526115900152600081816111b301526113f601526137916000f3fe6080604052600436106101c25760003560e01c80639d53a648116100f7578063dd24f9bf11610095578063ec5efcbc11610064578063ec5efcbc146105fe578063f3f480d91461061e578063faf37bc714610651578063fef2b4ed1461066457600080fd5b8063dd24f9bf1461053e578063ddcd58de14610571578063e03110e1146105a9578063e1592611146105de57600080fd5b8063b4801e61116100d1578063b4801e61146104c9578063b893f82c146104e9578063d18534b514610509578063da35c6641461052957600080fd5b80639d53a648146104225780639d7e876914610471578063b2e67ba81461049157600080fd5b80636551927b116101645780637ac547671161013e5780637ac547671461035e5780638542cf501461037e578063882856ef146103c95780638dc4be111461040257600080fd5b80636551927b146102ea5780637051472e146103225780637917de1d1461033e57600080fd5b80633909af5c116101a05780633909af5c1461025b5780634d52b4c91461027d57806352f0f3ad1461029257806361238bde146102b257600080fd5b8063013cf08b146101c75780630359a563146102185780632055b36b14610246575b600080fd5b3480156101d357600080fd5b506101e76101e2366004612d06565b610691565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b34801561022457600080fd5b50610238610233366004612d48565b6106d6565b60405190815260200161020f565b34801561025257600080fd5b50610238601081565b34801561026757600080fd5b5061027b610276366004612f43565b61080e565b005b34801561028957600080fd5b50610238610a65565b34801561029e57600080fd5b506102386102ad36600461302f565b610a80565b3480156102be57600080fd5b506102386102cd36600461306a565b600160209081526000928352604080842090915290825290205481565b3480156102f657600080fd5b50610238610305366004612d48565b601560209081526000928352604080842090915290825290205481565b34801561032e57600080fd5b506102386703782dace9d9000081565b34801561034a57600080fd5b5061027b6103593660046130ce565b610b55565b34801561036a57600080fd5b50610238610379366004612d06565b611045565b34801561038a57600080fd5b506103b961039936600461306a565b600260209081526000928352604080842090915290825290205460ff1681565b604051901515815260200161020f565b3480156103d557600080fd5b506103e96103e436600461316a565b61105c565b60405167ffffffffffffffff909116815260200161020f565b34801561040e57600080fd5b5061027b61041d36600461319d565b6110b6565b34801561042e57600080fd5b5061023861043d366004612d48565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601860209081526040808320938352929052205490565b34801561047d57600080fd5b5061027b61048c3660046131e9565b6111b1565b34801561049d57600080fd5b506102386104ac366004612d48565b601760209081526000928352604080842090915290825290205481565b3480156104d557600080fd5b506102386104e436600461316a565b6113c2565b3480156104f557600080fd5b5061027b610504366004613275565b6113f4565b34801561051557600080fd5b5061027b610524366004612f43565b61151b565b34801561053557600080fd5b50601354610238565b34801561054a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610238565b34801561057d57600080fd5b5061023861058c366004612d48565b601660209081526000928352604080842090915290825290205481565b3480156105b557600080fd5b506105c96105c436600461306a565b6118dd565b6040805192835260208301919091520161020f565b3480156105ea57600080fd5b5061027b6105f936600461319d565b6119ce565b34801561060a57600080fd5b5061027b6106193660046132b7565b611ad6565b34801561062a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610238565b61027b61065f366004613350565b611c5c565b34801561067057600080fd5b5061023861067f366004612d06565b60006020819052908152604090205481565b601381815481106106a157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260156020908152604080832084845290915281205481906107199060601c63ffffffff1690565b63ffffffff16905060005b601081101561080657816001166001036107ac5773ffffffffffffffffffffffffffffffffffffffff85166000908152601460209081526040808320878452909152902081601081106107795761077961338c565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506107ed565b82600382601081106107c0576107c061338c565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c90806107fe816133ea565b915050610724565b505092915050565b600061081a8a8a6106d6565b905061083d86868360208b01356108386108338d613422565b611ec7565b611f07565b801561085b575061085b83838360208801356108386108338a613422565b610891576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016108a791906134f1565b60405160208183030381529060405280519060200120146108f4576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161090a919061352f565b14610941576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109898861094f8680613547565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f6892505050565b610992886120c3565b8360400135886040516020016109a891906134f1565b60405160208183030381529060405280519060200120036109f5576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526015602090815260408083208c8452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055610a598a8a3361286b565b50505050505050505050565b6001610a73601060026136ce565b610a7d91906136da565b81565b6000610a8c8686612924565b9050610a9983600861352f565b821180610aa65750602083115b15610add576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b60608115610b6e57610b6786866129d1565b9050610ba8565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b815481526020019060010190808311610bd557505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610c568260601c63ffffffff1690565b63ffffffff169050333214610c97576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ca78260801c63ffffffff1690565b63ffffffff16600003610ce6576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf08260c01c90565b67ffffffffffffffff1615610d31576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610d6a576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d7789898d8886612a4a565b83516020850160888204881415608883061715610d9c576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610e4c578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610e41576001821615610e215782818b0152610e41565b8981015160009081526020938452604090209260019290921c9101610e04565b505050608801610da9565b50505050600160106002610e6091906136ce565b610e6a91906136da565b811115610ea3576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f18610eb68360401c63ffffffff1690565b610ec69063ffffffff168a61352f565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b91508415610fa55777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b179150610f528260801c63ffffffff1690565b63ffffffff16610f688360401c63ffffffff1690565b63ffffffff1614610fa5576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208e84529091529020610fcb90846010612c7c565b50503360008181526018602090815260408083208e8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055928252601581528282209c82529b909b52909920989098555050505050505050565b6003816010811061105557600080fd5b0154905081565b6018602052826000526040600020602052816000526040600020818154811061108457600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b6044356000806008830186106110d45763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa90508061110157600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b7f000000000000000000000000000000000000000000000000000000000000000042101561120b576040517f299f254900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080603087600037602060006030600060025afa806112335763f91129696000526004601cfd5b6000517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017608081815260a08c905260c08b905260308a60e037603088609083013760008060c083600a5afa9250826112b5576309bde3396000526004601cfd5b602886106112cb5763fe2549876000526004601cfd5b6000602882015278200000000000000000000000000000000000000000000000008152600881018b905285810151935060308a8237603081019b909b52505060509098207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0500000000000000000000000000000000000000000000000000000000000000176000818152600260209081526040808320868452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209583529481528482209a909a559081528089529190912096909655505050505050565b601460205282600052604060002060205281600052604060002081601081106113ea57600080fd5b0154925083915050565b7f000000000000000000000000000000000000000000000000000000000000000042101561144e576040517f299f254900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806080838582378381207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06000000000000000000000000000000000000000000000000000000000000001792506000808583600a5afa6000848152600260209081526040808320838052825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155878452808352818420848052835281842060f89590951b909455958252819052939093209290925550505050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff81161561158e576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006115b98260c01c90565b6115cd9067ffffffffffffffff16426136da565b11611604576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116108b8b6106d6565b905061162987878360208c01356108386108338e613422565b8015611647575061164784848360208901356108386108338b613422565b61167d576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87604001358960405160200161169391906134f1565b60405160208183030381529060405280519060200120146116e0576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460200135886020013560016116f6919061352f565b141580611728575060016117108360601c63ffffffff1690565b61171a91906136f1565b63ffffffff16856020013514155b1561175f576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61176d8961094f8780613547565b611776896120c3565b60006117818a612b9d565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f020000000000000000000000000000000000000000000000000000000000000017905060006117d88460a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601760008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d815260200190815260200160002054600160008481526020019081526020016000206000838152602001908152602001600020819055506118aa8460801c63ffffffff1690565b600083815260208190526040902063ffffffff9190911690556118ce8d8d8161286b565b50505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff16611966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b506000838152602081815260409091205461198281600861352f565b61198d85602061352f565b106119ab578361199e82600861352f565b6119a891906136da565b91505b506000938452600160209081526040808620948652939052919092205492909150565b6044356000806008830186106119ec5763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b6000611ae286866106d6565b9050611afb83838360208801356108386108338a613422565b611b31576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084013515611b6d576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b75612cba565b611b838161094f8780613547565b611b8c816120c3565b846040013581604051602001611ba291906134f1565b6040516020818303038152906040528051906020012003611bef576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152601560209081526040808320898452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055611c5387873361286b565b50505050505050565b6703782dace9d90000341015611c9e576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333214611cd7576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ce2816008613716565b63ffffffff168263ffffffff1610611d26576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff161015611d86576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b949094179094558251808401845282815280850186815260138054600181018255908452915160029092027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9094167fffffffffffffffffffffffff000000000000000000000000000000000000000090941693909317909255517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0919091015590815260168352818120938152929091529020349055565b6000816000015182602001518360400151604051602001611eea9392919061373e565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611f5b578060051b880135600186831c1660018114611f405760008481526020839052604090209350611f51565b600082815260208590526040902093505b5050600101611f0d565b5090931495945050505050565b6088815114611f7657600080fd5b6020810160208301611ff7565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050611ff181611fdc868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b61200360008383611f83565b61200f60018383611f83565b61201b60028383611f83565b61202760038383611f83565b61203360048383611f83565b61203f60058383611f83565b61204b60068383611f83565b61205760078383611f83565b61206360088383611f83565b61206f60098383611f83565b61207b600a8383611f83565b612087600b8383611f83565b612093600c8383611f83565b61209f600d8383611f83565b6120ab600e8383611f83565b6120b7600f8383611f83565b611ff160108383611f83565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e0016040516020818303038152906040529050602082016020820161274b565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c6122768660011b67ffffffffffffffff1690565b18188584603f1c6122918660011b67ffffffffffffffff1690565b18188584603f1c6122ac8660011b67ffffffffffffffff1690565b181895508483603f1c6122c98560011b67ffffffffffffffff1690565b181894508387603f1c6122e68960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525b5050505050565b600582811b8201805160018501831b8401805160028701851b8601805160038901871b8801805160048b0190981b8901805167ffffffffffffffff861985168918811690995283198a16861889169096528819861683188816909352841986168818871690528419831684189095169052919391929190611c53565b6126e560008261265e565b6126f060058261265e565b6126fb600a8261265e565b612706600f8261265e565b61271160148261265e565b50565b61271d816121b9565b612726816126da565b600383901b820151815160c09190911c90611ff190821867ffffffffffffffff168352565b61275760008284612714565b61276360018284612714565b61276f60028284612714565b61277b60038284612714565b61278760048284612714565b61279360058284612714565b61279f60068284612714565b6127ab60078284612714565b6127b760088284612714565b6127c360098284612714565b6127cf600a8284612714565b6127db600b8284612714565b6127e7600c8284612714565b6127f3600d8284612714565b6127ff600e8284612714565b61280b600f8284612714565b61281760108284612714565b61282360118284612714565b61282f60128284612714565b61283b60138284612714565b61284760148284612714565b61285360158284612714565b61285f60168284612714565b611ff160178284612714565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526016602090815260408083208684529091528082208054908390559051909284169083908381818185875af1925050503d80600081146128e4576040519150601f19603f3d011682016040523d82523d6000602084013e6128e9565b606091505b5050905080612657576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176129ca818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b6060604051905081602082018181018286833760888306808015612a1a5760888290038501848101848103803687375060806001820353506001845160001a1784538652612a31565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b6000612a5c8260a01c63ffffffff1690565b67ffffffffffffffff1690506000612a7a8360801c63ffffffff1690565b63ffffffff1690506000612a948460401c63ffffffff1690565b63ffffffff169050600883108015612aaa575080155b15612ade5760c082901b6000908152883560085283513382526017602090815260408084208a855290915290912055612b93565b60088310158015612afc575080612af66008856136da565b93508310155b8015612b105750612b0d878261352f565b83105b15612b93576000612b2182856136da565b905087612b2f82602061352f565b10158015612b3b575085155b15612b72576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526017602090815260408083208a845290915290209089013590555b5050505050505050565b6000612c20565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff00612bce8360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff0000612bfb8360101b67ffffffffffffffff1690565b1617905060008160201c612c198360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612c3890612ba4565b612ba4565b6040820151612c4690612ba4565b60401b17612c5e612c3360018460059190911b015190565b825160809190911b90612c7090612ba4565b60c01b17179392505050565b8260108101928215612caa579160200282015b82811115612caa578251825591602001919060010190612c8f565b50612cb6929150612cd2565b5090565b6040518060200160405280612ccd612ce7565b905290565b5b80821115612cb65760008155600101612cd3565b6040518061032001604052806019906020820280368337509192915050565b600060208284031215612d1857600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612d4357600080fd5b919050565b60008060408385031215612d5b57600080fd5b612d6483612d1f565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612dc557612dc5612d72565b60405290565b6040516060810167ffffffffffffffff81118282101715612dc557612dc5612d72565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612e3557612e35612d72565b604052919050565b6000610320808385031215612e5157600080fd5b604051602080820167ffffffffffffffff8382108183111715612e7657612e76612d72565b8160405283955087601f880112612e8c57600080fd5b612e94612da1565b9487019491508188861115612ea857600080fd5b875b86811015612ed05780358381168114612ec35760008081fd5b8452928401928401612eaa565b50909352509295945050505050565b600060608284031215612ef157600080fd5b50919050565b60008083601f840112612f0957600080fd5b50813567ffffffffffffffff811115612f2157600080fd5b6020830191508360208260051b8501011115612f3c57600080fd5b9250929050565b60008060008060008060008060006103e08a8c031215612f6257600080fd5b612f6b8a612d1f565b985060208a01359750612f818b60408c01612e3d565b96506103608a013567ffffffffffffffff80821115612f9f57600080fd5b612fab8d838e01612edf565b97506103808c0135915080821115612fc257600080fd5b612fce8d838e01612ef7565b90975095506103a08c0135915080821115612fe857600080fd5b612ff48d838e01612edf565b94506103c08c013591508082111561300b57600080fd5b506130188c828d01612ef7565b915080935050809150509295985092959850929598565b600080600080600060a0868803121561304757600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561307d57600080fd5b50508035926020909101359150565b60008083601f84011261309e57600080fd5b50813567ffffffffffffffff8111156130b657600080fd5b602083019150836020828501011115612f3c57600080fd5b600080600080600080600060a0888a0312156130e957600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561310f57600080fd5b61311b8b838c0161308c565b909750955060608a013591508082111561313457600080fd5b506131418a828b01612ef7565b9094509250506080880135801515811461315a57600080fd5b8091505092959891949750929550565b60008060006060848603121561317f57600080fd5b61318884612d1f565b95602085013595506040909401359392505050565b6000806000604084860312156131b257600080fd5b83359250602084013567ffffffffffffffff8111156131d057600080fd5b6131dc8682870161308c565b9497909650939450505050565b600080600080600080600060a0888a03121561320457600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561322a57600080fd5b6132368b838c0161308c565b909750955060608a013591508082111561324f57600080fd5b5061325c8a828b0161308c565b989b979a50959894979596608090950135949350505050565b6000806020838503121561328857600080fd5b823567ffffffffffffffff81111561329f57600080fd5b6132ab8582860161308c565b90969095509350505050565b6000806000806000608086880312156132cf57600080fd5b6132d886612d1f565b945060208601359350604086013567ffffffffffffffff808211156132fc57600080fd5b61330889838a01612edf565b9450606088013591508082111561331e57600080fd5b5061332b88828901612ef7565b969995985093965092949392505050565b803563ffffffff81168114612d4357600080fd5b60008060006060848603121561336557600080fd5b833592506133756020850161333c565b91506133836040850161333c565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361341b5761341b6133bb565b5060010190565b60006060823603121561343457600080fd5b61343c612dcb565b823567ffffffffffffffff8082111561345457600080fd5b9084019036601f83011261346757600080fd5b813560208282111561347b5761347b612d72565b6134ab817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612dee565b925081835236818386010111156134c157600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b601981101561352657825167ffffffffffffffff168252602092830192909101906001016134fd565b50505092915050565b60008219821115613542576135426133bb565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261357c57600080fd5b83018035915067ffffffffffffffff82111561359757600080fd5b602001915036819003821315612f3c57600080fd5b600181815b8085111561360557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156135eb576135eb6133bb565b808516156135f857918102915b93841c93908002906135b1565b509250929050565b60008261361c575060016136c8565b81613629575060006136c8565b816001811461363f576002811461364957613665565b60019150506136c8565b60ff84111561365a5761365a6133bb565b50506001821b6136c8565b5060208310610133831016604e8410600b8410161715613688575081810a6136c8565b61369283836135ac565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156136c4576136c46133bb565b0290505b92915050565b60006129ca838361360d565b6000828210156136ec576136ec6133bb565b500390565b600063ffffffff8381169083168181101561370e5761370e6133bb565b039392505050565b600063ffffffff808316818516808303821115613735576137356133bb565b01949350505050565b6000845160005b8181101561375f5760208188018101518583015201613745565b8181111561376e576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a",
ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_minProposalSize\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_challengePeriod\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_cancunActivation\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"KECCAK_TREE_DEPTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_LEAF_COUNT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_BOND_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addLeavesLPP\",\"inputs\":[{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_inputStartBlock\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_stateCommitments\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_finalize\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengeFirstLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengeLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_stateMatrix\",\"type\":\"tuple\",\"internalType\":\"structLibKeccak.StateMatrix\",\"components\":[{\"name\":\"state\",\"type\":\"uint64[25]\",\"internalType\":\"uint64[25]\"}]},{\"name\":\"_preState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_preStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengePeriod\",\"inputs\":[],\"outputs\":[{\"name\":\"challengePeriod_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTreeRootLPP\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"treeRoot_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initLPP\",\"inputs\":[{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_claimedSize\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"loadBlobPreimagePart\",\"inputs\":[{\"name\":\"_z\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_y\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_commitment\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadKZGPointEvaluationPreimagePart\",\"inputs\":[{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_input\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadKeccak256PreimagePart\",\"inputs\":[{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_preimage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadLocalData\",\"inputs\":[{\"name\":\"_ident\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_localContext\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_word\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_size\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"key_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadSha256PreimagePart\",\"inputs\":[{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_preimage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"minProposalSize\",\"inputs\":[],\"outputs\":[{\"name\":\"minProposalSize_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimageLengths\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimagePartOk\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimageParts\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBlocksLen\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"len_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBonds\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBranches\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalCount\",\"inputs\":[],\"outputs\":[{\"name\":\"count_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalMetadata\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"LPPMetaData\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalParts\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposals\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"readPreimage\",\"inputs\":[{\"name\":\"_key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_offset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"dat_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"datLen_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"squeezeLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_stateMatrix\",\"type\":\"tuple\",\"internalType\":\"structLibKeccak.StateMatrix\",\"components\":[{\"name\":\"state\",\"type\":\"uint64[25]\",\"internalType\":\"uint64[25]\"}]},{\"name\":\"_preState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_preStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zeroHashes\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"error\",\"name\":\"ActiveProposal\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AlreadyFinalized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BadProposal\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BondTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CancunNotActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientBond\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInputSize\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPreimage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotEOA\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PartOffsetOOB\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PostStateMatches\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StatesNotContiguous\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TreeSizeOverflow\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WrongStartingBlock\",\"inputs\":[]}]",
Bin: "0x60e06040523480156200001157600080fd5b506040516200395e3803806200395e8339810160408190526200003491620000f9565b60c083905260a0829052608081905260005b62000054600160106200013e565b811015620000ef576003816010811062000072576200007262000158565b0154600382601081106200008a576200008a62000158565b0154604080516020810193909352820152606001604051602081830303815290604052805190602001206003826001620000c591906200016e565b60108110620000d857620000d862000158565b015580620000e68162000189565b91505062000046565b50505050620001a5565b6000806000606084860312156200010f57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b60008282101562000153576200015362000128565b500390565b634e487b7160e01b600052603260045260246000fd5b6000821982111562000184576200018462000128565b500190565b6000600182016200019e576200019e62000128565b5060010190565b60805160a05160c051613774620001ea6000396000818161054d0152611d4d01526000818161062d01526115b50152600081816111b301526113c401526137746000f3fe6080604052600436106101c25760003560e01c80639d53a648116100f7578063dd24f9bf11610095578063ec5efcbc11610064578063ec5efcbc146105fe578063f3f480d91461061e578063faf37bc714610651578063fef2b4ed1461066457600080fd5b8063dd24f9bf1461053e578063ddcd58de14610571578063e03110e1146105a9578063e1592611146105de57600080fd5b8063b2e67ba8116100d1578063b2e67ba8146104b1578063b4801e61146104e9578063d18534b514610509578063da35c6641461052957600080fd5b80639d53a648146104225780639d7e8769146104715780639dede8cc1461049157600080fd5b80636551927b116101645780637ac547671161013e5780637ac547671461035e5780638542cf501461037e578063882856ef146103c95780638dc4be111461040257600080fd5b80636551927b146102ea5780637051472e146103225780637917de1d1461033e57600080fd5b80633909af5c116101a05780633909af5c1461025b5780634d52b4c91461027d57806352f0f3ad1461029257806361238bde146102b257600080fd5b8063013cf08b146101c75780630359a563146102185780632055b36b14610246575b600080fd5b3480156101d357600080fd5b506101e76101e2366004612d2b565b610691565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b34801561022457600080fd5b50610238610233366004612d6d565b6106d6565b60405190815260200161020f565b34801561025257600080fd5b50610238601081565b34801561026757600080fd5b5061027b610276366004612f68565b61080e565b005b34801561028957600080fd5b50610238610a65565b34801561029e57600080fd5b506102386102ad366004613054565b610a80565b3480156102be57600080fd5b506102386102cd36600461308f565b600160209081526000928352604080842090915290825290205481565b3480156102f657600080fd5b50610238610305366004612d6d565b601560209081526000928352604080842090915290825290205481565b34801561032e57600080fd5b506102386703782dace9d9000081565b34801561034a57600080fd5b5061027b6103593660046130f3565b610b55565b34801561036a57600080fd5b50610238610379366004612d2b565b611045565b34801561038a57600080fd5b506103b961039936600461308f565b600260209081526000928352604080842090915290825290205460ff1681565b604051901515815260200161020f565b3480156103d557600080fd5b506103e96103e436600461318f565b61105c565b60405167ffffffffffffffff909116815260200161020f565b34801561040e57600080fd5b5061027b61041d3660046131c2565b6110b6565b34801561042e57600080fd5b5061023861043d366004612d6d565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601860209081526040808320938352929052205490565b34801561047d57600080fd5b5061027b61048c36600461320e565b6111b1565b34801561049d57600080fd5b5061027b6104ac3660046131c2565b6113c2565b3480156104bd57600080fd5b506102386104cc366004612d6d565b601760209081526000928352604080842090915290825290205481565b3480156104f557600080fd5b5061023861050436600461318f565b61150e565b34801561051557600080fd5b5061027b610524366004612f68565b611540565b34801561053557600080fd5b50601354610238565b34801561054a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610238565b34801561057d57600080fd5b5061023861058c366004612d6d565b601660209081526000928352604080842090915290825290205481565b3480156105b557600080fd5b506105c96105c436600461308f565b611902565b6040805192835260208301919091520161020f565b3480156105ea57600080fd5b5061027b6105f93660046131c2565b6119f3565b34801561060a57600080fd5b5061027b61061936600461329a565b611afb565b34801561062a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610238565b61027b61065f366004613333565b611c81565b34801561067057600080fd5b5061023861067f366004612d2b565b60006020819052908152604090205481565b601381815481106106a157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260156020908152604080832084845290915281205481906107199060601c63ffffffff1690565b63ffffffff16905060005b601081101561080657816001166001036107ac5773ffffffffffffffffffffffffffffffffffffffff85166000908152601460209081526040808320878452909152902081601081106107795761077961336f565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506107ed565b82600382601081106107c0576107c061336f565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c90806107fe816133cd565b915050610724565b505092915050565b600061081a8a8a6106d6565b905061083d86868360208b01356108386108338d613405565b611eec565b611f2c565b801561085b575061085b83838360208801356108386108338a613405565b610891576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016108a791906134d4565b60405160208183030381529060405280519060200120146108f4576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161090a9190613512565b14610941576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109898861094f868061352a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8d92505050565b610992886120e8565b8360400135886040516020016109a891906134d4565b60405160208183030381529060405280519060200120036109f5576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526015602090815260408083208c8452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055610a598a8a33612890565b50505050505050505050565b6001610a73601060026136b1565b610a7d91906136bd565b81565b6000610a8c8686612949565b9050610a99836008613512565b821180610aa65750602083115b15610add576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b60608115610b6e57610b6786866129f6565b9050610ba8565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b815481526020019060010190808311610bd557505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610c568260601c63ffffffff1690565b63ffffffff169050333214610c97576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ca78260801c63ffffffff1690565b63ffffffff16600003610ce6576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf08260c01c90565b67ffffffffffffffff1615610d31576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610d6a576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d7789898d8886612a6f565b83516020850160888204881415608883061715610d9c576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610e4c578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610e41576001821615610e215782818b0152610e41565b8981015160009081526020938452604090209260019290921c9101610e04565b505050608801610da9565b50505050600160106002610e6091906136b1565b610e6a91906136bd565b811115610ea3576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f18610eb68360401c63ffffffff1690565b610ec69063ffffffff168a613512565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b91508415610fa55777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b179150610f528260801c63ffffffff1690565b63ffffffff16610f688360401c63ffffffff1690565b63ffffffff1614610fa5576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208e84529091529020610fcb90846010612ca1565b50503360008181526018602090815260408083208e8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055928252601581528282209c82529b909b52909920989098555050505050505050565b6003816010811061105557600080fd5b0154905081565b6018602052826000526040600020602052816000526040600020818154811061108457600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b6044356000806008830186106110d45763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa90508061110157600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b7f000000000000000000000000000000000000000000000000000000000000000042101561120b576040517f299f254900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080603087600037602060006030600060025afa806112335763f91129696000526004601cfd5b6000517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017608081815260a08c905260c08b905260308a60e037603088609083013760008060c083600a5afa9250826112b5576309bde3396000526004601cfd5b602886106112cb5763fe2549876000526004601cfd5b6000602882015278200000000000000000000000000000000000000000000000008152600881018b905285810151935060308a8237603081019b909b52505060509098207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0500000000000000000000000000000000000000000000000000000000000000176000818152600260209081526040808320868452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209583529481528482209a909a559081528089529190912096909655505050505050565b7f000000000000000000000000000000000000000000000000000000000000000042101561141c576040517f299f254900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006080848682378481207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06000000000000000000000000000000000000000000000000000000000000001792506000808683600a5afa7801000000000000000000000000000000000000000000000000825260f81b600882015286015160008381526002602090815260408083208a8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558684528083528184209a845299825280832093909355938152928390529091209490945550505050565b6014602052826000526040600020602052816000526040600020816010811061153657600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff8116156115b3576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006115de8260c01c90565b6115f29067ffffffffffffffff16426136bd565b11611629576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116358b8b6106d6565b905061164e87878360208c01356108386108338e613405565b801561166c575061166c84848360208901356108386108338b613405565b6116a2576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016116b891906134d4565b6040516020818303038152906040528051906020012014611705576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84602001358860200135600161171b9190613512565b14158061174d575060016117358360601c63ffffffff1690565b61173f91906136d4565b63ffffffff16856020013514155b15611784576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117928961094f878061352a565b61179b896120e8565b60006117a68a612bc2565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f020000000000000000000000000000000000000000000000000000000000000017905060006117fd8460a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601760008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d815260200190815260200160002054600160008481526020019081526020016000206000838152602001908152602001600020819055506118cf8460801c63ffffffff1690565b600083815260208190526040902063ffffffff9190911690556118f38d8d81612890565b50505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff1661198b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546119a7816008613512565b6119b2856020613512565b106119d057836119c3826008613512565b6119cd91906136bd565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018610611a115763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b6000611b0786866106d6565b9050611b2083838360208801356108386108338a613405565b611b56576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084013515611b92576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b9a612cdf565b611ba88161094f878061352a565b611bb1816120e8565b846040013581604051602001611bc791906134d4565b6040516020818303038152906040528051906020012003611c14576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152601560209081526040808320898452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055611c78878733612890565b50505050505050565b6703782dace9d90000341015611cc3576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333214611cfc576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d078160086136f9565b63ffffffff168263ffffffff1610611d4b576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff161015611dab576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b949094179094558251808401845282815280850186815260138054600181018255908452915160029092027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9094167fffffffffffffffffffffffff000000000000000000000000000000000000000090941693909317909255517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0919091015590815260168352818120938152929091529020349055565b6000816000015182602001518360400151604051602001611f0f93929190613721565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611f80578060051b880135600186831c1660018114611f655760008481526020839052604090209350611f76565b600082815260208590526040902093505b5050600101611f32565b5090931495945050505050565b6088815114611f9b57600080fd5b602081016020830161201c565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b171717905061201681612001868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b61202860008383611fa8565b61203460018383611fa8565b61204060028383611fa8565b61204c60038383611fa8565b61205860048383611fa8565b61206460058383611fa8565b61207060068383611fa8565b61207c60078383611fa8565b61208860088383611fa8565b61209460098383611fa8565b6120a0600a8383611fa8565b6120ac600b8383611fa8565b6120b8600c8383611fa8565b6120c4600d8383611fa8565b6120d0600e8383611fa8565b6120dc600f8383611fa8565b61201660108383611fa8565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201612770565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c61229b8660011b67ffffffffffffffff1690565b18188584603f1c6122b68660011b67ffffffffffffffff1690565b18188584603f1c6122d18660011b67ffffffffffffffff1690565b181895508483603f1c6122ee8560011b67ffffffffffffffff1690565b181894508387603f1c61230b8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525b5050505050565b600582811b8201805160018501831b8401805160028701851b8601805160038901871b8801805160048b0190981b8901805167ffffffffffffffff861985168918811690995283198a16861889169096528819861683188816909352841986168818871690528419831684189095169052919391929190611c78565b61270a600082612683565b612715600582612683565b612720600a82612683565b61272b600f82612683565b612736601482612683565b50565b612742816121de565b61274b816126ff565b600383901b820151815160c09190911c9061201690821867ffffffffffffffff168352565b61277c60008284612739565b61278860018284612739565b61279460028284612739565b6127a060038284612739565b6127ac60048284612739565b6127b860058284612739565b6127c460068284612739565b6127d060078284612739565b6127dc60088284612739565b6127e860098284612739565b6127f4600a8284612739565b612800600b8284612739565b61280c600c8284612739565b612818600d8284612739565b612824600e8284612739565b612830600f8284612739565b61283c60108284612739565b61284860118284612739565b61285460128284612739565b61286060138284612739565b61286c60148284612739565b61287860158284612739565b61288460168284612739565b61201660178284612739565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526016602090815260408083208684529091528082208054908390559051909284169083908381818185875af1925050503d8060008114612909576040519150601f19603f3d011682016040523d82523d6000602084013e61290e565b606091505b505090508061267c576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176129ef818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b6060604051905081602082018181018286833760888306808015612a3f5760888290038501848101848103803687375060806001820353506001845160001a1784538652612a56565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b6000612a818260a01c63ffffffff1690565b67ffffffffffffffff1690506000612a9f8360801c63ffffffff1690565b63ffffffff1690506000612ab98460401c63ffffffff1690565b63ffffffff169050600883108015612acf575080155b15612b035760c082901b6000908152883560085283513382526017602090815260408084208a855290915290912055612bb8565b60088310158015612b21575080612b1b6008856136bd565b93508310155b8015612b355750612b328782613512565b83105b15612bb8576000612b4682856136bd565b905087612b54826020613512565b10158015612b60575085155b15612b97576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526017602090815260408083208a845290915290209089013590555b5050505050505050565b6000612c45565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff00612bf38360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff0000612c208360101b67ffffffffffffffff1690565b1617905060008160201c612c3e8360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612c5d90612bc9565b612bc9565b6040820151612c6b90612bc9565b60401b17612c83612c5860018460059190911b015190565b825160809190911b90612c9590612bc9565b60c01b17179392505050565b8260108101928215612ccf579160200282015b82811115612ccf578251825591602001919060010190612cb4565b50612cdb929150612cf7565b5090565b6040518060200160405280612cf2612d0c565b905290565b5b80821115612cdb5760008155600101612cf8565b6040518061032001604052806019906020820280368337509192915050565b600060208284031215612d3d57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612d6857600080fd5b919050565b60008060408385031215612d8057600080fd5b612d8983612d44565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612dea57612dea612d97565b60405290565b6040516060810167ffffffffffffffff81118282101715612dea57612dea612d97565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612e5a57612e5a612d97565b604052919050565b6000610320808385031215612e7657600080fd5b604051602080820167ffffffffffffffff8382108183111715612e9b57612e9b612d97565b8160405283955087601f880112612eb157600080fd5b612eb9612dc6565b9487019491508188861115612ecd57600080fd5b875b86811015612ef55780358381168114612ee85760008081fd5b8452928401928401612ecf565b50909352509295945050505050565b600060608284031215612f1657600080fd5b50919050565b60008083601f840112612f2e57600080fd5b50813567ffffffffffffffff811115612f4657600080fd5b6020830191508360208260051b8501011115612f6157600080fd5b9250929050565b60008060008060008060008060006103e08a8c031215612f8757600080fd5b612f908a612d44565b985060208a01359750612fa68b60408c01612e62565b96506103608a013567ffffffffffffffff80821115612fc457600080fd5b612fd08d838e01612f04565b97506103808c0135915080821115612fe757600080fd5b612ff38d838e01612f1c565b90975095506103a08c013591508082111561300d57600080fd5b6130198d838e01612f04565b94506103c08c013591508082111561303057600080fd5b5061303d8c828d01612f1c565b915080935050809150509295985092959850929598565b600080600080600060a0868803121561306c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156130a257600080fd5b50508035926020909101359150565b60008083601f8401126130c357600080fd5b50813567ffffffffffffffff8111156130db57600080fd5b602083019150836020828501011115612f6157600080fd5b600080600080600080600060a0888a03121561310e57600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561313457600080fd5b6131408b838c016130b1565b909750955060608a013591508082111561315957600080fd5b506131668a828b01612f1c565b9094509250506080880135801515811461317f57600080fd5b8091505092959891949750929550565b6000806000606084860312156131a457600080fd5b6131ad84612d44565b95602085013595506040909401359392505050565b6000806000604084860312156131d757600080fd5b83359250602084013567ffffffffffffffff8111156131f557600080fd5b613201868287016130b1565b9497909650939450505050565b600080600080600080600060a0888a03121561322957600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561324f57600080fd5b61325b8b838c016130b1565b909750955060608a013591508082111561327457600080fd5b506132818a828b016130b1565b989b979a50959894979596608090950135949350505050565b6000806000806000608086880312156132b257600080fd5b6132bb86612d44565b945060208601359350604086013567ffffffffffffffff808211156132df57600080fd5b6132eb89838a01612f04565b9450606088013591508082111561330157600080fd5b5061330e88828901612f1c565b969995985093965092949392505050565b803563ffffffff81168114612d6857600080fd5b60008060006060848603121561334857600080fd5b833592506133586020850161331f565b91506133666040850161331f565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133fe576133fe61339e565b5060010190565b60006060823603121561341757600080fd5b61341f612df0565b823567ffffffffffffffff8082111561343757600080fd5b9084019036601f83011261344a57600080fd5b813560208282111561345e5761345e612d97565b61348e817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612e13565b925081835236818386010111156134a457600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b601981101561350957825167ffffffffffffffff168252602092830192909101906001016134e0565b50505092915050565b600082198211156135255761352561339e565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261355f57600080fd5b83018035915067ffffffffffffffff82111561357a57600080fd5b602001915036819003821315612f6157600080fd5b600181815b808511156135e857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156135ce576135ce61339e565b808516156135db57918102915b93841c9390800290613594565b509250929050565b6000826135ff575060016136ab565b8161360c575060006136ab565b8160018114613622576002811461362c57613648565b60019150506136ab565b60ff84111561363d5761363d61339e565b50506001821b6136ab565b5060208310610133831016604e8410600b841016171561366b575081810a6136ab565b613675838361358f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156136a7576136a761339e565b0290505b92915050565b60006129ef83836135f0565b6000828210156136cf576136cf61339e565b500390565b600063ffffffff838116908316818110156136f1576136f161339e565b039392505050565b600063ffffffff8083168185168083038211156137185761371861339e565b01949350505050565b6000845160005b818110156137425760208188018101518583015201613728565b81811115613751576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a",
}
// PreimageOracleABI is the input ABI used to generate the binding from.
......@@ -935,25 +935,25 @@ func (_PreimageOracle *PreimageOracleTransactorSession) LoadBlobPreimagePart(_z
return _PreimageOracle.Contract.LoadBlobPreimagePart(&_PreimageOracle.TransactOpts, _z, _y, _commitment, _proof, _partOffset)
}
// LoadKZGPointEvaluationPreimage is a paid mutator transaction binding the contract method 0xb893f82c.
// LoadKZGPointEvaluationPreimagePart is a paid mutator transaction binding the contract method 0x9dede8cc.
//
// Solidity: function loadKZGPointEvaluationPreimage(bytes _input) returns()
func (_PreimageOracle *PreimageOracleTransactor) LoadKZGPointEvaluationPreimage(opts *bind.TransactOpts, _input []byte) (*types.Transaction, error) {
return _PreimageOracle.contract.Transact(opts, "loadKZGPointEvaluationPreimage", _input)
// Solidity: function loadKZGPointEvaluationPreimagePart(uint256 _partOffset, bytes _input) returns()
func (_PreimageOracle *PreimageOracleTransactor) LoadKZGPointEvaluationPreimagePart(opts *bind.TransactOpts, _partOffset *big.Int, _input []byte) (*types.Transaction, error) {
return _PreimageOracle.contract.Transact(opts, "loadKZGPointEvaluationPreimagePart", _partOffset, _input)
}
// LoadKZGPointEvaluationPreimage is a paid mutator transaction binding the contract method 0xb893f82c.
// LoadKZGPointEvaluationPreimagePart is a paid mutator transaction binding the contract method 0x9dede8cc.
//
// Solidity: function loadKZGPointEvaluationPreimage(bytes _input) returns()
func (_PreimageOracle *PreimageOracleSession) LoadKZGPointEvaluationPreimage(_input []byte) (*types.Transaction, error) {
return _PreimageOracle.Contract.LoadKZGPointEvaluationPreimage(&_PreimageOracle.TransactOpts, _input)
// Solidity: function loadKZGPointEvaluationPreimagePart(uint256 _partOffset, bytes _input) returns()
func (_PreimageOracle *PreimageOracleSession) LoadKZGPointEvaluationPreimagePart(_partOffset *big.Int, _input []byte) (*types.Transaction, error) {
return _PreimageOracle.Contract.LoadKZGPointEvaluationPreimagePart(&_PreimageOracle.TransactOpts, _partOffset, _input)
}
// LoadKZGPointEvaluationPreimage is a paid mutator transaction binding the contract method 0xb893f82c.
// LoadKZGPointEvaluationPreimagePart is a paid mutator transaction binding the contract method 0x9dede8cc.
//
// Solidity: function loadKZGPointEvaluationPreimage(bytes _input) returns()
func (_PreimageOracle *PreimageOracleTransactorSession) LoadKZGPointEvaluationPreimage(_input []byte) (*types.Transaction, error) {
return _PreimageOracle.Contract.LoadKZGPointEvaluationPreimage(&_PreimageOracle.TransactOpts, _input)
// Solidity: function loadKZGPointEvaluationPreimagePart(uint256 _partOffset, bytes _input) returns()
func (_PreimageOracle *PreimageOracleTransactorSession) LoadKZGPointEvaluationPreimagePart(_partOffset *big.Int, _input []byte) (*types.Transaction, error) {
return _PreimageOracle.Contract.LoadKZGPointEvaluationPreimagePart(&_PreimageOracle.TransactOpts, _partOffset, _input)
}
// LoadKeccak256PreimagePart is a paid mutator transaction binding the contract method 0xe1592611.
......
......@@ -13,7 +13,7 @@ const PreimageOracleStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contrac
var PreimageOracleStorageLayout = new(solc.StorageLayout)
var PreimageOracleDeployedBin = "0x6080604052600436106101c25760003560e01c80639d53a648116100f7578063dd24f9bf11610095578063ec5efcbc11610064578063ec5efcbc146105fe578063f3f480d91461061e578063faf37bc714610651578063fef2b4ed1461066457600080fd5b8063dd24f9bf1461053e578063ddcd58de14610571578063e03110e1146105a9578063e1592611146105de57600080fd5b8063b4801e61116100d1578063b4801e61146104c9578063b893f82c146104e9578063d18534b514610509578063da35c6641461052957600080fd5b80639d53a648146104225780639d7e876914610471578063b2e67ba81461049157600080fd5b80636551927b116101645780637ac547671161013e5780637ac547671461035e5780638542cf501461037e578063882856ef146103c95780638dc4be111461040257600080fd5b80636551927b146102ea5780637051472e146103225780637917de1d1461033e57600080fd5b80633909af5c116101a05780633909af5c1461025b5780634d52b4c91461027d57806352f0f3ad1461029257806361238bde146102b257600080fd5b8063013cf08b146101c75780630359a563146102185780632055b36b14610246575b600080fd5b3480156101d357600080fd5b506101e76101e2366004612d06565b610691565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b34801561022457600080fd5b50610238610233366004612d48565b6106d6565b60405190815260200161020f565b34801561025257600080fd5b50610238601081565b34801561026757600080fd5b5061027b610276366004612f43565b61080e565b005b34801561028957600080fd5b50610238610a65565b34801561029e57600080fd5b506102386102ad36600461302f565b610a80565b3480156102be57600080fd5b506102386102cd36600461306a565b600160209081526000928352604080842090915290825290205481565b3480156102f657600080fd5b50610238610305366004612d48565b601560209081526000928352604080842090915290825290205481565b34801561032e57600080fd5b506102386703782dace9d9000081565b34801561034a57600080fd5b5061027b6103593660046130ce565b610b55565b34801561036a57600080fd5b50610238610379366004612d06565b611045565b34801561038a57600080fd5b506103b961039936600461306a565b600260209081526000928352604080842090915290825290205460ff1681565b604051901515815260200161020f565b3480156103d557600080fd5b506103e96103e436600461316a565b61105c565b60405167ffffffffffffffff909116815260200161020f565b34801561040e57600080fd5b5061027b61041d36600461319d565b6110b6565b34801561042e57600080fd5b5061023861043d366004612d48565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601860209081526040808320938352929052205490565b34801561047d57600080fd5b5061027b61048c3660046131e9565b6111b1565b34801561049d57600080fd5b506102386104ac366004612d48565b601760209081526000928352604080842090915290825290205481565b3480156104d557600080fd5b506102386104e436600461316a565b6113c2565b3480156104f557600080fd5b5061027b610504366004613275565b6113f4565b34801561051557600080fd5b5061027b610524366004612f43565b61151b565b34801561053557600080fd5b50601354610238565b34801561054a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610238565b34801561057d57600080fd5b5061023861058c366004612d48565b601660209081526000928352604080842090915290825290205481565b3480156105b557600080fd5b506105c96105c436600461306a565b6118dd565b6040805192835260208301919091520161020f565b3480156105ea57600080fd5b5061027b6105f936600461319d565b6119ce565b34801561060a57600080fd5b5061027b6106193660046132b7565b611ad6565b34801561062a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610238565b61027b61065f366004613350565b611c5c565b34801561067057600080fd5b5061023861067f366004612d06565b60006020819052908152604090205481565b601381815481106106a157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260156020908152604080832084845290915281205481906107199060601c63ffffffff1690565b63ffffffff16905060005b601081101561080657816001166001036107ac5773ffffffffffffffffffffffffffffffffffffffff85166000908152601460209081526040808320878452909152902081601081106107795761077961338c565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506107ed565b82600382601081106107c0576107c061338c565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c90806107fe816133ea565b915050610724565b505092915050565b600061081a8a8a6106d6565b905061083d86868360208b01356108386108338d613422565b611ec7565b611f07565b801561085b575061085b83838360208801356108386108338a613422565b610891576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016108a791906134f1565b60405160208183030381529060405280519060200120146108f4576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161090a919061352f565b14610941576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109898861094f8680613547565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f6892505050565b610992886120c3565b8360400135886040516020016109a891906134f1565b60405160208183030381529060405280519060200120036109f5576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526015602090815260408083208c8452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055610a598a8a3361286b565b50505050505050505050565b6001610a73601060026136ce565b610a7d91906136da565b81565b6000610a8c8686612924565b9050610a9983600861352f565b821180610aa65750602083115b15610add576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b60608115610b6e57610b6786866129d1565b9050610ba8565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b815481526020019060010190808311610bd557505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610c568260601c63ffffffff1690565b63ffffffff169050333214610c97576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ca78260801c63ffffffff1690565b63ffffffff16600003610ce6576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf08260c01c90565b67ffffffffffffffff1615610d31576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610d6a576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d7789898d8886612a4a565b83516020850160888204881415608883061715610d9c576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610e4c578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610e41576001821615610e215782818b0152610e41565b8981015160009081526020938452604090209260019290921c9101610e04565b505050608801610da9565b50505050600160106002610e6091906136ce565b610e6a91906136da565b811115610ea3576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f18610eb68360401c63ffffffff1690565b610ec69063ffffffff168a61352f565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b91508415610fa55777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b179150610f528260801c63ffffffff1690565b63ffffffff16610f688360401c63ffffffff1690565b63ffffffff1614610fa5576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208e84529091529020610fcb90846010612c7c565b50503360008181526018602090815260408083208e8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055928252601581528282209c82529b909b52909920989098555050505050505050565b6003816010811061105557600080fd5b0154905081565b6018602052826000526040600020602052816000526040600020818154811061108457600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b6044356000806008830186106110d45763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa90508061110157600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b7f000000000000000000000000000000000000000000000000000000000000000042101561120b576040517f299f254900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080603087600037602060006030600060025afa806112335763f91129696000526004601cfd5b6000517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017608081815260a08c905260c08b905260308a60e037603088609083013760008060c083600a5afa9250826112b5576309bde3396000526004601cfd5b602886106112cb5763fe2549876000526004601cfd5b6000602882015278200000000000000000000000000000000000000000000000008152600881018b905285810151935060308a8237603081019b909b52505060509098207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0500000000000000000000000000000000000000000000000000000000000000176000818152600260209081526040808320868452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209583529481528482209a909a559081528089529190912096909655505050505050565b601460205282600052604060002060205281600052604060002081601081106113ea57600080fd5b0154925083915050565b7f000000000000000000000000000000000000000000000000000000000000000042101561144e576040517f299f254900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806080838582378381207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06000000000000000000000000000000000000000000000000000000000000001792506000808583600a5afa6000848152600260209081526040808320838052825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155878452808352818420848052835281842060f89590951b909455958252819052939093209290925550505050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff81161561158e576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006115b98260c01c90565b6115cd9067ffffffffffffffff16426136da565b11611604576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116108b8b6106d6565b905061162987878360208c01356108386108338e613422565b8015611647575061164784848360208901356108386108338b613422565b61167d576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87604001358960405160200161169391906134f1565b60405160208183030381529060405280519060200120146116e0576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460200135886020013560016116f6919061352f565b141580611728575060016117108360601c63ffffffff1690565b61171a91906136f1565b63ffffffff16856020013514155b1561175f576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61176d8961094f8780613547565b611776896120c3565b60006117818a612b9d565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f020000000000000000000000000000000000000000000000000000000000000017905060006117d88460a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601760008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d815260200190815260200160002054600160008481526020019081526020016000206000838152602001908152602001600020819055506118aa8460801c63ffffffff1690565b600083815260208190526040902063ffffffff9190911690556118ce8d8d8161286b565b50505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff16611966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b506000838152602081815260409091205461198281600861352f565b61198d85602061352f565b106119ab578361199e82600861352f565b6119a891906136da565b91505b506000938452600160209081526040808620948652939052919092205492909150565b6044356000806008830186106119ec5763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b6000611ae286866106d6565b9050611afb83838360208801356108386108338a613422565b611b31576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084013515611b6d576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b75612cba565b611b838161094f8780613547565b611b8c816120c3565b846040013581604051602001611ba291906134f1565b6040516020818303038152906040528051906020012003611bef576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152601560209081526040808320898452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055611c5387873361286b565b50505050505050565b6703782dace9d90000341015611c9e576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333214611cd7576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ce2816008613716565b63ffffffff168263ffffffff1610611d26576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff161015611d86576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b949094179094558251808401845282815280850186815260138054600181018255908452915160029092027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9094167fffffffffffffffffffffffff000000000000000000000000000000000000000090941693909317909255517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0919091015590815260168352818120938152929091529020349055565b6000816000015182602001518360400151604051602001611eea9392919061373e565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611f5b578060051b880135600186831c1660018114611f405760008481526020839052604090209350611f51565b600082815260208590526040902093505b5050600101611f0d565b5090931495945050505050565b6088815114611f7657600080fd5b6020810160208301611ff7565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050611ff181611fdc868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b61200360008383611f83565b61200f60018383611f83565b61201b60028383611f83565b61202760038383611f83565b61203360048383611f83565b61203f60058383611f83565b61204b60068383611f83565b61205760078383611f83565b61206360088383611f83565b61206f60098383611f83565b61207b600a8383611f83565b612087600b8383611f83565b612093600c8383611f83565b61209f600d8383611f83565b6120ab600e8383611f83565b6120b7600f8383611f83565b611ff160108383611f83565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e0016040516020818303038152906040529050602082016020820161274b565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c6122768660011b67ffffffffffffffff1690565b18188584603f1c6122918660011b67ffffffffffffffff1690565b18188584603f1c6122ac8660011b67ffffffffffffffff1690565b181895508483603f1c6122c98560011b67ffffffffffffffff1690565b181894508387603f1c6122e68960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525b5050505050565b600582811b8201805160018501831b8401805160028701851b8601805160038901871b8801805160048b0190981b8901805167ffffffffffffffff861985168918811690995283198a16861889169096528819861683188816909352841986168818871690528419831684189095169052919391929190611c53565b6126e560008261265e565b6126f060058261265e565b6126fb600a8261265e565b612706600f8261265e565b61271160148261265e565b50565b61271d816121b9565b612726816126da565b600383901b820151815160c09190911c90611ff190821867ffffffffffffffff168352565b61275760008284612714565b61276360018284612714565b61276f60028284612714565b61277b60038284612714565b61278760048284612714565b61279360058284612714565b61279f60068284612714565b6127ab60078284612714565b6127b760088284612714565b6127c360098284612714565b6127cf600a8284612714565b6127db600b8284612714565b6127e7600c8284612714565b6127f3600d8284612714565b6127ff600e8284612714565b61280b600f8284612714565b61281760108284612714565b61282360118284612714565b61282f60128284612714565b61283b60138284612714565b61284760148284612714565b61285360158284612714565b61285f60168284612714565b611ff160178284612714565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526016602090815260408083208684529091528082208054908390559051909284169083908381818185875af1925050503d80600081146128e4576040519150601f19603f3d011682016040523d82523d6000602084013e6128e9565b606091505b5050905080612657576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176129ca818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b6060604051905081602082018181018286833760888306808015612a1a5760888290038501848101848103803687375060806001820353506001845160001a1784538652612a31565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b6000612a5c8260a01c63ffffffff1690565b67ffffffffffffffff1690506000612a7a8360801c63ffffffff1690565b63ffffffff1690506000612a948460401c63ffffffff1690565b63ffffffff169050600883108015612aaa575080155b15612ade5760c082901b6000908152883560085283513382526017602090815260408084208a855290915290912055612b93565b60088310158015612afc575080612af66008856136da565b93508310155b8015612b105750612b0d878261352f565b83105b15612b93576000612b2182856136da565b905087612b2f82602061352f565b10158015612b3b575085155b15612b72576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526017602090815260408083208a845290915290209089013590555b5050505050505050565b6000612c20565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff00612bce8360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff0000612bfb8360101b67ffffffffffffffff1690565b1617905060008160201c612c198360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612c3890612ba4565b612ba4565b6040820151612c4690612ba4565b60401b17612c5e612c3360018460059190911b015190565b825160809190911b90612c7090612ba4565b60c01b17179392505050565b8260108101928215612caa579160200282015b82811115612caa578251825591602001919060010190612c8f565b50612cb6929150612cd2565b5090565b6040518060200160405280612ccd612ce7565b905290565b5b80821115612cb65760008155600101612cd3565b6040518061032001604052806019906020820280368337509192915050565b600060208284031215612d1857600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612d4357600080fd5b919050565b60008060408385031215612d5b57600080fd5b612d6483612d1f565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612dc557612dc5612d72565b60405290565b6040516060810167ffffffffffffffff81118282101715612dc557612dc5612d72565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612e3557612e35612d72565b604052919050565b6000610320808385031215612e5157600080fd5b604051602080820167ffffffffffffffff8382108183111715612e7657612e76612d72565b8160405283955087601f880112612e8c57600080fd5b612e94612da1565b9487019491508188861115612ea857600080fd5b875b86811015612ed05780358381168114612ec35760008081fd5b8452928401928401612eaa565b50909352509295945050505050565b600060608284031215612ef157600080fd5b50919050565b60008083601f840112612f0957600080fd5b50813567ffffffffffffffff811115612f2157600080fd5b6020830191508360208260051b8501011115612f3c57600080fd5b9250929050565b60008060008060008060008060006103e08a8c031215612f6257600080fd5b612f6b8a612d1f565b985060208a01359750612f818b60408c01612e3d565b96506103608a013567ffffffffffffffff80821115612f9f57600080fd5b612fab8d838e01612edf565b97506103808c0135915080821115612fc257600080fd5b612fce8d838e01612ef7565b90975095506103a08c0135915080821115612fe857600080fd5b612ff48d838e01612edf565b94506103c08c013591508082111561300b57600080fd5b506130188c828d01612ef7565b915080935050809150509295985092959850929598565b600080600080600060a0868803121561304757600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561307d57600080fd5b50508035926020909101359150565b60008083601f84011261309e57600080fd5b50813567ffffffffffffffff8111156130b657600080fd5b602083019150836020828501011115612f3c57600080fd5b600080600080600080600060a0888a0312156130e957600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561310f57600080fd5b61311b8b838c0161308c565b909750955060608a013591508082111561313457600080fd5b506131418a828b01612ef7565b9094509250506080880135801515811461315a57600080fd5b8091505092959891949750929550565b60008060006060848603121561317f57600080fd5b61318884612d1f565b95602085013595506040909401359392505050565b6000806000604084860312156131b257600080fd5b83359250602084013567ffffffffffffffff8111156131d057600080fd5b6131dc8682870161308c565b9497909650939450505050565b600080600080600080600060a0888a03121561320457600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561322a57600080fd5b6132368b838c0161308c565b909750955060608a013591508082111561324f57600080fd5b5061325c8a828b0161308c565b989b979a50959894979596608090950135949350505050565b6000806020838503121561328857600080fd5b823567ffffffffffffffff81111561329f57600080fd5b6132ab8582860161308c565b90969095509350505050565b6000806000806000608086880312156132cf57600080fd5b6132d886612d1f565b945060208601359350604086013567ffffffffffffffff808211156132fc57600080fd5b61330889838a01612edf565b9450606088013591508082111561331e57600080fd5b5061332b88828901612ef7565b969995985093965092949392505050565b803563ffffffff81168114612d4357600080fd5b60008060006060848603121561336557600080fd5b833592506133756020850161333c565b91506133836040850161333c565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361341b5761341b6133bb565b5060010190565b60006060823603121561343457600080fd5b61343c612dcb565b823567ffffffffffffffff8082111561345457600080fd5b9084019036601f83011261346757600080fd5b813560208282111561347b5761347b612d72565b6134ab817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612dee565b925081835236818386010111156134c157600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b601981101561352657825167ffffffffffffffff168252602092830192909101906001016134fd565b50505092915050565b60008219821115613542576135426133bb565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261357c57600080fd5b83018035915067ffffffffffffffff82111561359757600080fd5b602001915036819003821315612f3c57600080fd5b600181815b8085111561360557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156135eb576135eb6133bb565b808516156135f857918102915b93841c93908002906135b1565b509250929050565b60008261361c575060016136c8565b81613629575060006136c8565b816001811461363f576002811461364957613665565b60019150506136c8565b60ff84111561365a5761365a6133bb565b50506001821b6136c8565b5060208310610133831016604e8410600b8410161715613688575081810a6136c8565b61369283836135ac565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156136c4576136c46133bb565b0290505b92915050565b60006129ca838361360d565b6000828210156136ec576136ec6133bb565b500390565b600063ffffffff8381169083168181101561370e5761370e6133bb565b039392505050565b600063ffffffff808316818516808303821115613735576137356133bb565b01949350505050565b6000845160005b8181101561375f5760208188018101518583015201613745565b8181111561376e576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a"
var PreimageOracleDeployedBin = "0x6080604052600436106101c25760003560e01c80639d53a648116100f7578063dd24f9bf11610095578063ec5efcbc11610064578063ec5efcbc146105fe578063f3f480d91461061e578063faf37bc714610651578063fef2b4ed1461066457600080fd5b8063dd24f9bf1461053e578063ddcd58de14610571578063e03110e1146105a9578063e1592611146105de57600080fd5b8063b2e67ba8116100d1578063b2e67ba8146104b1578063b4801e61146104e9578063d18534b514610509578063da35c6641461052957600080fd5b80639d53a648146104225780639d7e8769146104715780639dede8cc1461049157600080fd5b80636551927b116101645780637ac547671161013e5780637ac547671461035e5780638542cf501461037e578063882856ef146103c95780638dc4be111461040257600080fd5b80636551927b146102ea5780637051472e146103225780637917de1d1461033e57600080fd5b80633909af5c116101a05780633909af5c1461025b5780634d52b4c91461027d57806352f0f3ad1461029257806361238bde146102b257600080fd5b8063013cf08b146101c75780630359a563146102185780632055b36b14610246575b600080fd5b3480156101d357600080fd5b506101e76101e2366004612d2b565b610691565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b34801561022457600080fd5b50610238610233366004612d6d565b6106d6565b60405190815260200161020f565b34801561025257600080fd5b50610238601081565b34801561026757600080fd5b5061027b610276366004612f68565b61080e565b005b34801561028957600080fd5b50610238610a65565b34801561029e57600080fd5b506102386102ad366004613054565b610a80565b3480156102be57600080fd5b506102386102cd36600461308f565b600160209081526000928352604080842090915290825290205481565b3480156102f657600080fd5b50610238610305366004612d6d565b601560209081526000928352604080842090915290825290205481565b34801561032e57600080fd5b506102386703782dace9d9000081565b34801561034a57600080fd5b5061027b6103593660046130f3565b610b55565b34801561036a57600080fd5b50610238610379366004612d2b565b611045565b34801561038a57600080fd5b506103b961039936600461308f565b600260209081526000928352604080842090915290825290205460ff1681565b604051901515815260200161020f565b3480156103d557600080fd5b506103e96103e436600461318f565b61105c565b60405167ffffffffffffffff909116815260200161020f565b34801561040e57600080fd5b5061027b61041d3660046131c2565b6110b6565b34801561042e57600080fd5b5061023861043d366004612d6d565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601860209081526040808320938352929052205490565b34801561047d57600080fd5b5061027b61048c36600461320e565b6111b1565b34801561049d57600080fd5b5061027b6104ac3660046131c2565b6113c2565b3480156104bd57600080fd5b506102386104cc366004612d6d565b601760209081526000928352604080842090915290825290205481565b3480156104f557600080fd5b5061023861050436600461318f565b61150e565b34801561051557600080fd5b5061027b610524366004612f68565b611540565b34801561053557600080fd5b50601354610238565b34801561054a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610238565b34801561057d57600080fd5b5061023861058c366004612d6d565b601660209081526000928352604080842090915290825290205481565b3480156105b557600080fd5b506105c96105c436600461308f565b611902565b6040805192835260208301919091520161020f565b3480156105ea57600080fd5b5061027b6105f93660046131c2565b6119f3565b34801561060a57600080fd5b5061027b61061936600461329a565b611afb565b34801561062a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610238565b61027b61065f366004613333565b611c81565b34801561067057600080fd5b5061023861067f366004612d2b565b60006020819052908152604090205481565b601381815481106106a157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260156020908152604080832084845290915281205481906107199060601c63ffffffff1690565b63ffffffff16905060005b601081101561080657816001166001036107ac5773ffffffffffffffffffffffffffffffffffffffff85166000908152601460209081526040808320878452909152902081601081106107795761077961336f565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506107ed565b82600382601081106107c0576107c061336f565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c90806107fe816133cd565b915050610724565b505092915050565b600061081a8a8a6106d6565b905061083d86868360208b01356108386108338d613405565b611eec565b611f2c565b801561085b575061085b83838360208801356108386108338a613405565b610891576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016108a791906134d4565b60405160208183030381529060405280519060200120146108f4576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161090a9190613512565b14610941576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109898861094f868061352a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8d92505050565b610992886120e8565b8360400135886040516020016109a891906134d4565b60405160208183030381529060405280519060200120036109f5576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526015602090815260408083208c8452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055610a598a8a33612890565b50505050505050505050565b6001610a73601060026136b1565b610a7d91906136bd565b81565b6000610a8c8686612949565b9050610a99836008613512565b821180610aa65750602083115b15610add576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b60608115610b6e57610b6786866129f6565b9050610ba8565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b815481526020019060010190808311610bd557505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610c568260601c63ffffffff1690565b63ffffffff169050333214610c97576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ca78260801c63ffffffff1690565b63ffffffff16600003610ce6576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf08260c01c90565b67ffffffffffffffff1615610d31576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610d6a576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d7789898d8886612a6f565b83516020850160888204881415608883061715610d9c576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610e4c578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610e41576001821615610e215782818b0152610e41565b8981015160009081526020938452604090209260019290921c9101610e04565b505050608801610da9565b50505050600160106002610e6091906136b1565b610e6a91906136bd565b811115610ea3576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f18610eb68360401c63ffffffff1690565b610ec69063ffffffff168a613512565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b91508415610fa55777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b179150610f528260801c63ffffffff1690565b63ffffffff16610f688360401c63ffffffff1690565b63ffffffff1614610fa5576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208e84529091529020610fcb90846010612ca1565b50503360008181526018602090815260408083208e8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055928252601581528282209c82529b909b52909920989098555050505050505050565b6003816010811061105557600080fd5b0154905081565b6018602052826000526040600020602052816000526040600020818154811061108457600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b6044356000806008830186106110d45763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa90508061110157600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b7f000000000000000000000000000000000000000000000000000000000000000042101561120b576040517f299f254900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080603087600037602060006030600060025afa806112335763f91129696000526004601cfd5b6000517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017608081815260a08c905260c08b905260308a60e037603088609083013760008060c083600a5afa9250826112b5576309bde3396000526004601cfd5b602886106112cb5763fe2549876000526004601cfd5b6000602882015278200000000000000000000000000000000000000000000000008152600881018b905285810151935060308a8237603081019b909b52505060509098207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0500000000000000000000000000000000000000000000000000000000000000176000818152600260209081526040808320868452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209583529481528482209a909a559081528089529190912096909655505050505050565b7f000000000000000000000000000000000000000000000000000000000000000042101561141c576040517f299f254900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006080848682378481207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06000000000000000000000000000000000000000000000000000000000000001792506000808683600a5afa7801000000000000000000000000000000000000000000000000825260f81b600882015286015160008381526002602090815260408083208a8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558684528083528184209a845299825280832093909355938152928390529091209490945550505050565b6014602052826000526040600020602052816000526040600020816010811061153657600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff8116156115b3576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006115de8260c01c90565b6115f29067ffffffffffffffff16426136bd565b11611629576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116358b8b6106d6565b905061164e87878360208c01356108386108338e613405565b801561166c575061166c84848360208901356108386108338b613405565b6116a2576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016116b891906134d4565b6040516020818303038152906040528051906020012014611705576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84602001358860200135600161171b9190613512565b14158061174d575060016117358360601c63ffffffff1690565b61173f91906136d4565b63ffffffff16856020013514155b15611784576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117928961094f878061352a565b61179b896120e8565b60006117a68a612bc2565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f020000000000000000000000000000000000000000000000000000000000000017905060006117fd8460a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601760008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d815260200190815260200160002054600160008481526020019081526020016000206000838152602001908152602001600020819055506118cf8460801c63ffffffff1690565b600083815260208190526040902063ffffffff9190911690556118f38d8d81612890565b50505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff1661198b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546119a7816008613512565b6119b2856020613512565b106119d057836119c3826008613512565b6119cd91906136bd565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018610611a115763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b6000611b0786866106d6565b9050611b2083838360208801356108386108338a613405565b611b56576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084013515611b92576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b9a612cdf565b611ba88161094f878061352a565b611bb1816120e8565b846040013581604051602001611bc791906134d4565b6040516020818303038152906040528051906020012003611c14576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152601560209081526040808320898452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055611c78878733612890565b50505050505050565b6703782dace9d90000341015611cc3576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333214611cfc576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d078160086136f9565b63ffffffff168263ffffffff1610611d4b576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff161015611dab576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b949094179094558251808401845282815280850186815260138054600181018255908452915160029092027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9094167fffffffffffffffffffffffff000000000000000000000000000000000000000090941693909317909255517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0919091015590815260168352818120938152929091529020349055565b6000816000015182602001518360400151604051602001611f0f93929190613721565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611f80578060051b880135600186831c1660018114611f655760008481526020839052604090209350611f76565b600082815260208590526040902093505b5050600101611f32565b5090931495945050505050565b6088815114611f9b57600080fd5b602081016020830161201c565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b171717905061201681612001868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b61202860008383611fa8565b61203460018383611fa8565b61204060028383611fa8565b61204c60038383611fa8565b61205860048383611fa8565b61206460058383611fa8565b61207060068383611fa8565b61207c60078383611fa8565b61208860088383611fa8565b61209460098383611fa8565b6120a0600a8383611fa8565b6120ac600b8383611fa8565b6120b8600c8383611fa8565b6120c4600d8383611fa8565b6120d0600e8383611fa8565b6120dc600f8383611fa8565b61201660108383611fa8565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201612770565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c61229b8660011b67ffffffffffffffff1690565b18188584603f1c6122b68660011b67ffffffffffffffff1690565b18188584603f1c6122d18660011b67ffffffffffffffff1690565b181895508483603f1c6122ee8560011b67ffffffffffffffff1690565b181894508387603f1c61230b8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525b5050505050565b600582811b8201805160018501831b8401805160028701851b8601805160038901871b8801805160048b0190981b8901805167ffffffffffffffff861985168918811690995283198a16861889169096528819861683188816909352841986168818871690528419831684189095169052919391929190611c78565b61270a600082612683565b612715600582612683565b612720600a82612683565b61272b600f82612683565b612736601482612683565b50565b612742816121de565b61274b816126ff565b600383901b820151815160c09190911c9061201690821867ffffffffffffffff168352565b61277c60008284612739565b61278860018284612739565b61279460028284612739565b6127a060038284612739565b6127ac60048284612739565b6127b860058284612739565b6127c460068284612739565b6127d060078284612739565b6127dc60088284612739565b6127e860098284612739565b6127f4600a8284612739565b612800600b8284612739565b61280c600c8284612739565b612818600d8284612739565b612824600e8284612739565b612830600f8284612739565b61283c60108284612739565b61284860118284612739565b61285460128284612739565b61286060138284612739565b61286c60148284612739565b61287860158284612739565b61288460168284612739565b61201660178284612739565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526016602090815260408083208684529091528082208054908390559051909284169083908381818185875af1925050503d8060008114612909576040519150601f19603f3d011682016040523d82523d6000602084013e61290e565b606091505b505090508061267c576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176129ef818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b6060604051905081602082018181018286833760888306808015612a3f5760888290038501848101848103803687375060806001820353506001845160001a1784538652612a56565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b6000612a818260a01c63ffffffff1690565b67ffffffffffffffff1690506000612a9f8360801c63ffffffff1690565b63ffffffff1690506000612ab98460401c63ffffffff1690565b63ffffffff169050600883108015612acf575080155b15612b035760c082901b6000908152883560085283513382526017602090815260408084208a855290915290912055612bb8565b60088310158015612b21575080612b1b6008856136bd565b93508310155b8015612b355750612b328782613512565b83105b15612bb8576000612b4682856136bd565b905087612b54826020613512565b10158015612b60575085155b15612b97576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526017602090815260408083208a845290915290209089013590555b5050505050505050565b6000612c45565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff00612bf38360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff0000612c208360101b67ffffffffffffffff1690565b1617905060008160201c612c3e8360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612c5d90612bc9565b612bc9565b6040820151612c6b90612bc9565b60401b17612c83612c5860018460059190911b015190565b825160809190911b90612c9590612bc9565b60c01b17179392505050565b8260108101928215612ccf579160200282015b82811115612ccf578251825591602001919060010190612cb4565b50612cdb929150612cf7565b5090565b6040518060200160405280612cf2612d0c565b905290565b5b80821115612cdb5760008155600101612cf8565b6040518061032001604052806019906020820280368337509192915050565b600060208284031215612d3d57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612d6857600080fd5b919050565b60008060408385031215612d8057600080fd5b612d8983612d44565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612dea57612dea612d97565b60405290565b6040516060810167ffffffffffffffff81118282101715612dea57612dea612d97565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612e5a57612e5a612d97565b604052919050565b6000610320808385031215612e7657600080fd5b604051602080820167ffffffffffffffff8382108183111715612e9b57612e9b612d97565b8160405283955087601f880112612eb157600080fd5b612eb9612dc6565b9487019491508188861115612ecd57600080fd5b875b86811015612ef55780358381168114612ee85760008081fd5b8452928401928401612ecf565b50909352509295945050505050565b600060608284031215612f1657600080fd5b50919050565b60008083601f840112612f2e57600080fd5b50813567ffffffffffffffff811115612f4657600080fd5b6020830191508360208260051b8501011115612f6157600080fd5b9250929050565b60008060008060008060008060006103e08a8c031215612f8757600080fd5b612f908a612d44565b985060208a01359750612fa68b60408c01612e62565b96506103608a013567ffffffffffffffff80821115612fc457600080fd5b612fd08d838e01612f04565b97506103808c0135915080821115612fe757600080fd5b612ff38d838e01612f1c565b90975095506103a08c013591508082111561300d57600080fd5b6130198d838e01612f04565b94506103c08c013591508082111561303057600080fd5b5061303d8c828d01612f1c565b915080935050809150509295985092959850929598565b600080600080600060a0868803121561306c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156130a257600080fd5b50508035926020909101359150565b60008083601f8401126130c357600080fd5b50813567ffffffffffffffff8111156130db57600080fd5b602083019150836020828501011115612f6157600080fd5b600080600080600080600060a0888a03121561310e57600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561313457600080fd5b6131408b838c016130b1565b909750955060608a013591508082111561315957600080fd5b506131668a828b01612f1c565b9094509250506080880135801515811461317f57600080fd5b8091505092959891949750929550565b6000806000606084860312156131a457600080fd5b6131ad84612d44565b95602085013595506040909401359392505050565b6000806000604084860312156131d757600080fd5b83359250602084013567ffffffffffffffff8111156131f557600080fd5b613201868287016130b1565b9497909650939450505050565b600080600080600080600060a0888a03121561322957600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561324f57600080fd5b61325b8b838c016130b1565b909750955060608a013591508082111561327457600080fd5b506132818a828b016130b1565b989b979a50959894979596608090950135949350505050565b6000806000806000608086880312156132b257600080fd5b6132bb86612d44565b945060208601359350604086013567ffffffffffffffff808211156132df57600080fd5b6132eb89838a01612f04565b9450606088013591508082111561330157600080fd5b5061330e88828901612f1c565b969995985093965092949392505050565b803563ffffffff81168114612d6857600080fd5b60008060006060848603121561334857600080fd5b833592506133586020850161331f565b91506133666040850161331f565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133fe576133fe61339e565b5060010190565b60006060823603121561341757600080fd5b61341f612df0565b823567ffffffffffffffff8082111561343757600080fd5b9084019036601f83011261344a57600080fd5b813560208282111561345e5761345e612d97565b61348e817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612e13565b925081835236818386010111156134a457600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b601981101561350957825167ffffffffffffffff168252602092830192909101906001016134e0565b50505092915050565b600082198211156135255761352561339e565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261355f57600080fd5b83018035915067ffffffffffffffff82111561357a57600080fd5b602001915036819003821315612f6157600080fd5b600181815b808511156135e857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156135ce576135ce61339e565b808516156135db57918102915b93841c9390800290613594565b509250929050565b6000826135ff575060016136ab565b8161360c575060006136ab565b8160018114613622576002811461362c57613648565b60019150506136ab565b60ff84111561363d5761363d61339e565b50506001821b6136ab565b5060208310610133831016604e8410600b841016171561366b575081810a6136ab565b613675838361358f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156136a7576136a761339e565b0290505b92915050565b60006129ef83836135f0565b6000828210156136cf576136cf61339e565b500390565b600063ffffffff838116908316818110156136f1576136f161339e565b039392505050565b600063ffffffff8083168185168083038211156137185761371861339e565b01949350505050565b6000845160005b818110156137425760208188018101518583015201613728565b81811115613751576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a"
func init() {
......
......@@ -70,7 +70,15 @@ func (a *Agent) Act(ctx context.Context) error {
if action.Type == types.ActionTypeStep {
containsOracleData := action.OracleData != nil
isLocal := containsOracleData && action.OracleData.IsLocal
actionLog = actionLog.New("prestate", common.Bytes2Hex(action.PreState), "proof", common.Bytes2Hex(action.ProofData), "containsOracleData", containsOracleData, "isLocalPreimage", isLocal)
actionLog = actionLog.New(
"prestate", common.Bytes2Hex(action.PreState),
"proof", common.Bytes2Hex(action.ProofData),
"containsOracleData", containsOracleData,
"isLocalPreimage", isLocal,
)
if action.OracleData != nil {
actionLog = actionLog.New("oracleKey", common.Bytes2Hex(action.OracleData.OracleKey))
}
} else {
actionLog = actionLog.New("value", action.Value)
}
......
......@@ -20,25 +20,25 @@ import (
)
const (
methodInitLPP = "initLPP"
methodAddLeavesLPP = "addLeavesLPP"
methodSqueezeLPP = "squeezeLPP"
methodLoadKeccak256PreimagePart = "loadKeccak256PreimagePart"
methodLoadSha256PreimagePart = "loadSha256PreimagePart"
methodLoadBlobPreimagePart = "loadBlobPreimagePart"
methodLoadKZGPointEvaluationPreimage = "loadKZGPointEvaluationPreimage"
methodProposalCount = "proposalCount"
methodProposals = "proposals"
methodProposalMetadata = "proposalMetadata"
methodProposalBlocksLen = "proposalBlocksLen"
methodProposalBlocks = "proposalBlocks"
methodPreimagePartOk = "preimagePartOk"
methodMinProposalSize = "minProposalSize"
methodChallengeFirstLPP = "challengeFirstLPP"
methodChallengeLPP = "challengeLPP"
methodChallengePeriod = "challengePeriod"
methodGetTreeRootLPP = "getTreeRootLPP"
methodMinBondSizeLPP = "MIN_BOND_SIZE"
methodInitLPP = "initLPP"
methodAddLeavesLPP = "addLeavesLPP"
methodSqueezeLPP = "squeezeLPP"
methodLoadKeccak256PreimagePart = "loadKeccak256PreimagePart"
methodLoadSha256PreimagePart = "loadSha256PreimagePart"
methodLoadBlobPreimagePart = "loadBlobPreimagePart"
methodLoadKZGPointEvaluationPreimagePart = "loadKZGPointEvaluationPreimagePart"
methodProposalCount = "proposalCount"
methodProposals = "proposals"
methodProposalMetadata = "proposalMetadata"
methodProposalBlocksLen = "proposalBlocksLen"
methodProposalBlocks = "proposalBlocks"
methodPreimagePartOk = "preimagePartOk"
methodMinProposalSize = "minProposalSize"
methodChallengeFirstLPP = "challengeFirstLPP"
methodChallengeLPP = "challengeLPP"
methodChallengePeriod = "challengePeriod"
methodGetTreeRootLPP = "getTreeRootLPP"
methodMinBondSizeLPP = "MIN_BOND_SIZE"
)
var (
......@@ -108,7 +108,7 @@ func (c *PreimageOracleContract) AddGlobalDataTx(data *types.PreimageOracleData)
new(big.Int).SetUint64(uint64(data.OracleOffset)))
return call.ToTxCandidate()
case preimage.KZGPointEvaluationKeyType:
call := c.contract.Call(methodLoadKZGPointEvaluationPreimage, data.GetPreimageWithoutSize())
call := c.contract.Call(methodLoadKZGPointEvaluationPreimagePart, new(big.Int).SetUint64(uint64(data.OracleOffset)), data.GetPreimageWithoutSize())
return call.ToTxCandidate()
default:
return txmgr.TxCandidate{}, fmt.Errorf("%w: %v", ErrUnsupportedKeyType, keyType)
......
......@@ -74,8 +74,9 @@ func TestPreimageOracleContract_AddGlobalDataTx(t *testing.T) {
t.Run("KZGPointEvaluation", func(t *testing.T) {
stubRpc, oracle := setupPreimageOracleTest(t)
input := testutils.RandomData(rand.New(rand.NewSource(23)), 200)
data := types.NewPreimageOracleKZGPointEvaluationData(common.Hash{byte(preimage.KZGPointEvaluationKeyType), 0xcc}.Bytes(), input)
stubRpc.SetResponse(oracleAddr, methodLoadKZGPointEvaluationPreimage, batching.BlockLatest, []interface{}{
data := types.NewPreimageOracleData(common.Hash{byte(preimage.KZGPointEvaluationKeyType), 0xcc}.Bytes(), input, uint32(545))
stubRpc.SetResponse(oracleAddr, methodLoadKZGPointEvaluationPreimagePart, batching.BlockLatest, []interface{}{
new(big.Int).SetUint64(uint64(data.OracleOffset)),
data.GetPreimageWithoutSize(),
}, nil)
......
......@@ -109,7 +109,7 @@ func (l *preimageLoader) loadKZGPointEvaluationPreimage(proof *proofData) (*type
return nil, fmt.Errorf("failed to get key preimage: %w", err)
}
inputWithLength := lengthPrefixed(input)
return types.NewPreimageOracleKZGPointEvaluationData(proof.OracleKey, inputWithLength), nil
return types.NewPreimageOracleData(proof.OracleKey, inputWithLength, proof.OracleOffset), nil
}
func lengthPrefixed(data []byte) []byte {
......
......@@ -172,7 +172,7 @@ func TestPreimageLoader_KZGPointEvaluationPreimage(t *testing.T) {
actual, err := loader.LoadPreimage(proof)
require.NoError(t, err)
inputWithLength := lengthPrefixed(input)
expected := types.NewPreimageOracleKZGPointEvaluationData(proof.OracleKey, inputWithLength)
expected := types.NewPreimageOracleData(proof.OracleKey, inputWithLength, proof.OracleOffset)
require.Equal(t, expected, actual)
})
}
......
......@@ -79,15 +79,6 @@ func NewPreimageOracleBlobData(key []byte, data []byte, offset uint32, fieldInde
}
}
func NewPreimageOracleKZGPointEvaluationData(key []byte, input []byte) *PreimageOracleData {
return &PreimageOracleData{
IsLocal: false,
OracleKey: key,
oracleData: input,
OracleOffset: 0,
}
}
// StepCallData encapsulates the data needed to perform a step.
type StepCallData struct {
ClaimIndex uint64
......
......@@ -582,7 +582,7 @@ func (g *OutputGameHelper) uploadPreimage(ctx context.Context, data *types.Preim
var tx *gethtypes.Transaction
switch data.OracleKey[0] {
case byte(preimage.KZGPointEvaluationKeyType):
tx, err = boundOracle.LoadKZGPointEvaluationPreimage(g.opts, data.GetPreimageWithoutSize())
tx, err = boundOracle.LoadKZGPointEvaluationPreimagePart(g.opts, new(big.Int).SetUint64(uint64(data.OracleOffset)), data.GetPreimageWithoutSize())
default:
tx, err = boundOracle.LoadKeccak256PreimagePart(g.opts, new(big.Int).SetUint64(uint64(data.OracleOffset)), data.GetPreimageWithoutSize())
}
......
......@@ -3,6 +3,7 @@ package faultproofs
import (
"context"
"fmt"
"math/big"
"testing"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/cannon"
......@@ -13,6 +14,7 @@ import (
"github.com/ethereum-optimism/optimism/op-e2e/e2eutils/disputegame/preimage"
"github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/rpc"
"github.com/stretchr/testify/require"
)
......@@ -298,7 +300,6 @@ func TestOutputCannonStepWithPreimage(t *testing.T) {
}
func TestOutputCannonStepWithKZGPointEvaluation(t *testing.T) {
t.Skip("TODO: Fix flaky test")
op_e2e.InitParallel(t, op_e2e.UsesCannon)
testPreimageStep := func(t *testing.T, preloadPreimage bool) {
......@@ -308,6 +309,12 @@ func TestOutputCannonStepWithKZGPointEvaluation(t *testing.T) {
sys, _ := startFaultDisputeSystem(t, withEcotone())
t.Cleanup(sys.Close)
// NOTE: Flake prevention
// Ensure that the L1 origin including the point eval tx isn't on the genesis epoch.
safeBlock, err := sys.Clients["sequencer"].BlockByNumber(ctx, big.NewInt(int64(rpc.SafeBlockNumber)))
require.NoError(t, err)
require.NoError(t, wait.ForSafeBlock(ctx, sys.RollupClient("sequencer"), safeBlock.NumberU64()+3))
receipt := sendKZGPointEvaluationTx(t, sys, "sequencer", sys.Cfg.Secrets.Alice)
precompileBlock := receipt.BlockNumber
t.Logf("KZG Point Evaluation block number: %d", precompileBlock)
......
......@@ -316,13 +316,18 @@
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_partOffset",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_input",
"type": "bytes"
}
],
"name": "loadKZGPointEvaluationPreimage",
"name": "loadKZGPointEvaluationPreimagePart",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
......
......@@ -334,10 +334,11 @@ contract PreimageOracle is IPreimageOracle {
}
/// @inheritdoc IPreimageOracle
function loadKZGPointEvaluationPreimage(bytes calldata _input) external {
function loadKZGPointEvaluationPreimagePart(uint256 _partOffset, bytes calldata _input) external {
// Prior to Cancun activation, the blob preimage precompile is not available.
if (block.timestamp < CANCUN_ACTIVATION) revert CancunNotActive();
bytes32 res;
bytes32 key;
bytes32 part;
assembly {
......@@ -353,7 +354,7 @@ contract PreimageOracle is IPreimageOracle {
// Verify the KZG proof by calling the point evaluation precompile.
// Capture the verification result
part :=
res :=
staticcall(
gas(), // forward all gas
0x0A, // point evaluation precompile address
......@@ -362,13 +363,21 @@ contract PreimageOracle is IPreimageOracle {
0x00, // output ptr
0x00 // output size
)
// "part" will be 0 on error, and 1 on success, of the KZG Point-evaluation precompile call
// "res" will be 0 on error, and 1 on success, of the KZG Point-evaluation precompile call
// We do have to shift it to the left-most byte of the bytes32 however, since we only read that byte.
part := shl(248, part)
res := shl(248, res)
// Reuse the `ptr` to store the preimage part including size prefix.
// put size as big-endian uint64 at the start of pre-image
mstore(ptr, shl(192, 1))
ptr := add(ptr, 0x08)
mstore(ptr, res)
// compute part given ofset
part := mload(add(sub(ptr, 0x08), _partOffset))
}
// the part offset is always 0
preimagePartOk[key][0] = true;
preimageParts[key][0] = part;
preimagePartOk[key][_partOffset] = true;
preimageParts[key][_partOffset] = part;
// size is always 1
preimageLengths[key] = 1;
}
......
......@@ -72,5 +72,5 @@ interface IPreimageOracle {
/// @notice Prepares a point evaluation precompile result to be read by the keccak256 of its input.
/// @param _input The point evaluation precompile input.
function loadKZGPointEvaluationPreimage(bytes calldata _input) external;
function loadKZGPointEvaluationPreimagePart(uint256 _partOffset, bytes calldata _input) external;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment