diff --git a/.github/workflows/dashboard_erigon.yml b/.github/workflows/dashboard_erigon.yml new file mode 100644 index 0000000000..8455249d3d --- /dev/null +++ b/.github/workflows/dashboard_erigon.yml @@ -0,0 +1,57 @@ +name: Daily Run Erigon + +on: + schedule: + - cron: '0 0 * * *' # Run every day at midnight UTC + workflow_dispatch: + push: + branches: + - master + pull_request: + branches: + - master + types: [ closed ] + +jobs: + hive-run: + runs-on: ubuntu-latest + steps: + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: stable + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Install Linux packages + run: | + sudo apt-get update + sudo apt-get install libsnappy-dev libc6-dev libc6 build-essential + + - name: Checkout code + uses: actions/checkout@v2 + + - name: Download dependencies + run: go get -v ./... + + - name: Build hive + run: go build -v -o hive hive.go + + - name: Run Nethermind tests + continue-on-error: true + run: | + ./hive --sim ethereum/engine --sim.limit="withdrawals" --client erigon --results-root=${{ github.workspace }}/runs --loglevel=5 --client.checktimelimit=10m --docker.output + + - name: Send file over SSH + uses: appleboy/scp-action@master + with: + host: ${{ secrets.SSH_HOST }} + username: ${{ secrets.SSH_USERNAME }} + key: ${{ secrets.SSH_KEY }} + port: ${{ secrets.SSH_PORT }} + source: ${{ github.workspace }}/runs/* + target: ${{ secrets.DIR }}/ diff --git a/.github/workflows/dashboard.yml b/.github/workflows/dashboard_nethermind.yml similarity index 94% rename from .github/workflows/dashboard.yml rename to .github/workflows/dashboard_nethermind.yml index e1c180ed2f..36ebc96455 100644 --- a/.github/workflows/dashboard.yml +++ b/.github/workflows/dashboard_nethermind.yml @@ -1,16 +1,19 @@ -name: Daily Command +name: Daily Run Nethermind on: schedule: - cron: '0 0 * * *' # Run every day at midnight UTC workflow_dispatch: + push: + branches: + - master pull_request: branches: - master types: [ closed ] jobs: - run-command: + hive-run: runs-on: ubuntu-latest steps: - name: Set up Go diff --git a/clients/erigon/Dockerfile b/clients/erigon/Dockerfile index 0d096ea4aa..926c45c768 100644 --- a/clients/erigon/Dockerfile +++ b/clients/erigon/Dockerfile @@ -6,11 +6,7 @@ FROM thorax/erigon:$branch USER root # Install script tools. -RUN apk add --update bash curl jq - -# Add genesis mapper script. -ADD genesis.json /genesis.json -ADD mapper.jq /mapper.jq +RUN apk add --update bash curl # Add the startup script. ADD erigon.sh /erigon.sh diff --git a/clients/erigon/erigon.sh b/clients/erigon/erigon.sh index 4f54ddc2e8..0a469b2bf9 100644 --- a/clients/erigon/erigon.sh +++ b/clients/erigon/erigon.sh @@ -44,7 +44,7 @@ fi if [ "$HIVE_BOOTNODE" != "" ]; then # Somehow the bootnodes flag is not working for erigon, only staticpeers is working for sync tests - FLAGS="$FLAGS --staticpeers $HIVE_BOOTNODE --nodiscover" + FLAGS="$FLAGS --staticpeers $HIVE_BOOTNODE" fi if [ "$HIVE_SKIP_POW" != "" ]; then @@ -53,7 +53,7 @@ fi # Create the data directory. mkdir /erigon-hive-datadir -FLAGS="$FLAGS --datadir /erigon-hive-datadir" +FLAGS="$FLAGS --datadir /erigon-hive-datadir --nodiscover" # If a specific network ID is requested, use that if [ "$HIVE_NETWORK_ID" != "" ]; then @@ -62,10 +62,6 @@ else FLAGS="$FLAGS --networkid 1337" fi -# Configure the chain. -mv /genesis.json /genesis-input.json -jq -f /mapper.jq /genesis-input.json > /genesis.json - # Dump genesis echo "Supplied genesis state:" cat /genesis.json @@ -135,6 +131,6 @@ if [ "$HIVE_TERMINAL_TOTAL_DIFFICULTY" != "" ]; then fi # Launch the main client. -FLAGS="$FLAGS --nat=none --externalcl" +FLAGS="$FLAGS --nat=none" echo "Running erigon with flags $FLAGS" $erigon $FLAGS diff --git a/clients/erigon/genesis.json b/clients/erigon/genesis.json deleted file mode 100644 index 7ca6f39f73..0000000000 --- a/clients/erigon/genesis.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "coinbase" : "0x8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "0x020000", - "extraData" : "0x42", - "gasLimit" : "0x2fefd8", - "mixHash" : "0x2c85bcbce56429100b2108254bb56906257582aeafcbd682bc9af67a9f5aee46", - "nonce" : "0x78cc16f7b4f65485", - "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp" : "0x54c98c81", - "alloc" : { - "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "balance" : "0x09184e72a000" - } - } -} diff --git a/go.mod b/go.mod index 768ca71c61..240bfef557 100644 --- a/go.mod +++ b/go.mod @@ -48,9 +48,11 @@ require ( github.com/hashicorp/yamux v0.1.1 // indirect github.com/holiman/bloomfilter/v2 v2.0.3 // indirect github.com/holiman/uint256 v1.2.1 // indirect + github.com/josharian/intern v1.0.0 // indirect github.com/klauspost/compress v1.15.15 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect + github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.16 // indirect github.com/mattn/go-runewidth v0.0.14 // indirect diff --git a/go.sum b/go.sum index f89c355adb..e005f3cb0a 100644 --- a/go.sum +++ b/go.sum @@ -520,6 +520,8 @@ github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -569,6 +571,8 @@ github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= diff --git a/simulators/ethereum/engine/helper/core.go b/simulators/ethereum/engine/helper/core.go index 61c6ae64fb..29566eb188 100644 --- a/simulators/ethereum/engine/helper/core.go +++ b/simulators/ethereum/engine/helper/core.go @@ -84,9 +84,9 @@ func (a Account) Balance() *big.Int { if !ok { return common.Big0 } - hexStr := hexBalance.(string) + hexStr := hexBalance.(common.Hash) balance := common.Big0 - _ = balance.FillBytes(common.Hex2Bytes(hexStr)) + _ = balance.FillBytes(common.Hex2Bytes(hexStr.String())) return balance } @@ -335,3 +335,178 @@ func (n *NethermindChainSpec) ToBlock() *types.Block { //TODO implement me panic("implement me") } + +type ErigonAura struct { + StepDuration int `json:"stepDuration"` + BlockReward int `json:"blockReward"` + MaximumUncleCountTransition int `json:"maximumUncleCountTransition"` + MaximumUncleCount int `json:"maximumUncleCount"` + Validators struct { + Multi map[string]map[string][]string `json:"multi,omitempty"` + } `json:"validators"` + BlockRewardContractAddress string `json:"blockRewardContractAddress"` + BlockRewardContractTransition int `json:"blockRewardContractTransition"` + RandomnessContractAddress map[string]string `json:"randomnessContractAddress"` + PosdaoTransition int `json:"posdaoTransition"` + BlockGasLimitContractTransitions map[string]string `json:"blockGasLimitContractTransitions"` + Registrar string `json:"registrar"` + WithdrawalContractAddress string `json:"withdrawalContractAddress"` +} + +type ErigonConfig struct { + ChainName string `json:"ChainName"` + ChainID int `json:"chainId"` + Consensus string `json:"consensus"` + HomesteadBlock int `json:"homesteadBlock"` + Eip150Block int `json:"eip150Block"` + Eip155Block int `json:"eip155Block"` + ByzantiumBlock int `json:"byzantiumBlock"` + ConstantinopleBlock int `json:"constantinopleBlock"` + PetersburgBlock int `json:"petersburgBlock"` + IstanbulBlock int `json:"istanbulBlock"` + BerlinBlock int `json:"berlinBlock"` + LondonBlock int `json:"londonBlock"` + Eip1559FeeCollectorTransition int `json:"eip1559FeeCollectorTransition"` + Eip1559FeeCollector string `json:"eip1559FeeCollector"` + TerminalTotalDifficulty *big.Int `json:"terminalTotalDifficulty"` + TerminalTotalDifficultyPassed bool `json:"terminalTotalDifficultyPassed"` + ShanghaiTimestamp *big.Int `json:"shanghaiTime"` + Aura ErigonAura `json:"aura"` +} + +type ErigonAccount struct { + Balance string `json:"balance"` + Constructor string `json:"constructor,omitempty"` +} + +type ErigonGenesis struct { + ErigonConfig ErigonConfig `json:"config"` + AuRaSeal string `json:"auRaSeal"` + ErigonGasLimit string `json:"gasLimit"` + ErigonDifficulty string `json:"difficulty"` + ErigonAlloc map[string]ErigonAccount `json:"alloc"` +} + +func (v *ErigonGenesis) Config() *params.ChainConfig { + chainID := big.NewInt(int64(v.ErigonConfig.ChainID)) + ttd := big.NewInt(0).SetBytes(common.Hex2Bytes(v.ErigonDifficulty)) + shangai := v.ErigonConfig.ShanghaiTimestamp.Uint64() //big.NewInt(v.ErigonConfig.ShanghaiTimestamp + return ¶ms.ChainConfig{ + ChainID: chainID, + TerminalTotalDifficulty: ttd, + ShanghaiTime: &shangai, + } +} + +func (v *ErigonGenesis) SetConfig(config *params.ChainConfig) { + //TODO implement me + panic("implement me") +} + +func (v *ErigonGenesis) Nonce() uint64 { + //TODO implement me + panic("implement me") +} + +func (v *ErigonGenesis) SetNonce(nonce uint64) { + //TODO implement me + panic("implement me") +} + +func (v *ErigonGenesis) Timestamp() uint64 { + //TODO implement me + panic("implement me") +} + +func (v *ErigonGenesis) SetTimestamp(timestamp int64) { + v.ErigonConfig.ShanghaiTimestamp = big.NewInt(timestamp) +} + +func (v *ErigonGenesis) ExtraData() []byte { + //TODO implement me + panic("implement me") +} + +func (v *ErigonGenesis) SetExtraData(data []byte) { + //TODO implement me + panic("implement me") +} + +func (v *ErigonGenesis) GasLimit() uint64 { + return common.HexToHash(v.ErigonGasLimit).Big().Uint64() +} + +func (v *ErigonGenesis) SetGasLimit(limit uint64) { + //TODO implement me + panic("implement me") +} + +func (v *ErigonGenesis) Difficulty() *big.Int { + return big.NewInt(0).SetBytes(common.Hex2Bytes(v.ErigonDifficulty)) +} + +func (v *ErigonGenesis) SetDifficulty(difficulty *big.Int) { + v.ErigonDifficulty = common.BigToHash(difficulty).Hex() +} + +func (v *ErigonGenesis) MixHash() common.Hash { + //TODO implement me + panic("implement me") +} + +func (v *ErigonGenesis) SetMixHash(hash common.Hash) { + //TODO implement me + panic("implement me") +} + +func (v *ErigonGenesis) Coinbase() common.Address { + //TODO implement me + panic("implement me") +} + +func (v *ErigonGenesis) SetCoinbase(address common.Address) { + //TODO implement me + panic("implement me") +} + +func (v *ErigonGenesis) Alloc() GenesisAlloc { + //TODO implement me + panic("implement me") +} + +func (v *ErigonGenesis) AllocGenesis(address common.Address, account Account) { + v.ErigonAlloc[address.Hex()] = ErigonAccount{ + Balance: account.Balance().String(), + Constructor: account.Constructor(), + } +} + +func (v *ErigonGenesis) UpdateTimestamp(timestamp string) { + //TODO implement me + panic("implement me") +} + +func (v *ErigonGenesis) Number() uint64 { + //TODO implement me + panic("implement me") +} + +func (v *ErigonGenesis) GasUsed() uint64 { + //TODO implement me + panic("implement me") +} + +func (v *ErigonGenesis) ParentHash() common.Hash { + //TODO implement me + panic("implement me") +} + +func (v *ErigonGenesis) BaseFee() *big.Int { + //TODO implement me + panic("implement me") +} + +func (v *ErigonGenesis) ToBlock() *types.Block { + //TODO implement me + panic("implement me") +} diff --git a/simulators/ethereum/engine/helper/core_easyjson.go b/simulators/ethereum/engine/helper/core_easyjson.go index a8fff13bf6..025569c1ec 100644 --- a/simulators/ethereum/engine/helper/core_easyjson.go +++ b/simulators/ethereum/engine/helper/core_easyjson.go @@ -7,6 +7,7 @@ import ( easyjson "github.com/mailru/easyjson" jlexer "github.com/mailru/easyjson/jlexer" jwriter "github.com/mailru/easyjson/jwriter" + big "math/big" ) // suppress unused package warning @@ -1028,7 +1029,7 @@ func (v *NethermindChainSpec) UnmarshalJSON(data []byte) error { func (v *NethermindChainSpec) UnmarshalEasyJSON(l *jlexer.Lexer) { easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper3(l, v) } -func easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper4(in *jlexer.Lexer, out *Builtin) { +func easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper4(in *jlexer.Lexer, out *ErigonGenesis) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -1047,30 +1048,26 @@ func easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper4( continue } switch key { - case "name": - out.Name = string(in.String()) - case "pricing": + case "config": + (out.ErigonConfig).UnmarshalEasyJSON(in) + case "auRaSeal": + out.AuRaSeal = string(in.String()) + case "gasLimit": + out.ErigonGasLimit = string(in.String()) + case "difficulty": + out.ErigonDifficulty = string(in.String()) + case "alloc": if in.IsNull() { in.Skip() } else { in.Delim('{') - if !in.IsDelim('}') { - out.Pricing = make(map[string]interface{}) - } else { - out.Pricing = nil - } + out.ErigonAlloc = make(map[string]ErigonAccount) for !in.IsDelim('}') { key := string(in.String()) in.WantColon() - var v5 interface{} - if m, ok := v5.(easyjson.Unmarshaler); ok { - m.UnmarshalEasyJSON(in) - } else if m, ok := v5.(json.Unmarshaler); ok { - _ = m.UnmarshalJSON(in.Raw()) - } else { - v5 = in.Interface() - } - (out.Pricing)[key] = v5 + var v5 ErigonAccount + (v5).UnmarshalEasyJSON(in) + (out.ErigonAlloc)[key] = v5 in.WantComma() } in.Delim('}') @@ -1085,28 +1082,39 @@ func easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper4( in.Consumed() } } -func easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper4(out *jwriter.Writer, in Builtin) { +func easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper4(out *jwriter.Writer, in ErigonGenesis) { out.RawByte('{') first := true _ = first - if in.Name != "" { - const prefix string = ",\"name\":" - first = false + { + const prefix string = ",\"config\":" out.RawString(prefix[1:]) - out.String(string(in.Name)) + (in.ErigonConfig).MarshalEasyJSON(out) } - if len(in.Pricing) != 0 { - const prefix string = ",\"pricing\":" - if first { - first = false - out.RawString(prefix[1:]) + { + const prefix string = ",\"auRaSeal\":" + out.RawString(prefix) + out.String(string(in.AuRaSeal)) + } + { + const prefix string = ",\"gasLimit\":" + out.RawString(prefix) + out.String(string(in.ErigonGasLimit)) + } + { + const prefix string = ",\"difficulty\":" + out.RawString(prefix) + out.String(string(in.ErigonDifficulty)) + } + { + const prefix string = ",\"alloc\":" + out.RawString(prefix) + if in.ErigonAlloc == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 { + out.RawString(`null`) } else { - out.RawString(prefix) - } - { out.RawByte('{') v6First := true - for v6Name, v6Value := range in.Pricing { + for v6Name, v6Value := range in.ErigonAlloc { if v6First { v6First = false } else { @@ -1114,13 +1122,7 @@ func easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper4( } out.String(string(v6Name)) out.RawByte(':') - if m, ok := v6Value.(easyjson.Marshaler); ok { - m.MarshalEasyJSON(out) - } else if m, ok := v6Value.(json.Marshaler); ok { - out.Raw(m.MarshalJSON()) - } else { - out.Raw(json.Marshal(v6Value)) - } + (v6Value).MarshalEasyJSON(out) } out.RawByte('}') } @@ -1129,29 +1131,242 @@ func easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper4( } // MarshalJSON supports json.Marshaler interface -func (v Builtin) MarshalJSON() ([]byte, error) { +func (v ErigonGenesis) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper4(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface -func (v Builtin) MarshalEasyJSON(w *jwriter.Writer) { +func (v ErigonGenesis) MarshalEasyJSON(w *jwriter.Writer) { easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper4(w, v) } // UnmarshalJSON supports json.Unmarshaler interface -func (v *Builtin) UnmarshalJSON(data []byte) error { +func (v *ErigonGenesis) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper4(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface -func (v *Builtin) UnmarshalEasyJSON(l *jlexer.Lexer) { +func (v *ErigonGenesis) UnmarshalEasyJSON(l *jlexer.Lexer) { easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper4(l, v) } -func easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5(in *jlexer.Lexer, out *AuthorityParams) { +func easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5(in *jlexer.Lexer, out *ErigonConfig) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeFieldName(false) + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "ChainName": + out.ChainName = string(in.String()) + case "chainId": + out.ChainID = int(in.Int()) + case "consensus": + out.Consensus = string(in.String()) + case "homesteadBlock": + out.HomesteadBlock = int(in.Int()) + case "eip150Block": + out.Eip150Block = int(in.Int()) + case "eip155Block": + out.Eip155Block = int(in.Int()) + case "byzantiumBlock": + out.ByzantiumBlock = int(in.Int()) + case "constantinopleBlock": + out.ConstantinopleBlock = int(in.Int()) + case "petersburgBlock": + out.PetersburgBlock = int(in.Int()) + case "istanbulBlock": + out.IstanbulBlock = int(in.Int()) + case "berlinBlock": + out.BerlinBlock = int(in.Int()) + case "londonBlock": + out.LondonBlock = int(in.Int()) + case "eip1559FeeCollectorTransition": + out.Eip1559FeeCollectorTransition = int(in.Int()) + case "eip1559FeeCollector": + out.Eip1559FeeCollector = string(in.String()) + case "terminalTotalDifficulty": + if in.IsNull() { + in.Skip() + out.TerminalTotalDifficulty = nil + } else { + if out.TerminalTotalDifficulty == nil { + out.TerminalTotalDifficulty = new(big.Int) + } + if data := in.Raw(); in.Ok() { + in.AddError((*out.TerminalTotalDifficulty).UnmarshalJSON(data)) + } + } + case "terminalTotalDifficultyPassed": + out.TerminalTotalDifficultyPassed = bool(in.Bool()) + case "shanghaiTime": + if in.IsNull() { + in.Skip() + out.ShanghaiTimestamp = nil + } else { + if out.ShanghaiTimestamp == nil { + out.ShanghaiTimestamp = new(big.Int) + } + if data := in.Raw(); in.Ok() { + in.AddError((*out.ShanghaiTimestamp).UnmarshalJSON(data)) + } + } + case "aura": + (out.Aura).UnmarshalEasyJSON(in) + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5(out *jwriter.Writer, in ErigonConfig) { + out.RawByte('{') + first := true + _ = first + { + const prefix string = ",\"ChainName\":" + out.RawString(prefix[1:]) + out.String(string(in.ChainName)) + } + { + const prefix string = ",\"chainId\":" + out.RawString(prefix) + out.Int(int(in.ChainID)) + } + { + const prefix string = ",\"consensus\":" + out.RawString(prefix) + out.String(string(in.Consensus)) + } + { + const prefix string = ",\"homesteadBlock\":" + out.RawString(prefix) + out.Int(int(in.HomesteadBlock)) + } + { + const prefix string = ",\"eip150Block\":" + out.RawString(prefix) + out.Int(int(in.Eip150Block)) + } + { + const prefix string = ",\"eip155Block\":" + out.RawString(prefix) + out.Int(int(in.Eip155Block)) + } + { + const prefix string = ",\"byzantiumBlock\":" + out.RawString(prefix) + out.Int(int(in.ByzantiumBlock)) + } + { + const prefix string = ",\"constantinopleBlock\":" + out.RawString(prefix) + out.Int(int(in.ConstantinopleBlock)) + } + { + const prefix string = ",\"petersburgBlock\":" + out.RawString(prefix) + out.Int(int(in.PetersburgBlock)) + } + { + const prefix string = ",\"istanbulBlock\":" + out.RawString(prefix) + out.Int(int(in.IstanbulBlock)) + } + { + const prefix string = ",\"berlinBlock\":" + out.RawString(prefix) + out.Int(int(in.BerlinBlock)) + } + { + const prefix string = ",\"londonBlock\":" + out.RawString(prefix) + out.Int(int(in.LondonBlock)) + } + { + const prefix string = ",\"eip1559FeeCollectorTransition\":" + out.RawString(prefix) + out.Int(int(in.Eip1559FeeCollectorTransition)) + } + { + const prefix string = ",\"eip1559FeeCollector\":" + out.RawString(prefix) + out.String(string(in.Eip1559FeeCollector)) + } + { + const prefix string = ",\"terminalTotalDifficulty\":" + out.RawString(prefix) + if in.TerminalTotalDifficulty == nil { + out.RawString("null") + } else { + out.Raw((*in.TerminalTotalDifficulty).MarshalJSON()) + } + } + { + const prefix string = ",\"terminalTotalDifficultyPassed\":" + out.RawString(prefix) + out.Bool(bool(in.TerminalTotalDifficultyPassed)) + } + { + const prefix string = ",\"shanghaiTime\":" + out.RawString(prefix) + if in.ShanghaiTimestamp == nil { + out.RawString("null") + } else { + out.Raw((*in.ShanghaiTimestamp).MarshalJSON()) + } + } + { + const prefix string = ",\"aura\":" + out.RawString(prefix) + (in.Aura).MarshalEasyJSON(out) + } + out.RawByte('}') +} + +// MarshalJSON supports json.Marshaler interface +func (v ErigonConfig) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5(&w, v) + return w.Buffer.BuildBytes(), w.Error +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v ErigonConfig) MarshalEasyJSON(w *jwriter.Writer) { + easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5(w, v) +} + +// UnmarshalJSON supports json.Unmarshaler interface +func (v *ErigonConfig) UnmarshalJSON(data []byte) error { + r := jlexer.Lexer{Data: data} + easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5(&r, v) + return r.Error() +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *ErigonConfig) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5(l, v) +} +func easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper6(in *jlexer.Lexer, out *ErigonAura) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -1173,7 +1388,7 @@ func easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5( case "stepDuration": out.StepDuration = int(in.Int()) case "blockReward": - out.BlockReward = string(in.String()) + out.BlockReward = int(in.Int()) case "maximumUncleCountTransition": out.MaximumUncleCountTransition = int(in.Int()) case "maximumUncleCount": @@ -1189,11 +1404,7 @@ func easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5( in.Skip() } else { in.Delim('{') - if !in.IsDelim('}') { - out.RandomnessContractAddress = make(map[string]string) - } else { - out.RandomnessContractAddress = nil - } + out.RandomnessContractAddress = make(map[string]string) for !in.IsDelim('}') { key := string(in.String()) in.WantColon() @@ -1204,10 +1415,6 @@ func easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5( } in.Delim('}') } - case "withdrawalContractAddress": - out.WithdrawalContractAddress = string(in.String()) - case "twoThirdsMajorityTransition": - out.TwoThirdsMajorityTransition = int(in.Int()) case "posdaoTransition": out.PosdaoTransition = int(in.Int()) case "blockGasLimitContractTransitions": @@ -1215,11 +1422,7 @@ func easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5( in.Skip() } else { in.Delim('{') - if !in.IsDelim('}') { - out.BlockGasLimitContractTransitions = make(map[string]string) - } else { - out.BlockGasLimitContractTransitions = nil - } + out.BlockGasLimitContractTransitions = make(map[string]string) for !in.IsDelim('}') { key := string(in.String()) in.WantColon() @@ -1230,6 +1433,10 @@ func easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5( } in.Delim('}') } + case "registrar": + out.Registrar = string(in.String()) + case "withdrawalContractAddress": + out.WithdrawalContractAddress = string(in.String()) default: in.SkipRecursive() } @@ -1240,85 +1447,51 @@ func easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5( in.Consumed() } } -func easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5(out *jwriter.Writer, in AuthorityParams) { +func easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper6(out *jwriter.Writer, in ErigonAura) { out.RawByte('{') first := true _ = first - if in.StepDuration != 0 { + { const prefix string = ",\"stepDuration\":" - first = false out.RawString(prefix[1:]) out.Int(int(in.StepDuration)) } - if in.BlockReward != "" { + { const prefix string = ",\"blockReward\":" - if first { - first = false - out.RawString(prefix[1:]) - } else { - out.RawString(prefix) - } - out.String(string(in.BlockReward)) + out.RawString(prefix) + out.Int(int(in.BlockReward)) } - if in.MaximumUncleCountTransition != 0 { + { const prefix string = ",\"maximumUncleCountTransition\":" - if first { - first = false - out.RawString(prefix[1:]) - } else { - out.RawString(prefix) - } + out.RawString(prefix) out.Int(int(in.MaximumUncleCountTransition)) } - if in.MaximumUncleCount != 0 { + { const prefix string = ",\"maximumUncleCount\":" - if first { - first = false - out.RawString(prefix[1:]) - } else { - out.RawString(prefix) - } + out.RawString(prefix) out.Int(int(in.MaximumUncleCount)) } - if true { + { const prefix string = ",\"validators\":" - if first { - first = false - out.RawString(prefix[1:]) - } else { - out.RawString(prefix) - } + out.RawString(prefix) easyjson3d34c335Encode3(out, in.Validators) } - if in.BlockRewardContractAddress != "" { + { const prefix string = ",\"blockRewardContractAddress\":" - if first { - first = false - out.RawString(prefix[1:]) - } else { - out.RawString(prefix) - } + out.RawString(prefix) out.String(string(in.BlockRewardContractAddress)) } - if in.BlockRewardContractTransition != 0 { + { const prefix string = ",\"blockRewardContractTransition\":" - if first { - first = false - out.RawString(prefix[1:]) - } else { - out.RawString(prefix) - } + out.RawString(prefix) out.Int(int(in.BlockRewardContractTransition)) } - if len(in.RandomnessContractAddress) != 0 { + { const prefix string = ",\"randomnessContractAddress\":" - if first { - first = false - out.RawString(prefix[1:]) + out.RawString(prefix) + if in.RandomnessContractAddress == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 { + out.RawString(`null`) } else { - out.RawString(prefix) - } - { out.RawByte('{') v9First := true for v9Name, v9Value := range in.RandomnessContractAddress { @@ -1334,45 +1507,17 @@ func easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5( out.RawByte('}') } } - if in.WithdrawalContractAddress != "" { - const prefix string = ",\"withdrawalContractAddress\":" - if first { - first = false - out.RawString(prefix[1:]) - } else { - out.RawString(prefix) - } - out.String(string(in.WithdrawalContractAddress)) - } - if in.TwoThirdsMajorityTransition != 0 { - const prefix string = ",\"twoThirdsMajorityTransition\":" - if first { - first = false - out.RawString(prefix[1:]) - } else { - out.RawString(prefix) - } - out.Int(int(in.TwoThirdsMajorityTransition)) - } - if in.PosdaoTransition != 0 { + { const prefix string = ",\"posdaoTransition\":" - if first { - first = false - out.RawString(prefix[1:]) - } else { - out.RawString(prefix) - } + out.RawString(prefix) out.Int(int(in.PosdaoTransition)) } - if len(in.BlockGasLimitContractTransitions) != 0 { + { const prefix string = ",\"blockGasLimitContractTransitions\":" - if first { - first = false - out.RawString(prefix[1:]) + out.RawString(prefix) + if in.BlockGasLimitContractTransitions == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 { + out.RawString(`null`) } else { - out.RawString(prefix) - } - { out.RawByte('{') v10First := true for v10Name, v10Value := range in.BlockGasLimitContractTransitions { @@ -1388,31 +1533,41 @@ func easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5( out.RawByte('}') } } + { + const prefix string = ",\"registrar\":" + out.RawString(prefix) + out.String(string(in.Registrar)) + } + { + const prefix string = ",\"withdrawalContractAddress\":" + out.RawString(prefix) + out.String(string(in.WithdrawalContractAddress)) + } out.RawByte('}') } // MarshalJSON supports json.Marshaler interface -func (v AuthorityParams) MarshalJSON() ([]byte, error) { +func (v ErigonAura) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5(&w, v) + easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper6(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface -func (v AuthorityParams) MarshalEasyJSON(w *jwriter.Writer) { - easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5(w, v) +func (v ErigonAura) MarshalEasyJSON(w *jwriter.Writer) { + easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper6(w, v) } // UnmarshalJSON supports json.Unmarshaler interface -func (v *AuthorityParams) UnmarshalJSON(data []byte) error { +func (v *ErigonAura) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5(&r, v) + easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper6(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface -func (v *AuthorityParams) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper5(l, v) +func (v *ErigonAura) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper6(l, v) } func easyjson3d34c335Decode3(in *jlexer.Lexer, out *struct { Multi map[string]map[string][]string `json:"multi,omitempty"` @@ -1559,3 +1714,462 @@ func easyjson3d34c335Encode3(out *jwriter.Writer, in struct { } out.RawByte('}') } +func easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper7(in *jlexer.Lexer, out *ErigonAccount) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeFieldName(false) + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "balance": + out.Balance = string(in.String()) + case "constructor": + out.Constructor = string(in.String()) + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper7(out *jwriter.Writer, in ErigonAccount) { + out.RawByte('{') + first := true + _ = first + { + const prefix string = ",\"balance\":" + out.RawString(prefix[1:]) + out.String(string(in.Balance)) + } + if in.Constructor != "" { + const prefix string = ",\"constructor\":" + out.RawString(prefix) + out.String(string(in.Constructor)) + } + out.RawByte('}') +} + +// MarshalJSON supports json.Marshaler interface +func (v ErigonAccount) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper7(&w, v) + return w.Buffer.BuildBytes(), w.Error +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v ErigonAccount) MarshalEasyJSON(w *jwriter.Writer) { + easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper7(w, v) +} + +// UnmarshalJSON supports json.Unmarshaler interface +func (v *ErigonAccount) UnmarshalJSON(data []byte) error { + r := jlexer.Lexer{Data: data} + easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper7(&r, v) + return r.Error() +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *ErigonAccount) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper7(l, v) +} +func easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper8(in *jlexer.Lexer, out *Builtin) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeFieldName(false) + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "name": + out.Name = string(in.String()) + case "pricing": + if in.IsNull() { + in.Skip() + } else { + in.Delim('{') + if !in.IsDelim('}') { + out.Pricing = make(map[string]interface{}) + } else { + out.Pricing = nil + } + for !in.IsDelim('}') { + key := string(in.String()) + in.WantColon() + var v18 interface{} + if m, ok := v18.(easyjson.Unmarshaler); ok { + m.UnmarshalEasyJSON(in) + } else if m, ok := v18.(json.Unmarshaler); ok { + _ = m.UnmarshalJSON(in.Raw()) + } else { + v18 = in.Interface() + } + (out.Pricing)[key] = v18 + in.WantComma() + } + in.Delim('}') + } + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper8(out *jwriter.Writer, in Builtin) { + out.RawByte('{') + first := true + _ = first + if in.Name != "" { + const prefix string = ",\"name\":" + first = false + out.RawString(prefix[1:]) + out.String(string(in.Name)) + } + if len(in.Pricing) != 0 { + const prefix string = ",\"pricing\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + { + out.RawByte('{') + v19First := true + for v19Name, v19Value := range in.Pricing { + if v19First { + v19First = false + } else { + out.RawByte(',') + } + out.String(string(v19Name)) + out.RawByte(':') + if m, ok := v19Value.(easyjson.Marshaler); ok { + m.MarshalEasyJSON(out) + } else if m, ok := v19Value.(json.Marshaler); ok { + out.Raw(m.MarshalJSON()) + } else { + out.Raw(json.Marshal(v19Value)) + } + } + out.RawByte('}') + } + } + out.RawByte('}') +} + +// MarshalJSON supports json.Marshaler interface +func (v Builtin) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper8(&w, v) + return w.Buffer.BuildBytes(), w.Error +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v Builtin) MarshalEasyJSON(w *jwriter.Writer) { + easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper8(w, v) +} + +// UnmarshalJSON supports json.Unmarshaler interface +func (v *Builtin) UnmarshalJSON(data []byte) error { + r := jlexer.Lexer{Data: data} + easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper8(&r, v) + return r.Error() +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *Builtin) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper8(l, v) +} +func easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper9(in *jlexer.Lexer, out *AuthorityParams) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeFieldName(false) + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "stepDuration": + out.StepDuration = int(in.Int()) + case "blockReward": + out.BlockReward = string(in.String()) + case "maximumUncleCountTransition": + out.MaximumUncleCountTransition = int(in.Int()) + case "maximumUncleCount": + out.MaximumUncleCount = int(in.Int()) + case "validators": + easyjson3d34c335Decode3(in, &out.Validators) + case "blockRewardContractAddress": + out.BlockRewardContractAddress = string(in.String()) + case "blockRewardContractTransition": + out.BlockRewardContractTransition = int(in.Int()) + case "randomnessContractAddress": + if in.IsNull() { + in.Skip() + } else { + in.Delim('{') + if !in.IsDelim('}') { + out.RandomnessContractAddress = make(map[string]string) + } else { + out.RandomnessContractAddress = nil + } + for !in.IsDelim('}') { + key := string(in.String()) + in.WantColon() + var v20 string + v20 = string(in.String()) + (out.RandomnessContractAddress)[key] = v20 + in.WantComma() + } + in.Delim('}') + } + case "withdrawalContractAddress": + out.WithdrawalContractAddress = string(in.String()) + case "twoThirdsMajorityTransition": + out.TwoThirdsMajorityTransition = int(in.Int()) + case "posdaoTransition": + out.PosdaoTransition = int(in.Int()) + case "blockGasLimitContractTransitions": + if in.IsNull() { + in.Skip() + } else { + in.Delim('{') + if !in.IsDelim('}') { + out.BlockGasLimitContractTransitions = make(map[string]string) + } else { + out.BlockGasLimitContractTransitions = nil + } + for !in.IsDelim('}') { + key := string(in.String()) + in.WantColon() + var v21 string + v21 = string(in.String()) + (out.BlockGasLimitContractTransitions)[key] = v21 + in.WantComma() + } + in.Delim('}') + } + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper9(out *jwriter.Writer, in AuthorityParams) { + out.RawByte('{') + first := true + _ = first + if in.StepDuration != 0 { + const prefix string = ",\"stepDuration\":" + first = false + out.RawString(prefix[1:]) + out.Int(int(in.StepDuration)) + } + if in.BlockReward != "" { + const prefix string = ",\"blockReward\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.BlockReward)) + } + if in.MaximumUncleCountTransition != 0 { + const prefix string = ",\"maximumUncleCountTransition\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Int(int(in.MaximumUncleCountTransition)) + } + if in.MaximumUncleCount != 0 { + const prefix string = ",\"maximumUncleCount\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Int(int(in.MaximumUncleCount)) + } + if true { + const prefix string = ",\"validators\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + easyjson3d34c335Encode3(out, in.Validators) + } + if in.BlockRewardContractAddress != "" { + const prefix string = ",\"blockRewardContractAddress\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.BlockRewardContractAddress)) + } + if in.BlockRewardContractTransition != 0 { + const prefix string = ",\"blockRewardContractTransition\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Int(int(in.BlockRewardContractTransition)) + } + if len(in.RandomnessContractAddress) != 0 { + const prefix string = ",\"randomnessContractAddress\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + { + out.RawByte('{') + v22First := true + for v22Name, v22Value := range in.RandomnessContractAddress { + if v22First { + v22First = false + } else { + out.RawByte(',') + } + out.String(string(v22Name)) + out.RawByte(':') + out.String(string(v22Value)) + } + out.RawByte('}') + } + } + if in.WithdrawalContractAddress != "" { + const prefix string = ",\"withdrawalContractAddress\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.WithdrawalContractAddress)) + } + if in.TwoThirdsMajorityTransition != 0 { + const prefix string = ",\"twoThirdsMajorityTransition\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Int(int(in.TwoThirdsMajorityTransition)) + } + if in.PosdaoTransition != 0 { + const prefix string = ",\"posdaoTransition\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Int(int(in.PosdaoTransition)) + } + if len(in.BlockGasLimitContractTransitions) != 0 { + const prefix string = ",\"blockGasLimitContractTransitions\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + { + out.RawByte('{') + v23First := true + for v23Name, v23Value := range in.BlockGasLimitContractTransitions { + if v23First { + v23First = false + } else { + out.RawByte(',') + } + out.String(string(v23Name)) + out.RawByte(':') + out.String(string(v23Value)) + } + out.RawByte('}') + } + } + out.RawByte('}') +} + +// MarshalJSON supports json.Marshaler interface +func (v AuthorityParams) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper9(&w, v) + return w.Buffer.BuildBytes(), w.Error +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v AuthorityParams) MarshalEasyJSON(w *jwriter.Writer) { + easyjson3d34c335EncodeGithubComEthereumHiveSimulatorsEthereumEngineHelper9(w, v) +} + +// UnmarshalJSON supports json.Unmarshaler interface +func (v *AuthorityParams) UnmarshalJSON(data []byte) error { + r := jlexer.Lexer{Data: data} + easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper9(&r, v) + return r.Error() +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *AuthorityParams) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson3d34c335DecodeGithubComEthereumHiveSimulatorsEthereumEngineHelper9(l, v) +} diff --git a/simulators/ethereum/engine/helper/helper.go b/simulators/ethereum/engine/helper/helper.go index 6bcc83c70f..56a92e3b29 100644 --- a/simulators/ethereum/engine/helper/helper.go +++ b/simulators/ethereum/engine/helper/helper.go @@ -205,7 +205,7 @@ func LoadChain(path string) types.Blocks { return blocks } -func LoadGenesis(path string) Genesis { +func LoadGenesis(path string, genesis Genesis) Genesis { reader, err := os.Open(path) if err != nil { panic(fmt.Errorf("can't to read genesis file: %v", err)) @@ -215,7 +215,7 @@ func LoadGenesis(path string) Genesis { panic(fmt.Errorf("can't to read genesis file: %v", err)) } - var genesis NethermindChainSpec + //var genesis NethermindChainSpec err = genesis.UnmarshalJSON(contents) if err != nil { return nil @@ -223,7 +223,7 @@ func LoadGenesis(path string) Genesis { if err := json.Unmarshal(contents, &genesis); err != nil { panic(fmt.Errorf("can't parse genesis JSON: %v", err)) } - return Genesis(&genesis) + return genesis } func LoadGenesisTest(path string) string { @@ -238,19 +238,6 @@ func LoadGenesisTest(path string) string { return string(contents) } -func LoadGenesisBlock(path string) *types.Block { - genesis := LoadGenesis(path) - return genesis.ToBlock() -} - -func GenesisStartOption(genesis Genesis) (hivesim.StartOption, error) { - out, err := genesis.MarshalJSON() - if err != nil { - return nil, fmt.Errorf("failed to serialize genesis state: %v", err) - } - return hivesim.WithDynamicFile("/genesis.json", bytesSource(out)), nil -} - func GenesisStartOptionBasedOnClient(genesis Genesis, clientName string) (hivesim.StartOption, error) { out, err := genesis.MarshalJSON() if err != nil { @@ -265,20 +252,7 @@ func GenesisStartOptionBasedOnClient(genesis Genesis, clientName string) (hivesi } return hivesim.WithDynamicFile("/genesis.json", bytesSource(out)), nil } -func GenesisStartOptionBasedOnClientTest(genesis string, clientName string) (hivesim.StartOption, error) { - //out, err := genesis.MarshalJSON() - //if err != nil { - // return nil, fmt.Errorf("failed to serialize genesis state: %v", err) - //} - // We don't need mappers - //switch clientName { - //case "erigon": - //return hivesim.WithDynamicFile("/genesis.json", bytesSource(out)), nil - //case "nethermind": - return hivesim.WithDynamicFile("/chainspec.json", bytesSource([]byte(genesis))), nil - //} - //return hivesim.WithDynamicFile("/genesis.json", bytesSource(out)), nil -} + func CalculateTotalDifficulty(genesis core.Genesis, chain types.Blocks, lastBlock uint64) *big.Int { result := new(big.Int).Set(genesis.Difficulty) for _, b := range chain { diff --git a/simulators/ethereum/engine/init/erigon_genesis.json b/simulators/ethereum/engine/init/erigon_genesis.json new file mode 100644 index 0000000000..5ec7cbe213 --- /dev/null +++ b/simulators/ethereum/engine/init/erigon_genesis.json @@ -0,0 +1,144 @@ +{ + "alloc": { + "0x59f80ed315477f9f0059D862713A7b082A599217": { + "balance": "0xc9f2c9cd04674edea40000000" + }, + "0xB03a86b3126157C039b55E21D378587CcFc04d45": { + "balance": "0xc9f2c9cd04674edea40000000" + }, + "0xcC4e00A72d871D6c328BcFE9025AD93d0a26dF51": { + "balance": "0xc9f2c9cd04674edea40000000" + }, + "0x0000000000000000000000babe0babe000000000": { + "balance": "0" + }, + "0x1000000000000000000000000000000000000001": { + "balance": "0", + "constructor": "0x60806040526040516108053803806108058339818101604052604081101561002657600080fd5b50805160209182015160408051600081529384018082527f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000905251603c81850301902091929091839190600019016000805160206107aa8339815191521461008a57fe5b61009c826001600160e01b036101bd16565b805115610154576000826001600160a01b0316826040518082805190602001908083835b602083106100df5780518252601f1990920191602091820191016100c0565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461013f576040519150601f19603f3d011682016040523d82523d6000602084013e610144565b606091505b505090508061015257600080fd5b505b5050604080517f656970313936372e70726f78792e61646d696e000000000000000000000000008152905190819003601301902060008051602061078a833981519152600019909101146101a457fe5b6101b6816001600160e01b0361023716565b505061024f565b6101d08161024960201b6104801760201c565b610225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806107ca603b913960400191505060405180910390fd5b6000805160206107aa83398151915255565b60008051602061078a83398151915255565b3b151590565b61052c8061025e6000396000f3fe60806040526004361061004a5760003560e01c80633659cfe6146100545780634f1ef286146100875780635c60da1b146101075780638f28397014610138578063f851a4401461016b575b610052610180565b005b34801561006057600080fd5b506100526004803603602081101561007757600080fd5b50356001600160a01b031661019a565b6100526004803603604081101561009d57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100c857600080fd5b8201836020820111156100da57600080fd5b803590602001918460018302840111640100000000831117156100fc57600080fd5b5090925090506101cb565b34801561011357600080fd5b5061011c61026f565b604080516001600160a01b039092168252519081900360200190f35b34801561014457600080fd5b506100526004803603602081101561015b57600080fd5b50356001600160a01b031661027e565b34801561017757600080fd5b5061011c61033c565b610188610198565b610198610193610346565b61036b565b565b6101a261038f565b6001600160a01b0316336001600160a01b0316146101bf57600080fd5b6101c8816103b4565b50565b6101d361038f565b6001600160a01b0316336001600160a01b0316146101f057600080fd5b6101f9836103b4565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610256576040519150601f19603f3d011682016040523d82523d6000602084013e61025b565b606091505b505090508061026957600080fd5b50505050565b6000610279610346565b905090565b61028661038f565b6001600160a01b0316336001600160a01b0316146102a357600080fd5b6001600160a01b0381166102e85760405162461bcd60e51b81526004018080602001828103825260368152602001806104876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61031161038f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101c8816103f4565b600061027961038f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6103bd81610418565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b61042181610480565b61045c5760405162461bcd60e51b815260040180806020018281038252603b8152602001806104bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3b15159056fe43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a265627a7a72305820a9aab4b95b654a79b32f5aa284796894f8329aaa083932695296085b196c27bd64736f6c634300050a0032b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc43616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000000000000000001000000000000000000000000000000000000000000000000000000000000000b03a86b3126157c039b55e21d378587ccfc04d45" + }, + "0x1000000000000000000000000000000000000000": { + "balance": "0", + "constructor": "0x608060405234801561001057600080fd5b506141f5806100206000396000f3fe608060405234801561001057600080fd5b50600436106103b85760003560e01c806383465b82116101f4578063b41832e41161011a578063cd24327e116100ad578063ee99205c1161007c578063ee99205c14610e29578063eebc7a3914610e31578063facd743b14610e39578063fe54477e14610e5f576103b8565b8063cd24327e14610d79578063d207778214610de7578063e284789514610def578063e717de3a14610e0c576103b8565b8063c9e9694d116100e9578063c9e9694d14610cf8578063cbd2d52814610d1e578063cccf3a0214610d54578063ccf69e9b14610d71576103b8565b8063b41832e414610c3f578063b7ab4db514610c65578063b927ef4314610c6d578063c476dd4014610c75576103b8565b8063a48b042a11610192578063a881c5fd11610161578063a881c5fd14610be3578063a92252ae14610c09578063b172b22214610c2f578063b2c65a1014610c37576103b8565b8063a48b042a14610b50578063a4e01eaa14610b6d578063a657e57914610b8a578063a670eb5614610b92576103b8565b806393b4e25e116101ce57806393b4e25e14610ae857806394f3a24114610af05780639b4a14bf14610b0d578063a26301f914610b2a576103b8565b806383465b8214610a6b5780639184d0ad14610a9157806392d276b414610abf576103b8565b8063392e53cd116102e45780636729c2dc11610277578063714897df11610246578063714897df14610a2d57806374bdb37214610a355780637528621114610a3d57806381db0a4914610a45576103b8565b80636729c2dc1461090f5780636b5ecfd3146109175780636e85d53d1461093d578063704189ca14610a25576103b8565b806356b54bae116102b357806356b54bae1461081b5780635836d08a14610823578063595bddf9146108495780635ccee1de14610907576103b8565b8063392e53cd146107c85780633d34d9ef146107d05780633d3b5458146107f65780634d04481e146107fe576103b8565b80631776dee31161035c5780632bbb7b721161032b5780632bbb7b721461061c5780632f248e3014610642578063374dc77d1461065f578063378bf28b14610736576103b8565b80631776dee31461057c5780631a7fa237146105985780631d0cd4c6146105d05780631ee4d0bc146105f6576103b8565b80630636bdac116103985780630636bdac1461049157806309bee538146104ff5780630bf480c01461055757806316cf66ab1461055f576103b8565b80624a8803146103bd5780625351751461042457806305461c8514610466575b600080fd5b6103c5610e67565b604051808060200183151515158152602001828103825284818151815260200191508051906020019060200280838360005b8381101561040f5781810151838201526020016103f7565b50505050905001935050505060405180910390f35b61044a6004803603602081101561043a57600080fd5b50356001600160a01b0316610f21565b604080516001600160a01b039092168252519081900360200190f35b61048f6004803603606081101561047c57600080fd5b5080359060208101359060400135610f3c565b005b61048f600480360360208110156104a757600080fd5b810190602081018135600160201b8111156104c157600080fd5b8201836020820111156104d357600080fd5b803590602001918460208302840111600160201b831117156104f457600080fd5b50909250905061100d565b610507611073565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561054357818101518382015260200161052b565b505050509050019250505060405180910390f35b6105076110cc565b61044a6004803603602081101561057557600080fd5b5035611125565b610584611140565b604080519115158252519081900360200190f35b6105be600480360360208110156105ae57600080fd5b50356001600160a01b0316611147565b60408051918252519081900360200190f35b6105be600480360360208110156105e657600080fd5b50356001600160a01b0316611173565b61044a6004803603602081101561060c57600080fd5b50356001600160a01b031661119b565b6105be6004803603602081101561063257600080fd5b50356001600160a01b03166111b6565b61048f6004803603602081101561065857600080fd5b50356111c8565b6105be6004803603608081101561067557600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156106a857600080fd5b8201836020820111156106ba57600080fd5b803590602001918460018302840111600160201b831117156106db57600080fd5b919390929091602081019035600160201b8111156106f857600080fd5b82018360208201111561070a57600080fd5b803590602001918460018302840111600160201b8311171561072b57600080fd5b50909250905061134a565b6107536004803603602081101561074c57600080fd5b50356113f1565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561078d578181015183820152602001610775565b50505050905090810190601f1680156107ba5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61058461148c565b61048f600480360360208110156107e657600080fd5b50356001600160a01b031661149d565b61058461194d565b6105846004803603602081101561081457600080fd5b503561196a565b61044a61199a565b6105be6004803603602081101561083957600080fd5b50356001600160a01b03166119a9565b61048f6004803603604081101561085f57600080fd5b810190602081018135600160201b81111561087957600080fd5b82018360208201111561088b57600080fd5b803590602001918460018302840111600160201b831117156108ac57600080fd5b919390929091602081019035600160201b8111156108c957600080fd5b8201836020820111156108db57600080fd5b803590602001918460018302840111600160201b831117156108fc57600080fd5b5090925090506119d1565b61048f611a82565b610507611f99565b6105846004803603602081101561092d57600080fd5b50356001600160a01b0316611fef565b61048f600480360360e081101561095357600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013516919081019060a081016080820135600160201b81111561099557600080fd5b8201836020820111156109a757600080fd5b803590602001918460208302840111600160201b831117156109c857600080fd5b919390929091602081019035600160201b8111156109e557600080fd5b8201836020820111156109f757600080fd5b803590602001918460208302840111600160201b83111715610a1857600080fd5b9193509150351515612004565b6105be61224e565b6105be61227e565b6105be612283565b61048f612289565b61048f60048036036020811015610a5b57600080fd5b50356001600160a01b0316612382565b6105be60048036036020811015610a8157600080fd5b50356001600160a01b03166125a5565b61058460048036036040811015610aa757600080fd5b506001600160a01b03813516906020013515156125b7565b610ac761270a565b604080519283526001600160a01b0390911660208301528051918290030190f35b61048f61271c565b61048f60048036036020811015610b0657600080fd5b5035612805565b61058460048036036020811015610b2357600080fd5b5035612833565b6105be60048036036020811015610b4057600080fd5b50356001600160a01b0316612848565b61058460048036036020811015610b6657600080fd5b503561285a565b61058460048036036020811015610b8357600080fd5b503561290e565b6105be61292d565b610bc860048036036060811015610ba857600080fd5b506001600160a01b03813581169160208101359091169060400135612933565b60408051921515835290151560208301528051918290030190f35b61058460048036036020811015610bf957600080fd5b50356001600160a01b0316612b1f565b61058460048036036020811015610c1f57600080fd5b50356001600160a01b0316612b32565b61044a612b4f565b61048f612b5e565b6105be60048036036020811015610c5557600080fd5b50356001600160a01b0316612d39565b610507612d61565b6105be612e11565b61048f60048036036060811015610c8b57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610cba57600080fd5b820183602082011115610ccc57600080fd5b803590602001918460018302840111600160201b83111715610ced57600080fd5b509092509050612e17565b6105be60048036036020811015610d0e57600080fd5b50356001600160a01b0316613022565b61058460048036036060811015610d3457600080fd5b506001600160a01b0381358116916020810135909116906040013561304a565b61075360048036036020811015610d6a57600080fd5b5035613104565b61044a61316c565b61048f60048036036020811015610d8f57600080fd5b810190602081018135600160201b811115610da957600080fd5b820183602082011115610dbb57600080fd5b803590602001918460208302840111600160201b83111715610ddc57600080fd5b50909250905061317b565b6105be6131ce565b61044a60048036036020811015610e0557600080fd5b50356131d4565b61058460048036036020811015610e2257600080fd5b50356131ef565b61044a613204565b610507613213565b61058460048036036020811015610e4f57600080fd5b50356001600160a01b03166132be565b6105076132e9565b600454604080518281526020808402820101909152606091600091908015610e99578160200160208202803883390190505b50915060005b8251811015610f1557601e600060036001018381548110610ebc57fe5b9060005260206000200154815260200190815260200160002060009054906101000a90046001600160a01b0316838281518110610ef557fe5b6001600160a01b0390921660209283029190910190910152600101610e9f565b505060035460ff169091565b6010602052600090815260409020546001600160a01b031681565b6025546001600160a01b03163314610f5357600080fd5b60008381526027602052604090205460ff1615610f6f57611008565b6000838152601e60205260409020546001600160a01b0316610f9057600080fd5b81610f9a57600080fd5b600083815260096020526040902054821115610fc25760008381526009602052604090208290555b600083815260086020908152604080832080546001019055600b9091529020819055610fed8361333f565b15610ffc57610ffc600061343e565b61100461347a565b6019555b505050565b6011546001600160a01b0316331461102457600080fd5b61106f828280806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250691d5b9c995d99585b195960b21b925061347e915050565b5050565b606060268054806020026020016040519081016040528092919081815260200182805480156110c157602002820191906000526020600020905b8154815260200190600101908083116110ad575b505050505090505b90565b606060036001018054806020026020016040519081016040528092919081815260200182805480156110c157602002820191906000526020600020908154815260200190600101908083116110ad575050505050905090565b601f602052600090815260409020546001600160a01b031681565b6004541590565b6001600160a01b0381166000908152601c60209081526040808320548352600a9091529020545b919050565b6001600160a01b03166000908152601c60209081526040808320548352600890915290205490565b6014602052600090815260409020546001600160a01b031681565b601c6020526000908152604090205481565b6111d061148c565b6111d957600080fd5b60008181526027602052604090205460ff166111f457600080fd5b6000818152601f60205260409020546001600160a01b031633811480611232575061121d613486565b6001600160a01b0316336001600160a01b0316145b61123b57600080fd5b601554604080516302f248e360e41b81526004810185905290516001600160a01b0390921691632f248e309160248082019260009290919082900301818387803b15801561128857600080fd5b505af115801561129c573d6000803e3d6000fd5b506000925050505b6026548110156113245782602682815481106112bc57fe5b9060005260206000200154141561131c576026805460001981019081106112df57fe5b9060005260206000200154602682815481106112f757fe5b60009182526020909120015560268054906113169060001983016140a6565b50611324565b6001016112a4565b506000828152602760205260409020805460ff1916905561134361347a565b6019555050565b6015546000906001600160a01b0316331461136457600080fd5b600061137088886134ab565b90506113e68187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284376000920191909152506137de92505050565b979650505050505050565b60246020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156114845780601f1061145957610100808354040283529160200191611484565b820191906000526020600020905b81548152906001019060200180831161146757829003601f168201915b505050505081565b600c546001600160a01b0316151590565b6114a561148c565b6114ae57600080fd5b33600081815260106020908152604080832054601d909252909120546001600160a01b039182169184166114e157600080fd5b6001600160a01b0382166114f457600080fd5b836001600160a01b0316826001600160a01b0316141561151357600080fd5b8061151d57600080fd5b6021541561152a57600080fd5b601554604080516322e8c68760e21b81526001600160a01b03878116600483015291519190921691638ba31a1c916024808301926020929190829003018186803b15801561157757600080fd5b505afa15801561158b573d6000803e3d6000fd5b505050506040513d60208110156115a157600080fd5b5051156115ad57600080fd5b6001600160a01b0384166000908152601a6020526040902054156115d057600080fd5b6001600160a01b0384166000908152601b602052604090205460ff16156115f657600080fd5b6000818152600e602052604090205460ff16156118ee57611615611140565b61161e57600080fd5b60055460ff161561162e57600080fd5b6117426116bc6002601160009054906101000a90046001600160a01b03166001600160a01b0316631c77c58c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561168457600080fd5b505afa158015611698573d6000803e3d6000fd5b505050506040513d60208110156116ae57600080fd5b50519063ffffffff61394416565b601560009054906101000a90046001600160a01b03166001600160a01b0316638c2243ae6040518163ffffffff1660e01b815260040160206040518083038186803b15801561170a57600080fd5b505afa15801561171e573d6000803e3d6000fd5b505050506040513d602081101561173457600080fd5b50519063ffffffff61396b16565b61174a61347a565b1061175457600080fd5b606061175e613213565b905060005b81518110156117d357836001600160a01b031682828151811061178257fe5b60200260200101516001600160a01b031614156117cb57858282815181106117a657fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506117d3565b600101611763565b50600180546117e4916004916140ca565b506021829055602280546001600160a01b0319166001600160a01b038781169190911790915560115460408051630b40282360e01b81526004810186905290519190921691630b40282391602480830192600092919082900301818387803b15801561184f57600080fd5b505af1158015611863573d6000803e3d6000fd5b50505050600161187161347a565b03407f55252fa6eee4741b4e24a74a70e9c11fd2c2281df8d6ea13126ff845f7825c89826040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156118d55781810151838201526020016118bd565b505050509050019250505060405180910390a250611906565b6118fa82858386613980565b61190261347a565b6019555b836001600160a01b0316826001600160a01b0316827fad4c947995a3daa512a7371d31325a21227249f8dc1c52c1a4c6fe8475a3ebb160405160405180910390a450505050565b6000611957611140565b8015611965575060055460ff165b905090565b6000818152600960205260408120548061198857600091505061116e565b8061199161347a565b11159392505050565b600c546001600160a01b031681565b6001600160a01b03166000908152601c60209081526040808320548352600990915290205490565b6119d961148c565b6119e257600080fd5b336000908152601d6020526040902054806119fc57600080fd5b611a708186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a0181900481028201810190925288815292508891508790819084018382808284376000920191909152506137de92505050565b611a7861347a565b6019555050505050565b600c546001600160a01b03163314611a9957600080fd5b6015546040805163a5d54f6560e01b815290516060926001600160a01b03169163a5d54f65916004808301926000929190829003018186803b158015611ade57600080fd5b505afa158015611af2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611b1b57600080fd5b810190808051600160201b811115611b3257600080fd5b82016020810184811115611b4557600080fd5b81518560208202830111600160201b82111715611b6157600080fd5b505060265490945060009350601310159150611b809050576000611b87565b6026546013035b9050808251118015611b9857508015155b15611e345760115460408051634191031360e11b815290516000926001600160a01b0316916383220626916004808301926020929190829003018186803b158015611be257600080fd5b505afa158015611bf6573d6000803e3d6000fd5b505050506040513d6020811015611c0c57600080fd5b50516015546040805163957950a760e01b815290519293506060926000926001600160a01b03169163957950a79160048083019286929190829003018186803b158015611c5857600080fd5b505afa158015611c6c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040908152811015611c9557600080fd5b810190808051600160201b811115611cac57600080fd5b82016020810184811115611cbf57600080fd5b81518560208202830111600160201b82111715611cdb57600080fd5b50506020909101518151919550935015801592509050611cfb5750600081115b15611e2c57606084604051908082528060200260200182016040528015611d2c578160200160208202803883390190505b50865190915060005b8251811015611e1f57604080516020808201989098528151808203890181529082019091528051960195909520946000611d70868689613a09565b9050888181518110611d7e57fe5b6020026020010151848381518110611d9257fe5b602002602001018181525050858181518110611daa57fe5b602002602001015185039450828060019003935050888381518110611dcb57fe5b6020026020010151898281518110611ddf57fe5b602002602001018181525050858381518110611df757fe5b6020026020010151868281518110611e0b57fe5b602090810291909101015250600101611d35565b50611e2982613a56565b50505b505050611e3d565b611e3d82613a56565b611e47600161343e565b815115611eb757601560009054906101000a90046001600160a01b03166001600160a01b0316631555371c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b505050505b601560009054906101000a90046001600160a01b03166001600160a01b031663ee435f556040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611f0757600080fd5b505af1158015611f1b573d6000803e3d6000fd5b50506015546001600160a01b031691506320d96e469050611f3a61347a565b6001016040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611f7357600080fd5b505af1158015611f87573d6000803e3d6000fd5b5050600060185550611343905061347a565b606060018054806020026020016040519081016040528092919081815260200182805480156110c157602002820191906000526020600020908154815260200190600101908083116110ad575050505050905090565b601b6020526000908152604090205460ff1681565b61200c61347a565b1580612030575061201b613486565b6001600160a01b0316336001600160a01b0316145b61203957600080fd5b61204161148c565b1561204b57600080fd5b6001600160a01b03891661205e57600080fd5b6001600160a01b03871661207157600080fd5b6001600160a01b03861661208457600080fd5b8361208e57600080fd5b83821461209a57600080fd5b60138411156120a857600080fd5b600c80546001600160a01b03808c166001600160a01b031992831617909255602580548b8416908316179055601180548a841690831617905560158054928916929091169190911790556120fa61347a565b60195560005b8481101561224257600086868381811061211657fe5b905060200201356001600160a01b03169050600085858481811061213657fe5b905060200201356001600160a01b03169050600061215483836134ab565b60008054600181810183557f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563909101839055805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601839055828252600e60209081526040808420805460ff1916841790556017909152909120805490910190559050831580156121e75750845b15612237576026805460018181019092557f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594018290556000828152602760205260409020805460ff191690911790555b505050600101612100565b50505050505050505050565b602654600090612260575060006110c9565b602660008154811061226e57fe5b9060005260206000200154905090565b601381565b60195481565b6002600160a01b03331461229c57600080fd5b60035460ff1615612331576122af613c82565b6122b96001613d3b565b600c60009054906101000a90046001600160a01b03166001600160a01b031663c5dd76286040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561230957600080fd5b505af115801561231d573d6000803e3d6000fd5b5050505061232961347a565b601855612354565b60045415612348576123436000613d3b565b612354565b61235061347a565b6018555b61235c613eaf565b6003805460ff19168155600061237360048261411a565b505061237d61347a565b601955565b61238a61148c565b61239357600080fd5b336000818152601d60205260409020546001600160a01b0383166123b657600080fd5b826001600160a01b0316826001600160a01b031614156123d557600080fd5b806123df57600080fd5b602154156123ec57600080fd5b601554604080516322e8c68760e21b81526001600160a01b03868116600483015291519190921691638ba31a1c916024808301926020929190829003018186803b15801561243957600080fd5b505afa15801561244d573d6000803e3d6000fd5b505050506040513d602081101561246357600080fd5b50511561246f57600080fd5b6001600160a01b0383166000908152601a60205260409020541561249257600080fd5b6001600160a01b0383166000908152601b602052604090205460ff16156124b857600080fd5b6000818152601e60209081526040808320546001600160a01b03868116808652601d85528386208690558882168087528487208890559086526010855283862080546001600160a01b03199081169091558187528487208054821693909416928317909355868652601f855283862080548416821790558186526014855283862080549093168117909255908452601b909252909120805460ff1916600117905561256161347a565b6019556040516001600160a01b03808616919085169084907f5c44164828293bba0353472e907f7ee26a8659f916e6311fe826a7c70510e35290600090a450505050565b601a6020526000908152604090205481565b60008082156125df57506001600160a01b0383166000908152601c60205260409020546125fa565b506001600160a01b0383166000908152601a60205260409020545b6000818152600e602052604081205460ff16801561261e575061261c8261196a565b155b9050601560009054906101000a90046001600160a01b03166001600160a01b031663794c0c686040518163ffffffff1660e01b815260040160206040518083038186803b15801561266e57600080fd5b505afa158015612682573d6000803e3d6000fd5b505050506040513d602081101561269857600080fd5b505115806126a65750601854155b156126b45791506127049050565b60136018546126c161347a565b0311612700576000828152600f602052604081205460ff1680156126eb57506126e98361196a565b155b905081806126f65750805b9350505050612704565b9150505b92915050565b6021546022546001600160a01b031682565b61272461148c565b61272d57600080fd5b61273561194d565b61273e57600080fd5b6000612748613f0e565b6001549091501561280257600161275d61347a565b03407f55252fa6eee4741b4e24a74a70e9c11fd2c2281df8d6ea13126ff845f7825c89612788613213565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156127c45781810151838201526020016127ac565b505050509050019250505060405180910390a2600180546127e7916004916140ca565b506003805460ff19168215151790556127fe61347a565b6019555b50565b61280d613486565b6001600160a01b0316336001600160a01b03161461282a57600080fd5b61280281613f26565b600e6020526000908152604090205460ff1681565b601d6020526000908152604090205481565b6000818152600e602052604081205460ff16156128795750600161116e565b6004546000905b808210156128be57600480548390811061289657fe5b90600052602060002001548414156128b35760019250505061116e565b600190910190612880565b50506001546000905b8082101561290457600182815481106128dc57fe5b90600052602060002001548414156128f95760019250505061116e565b6001909101906128c7565b5060009392505050565b6000818152600a602052604081205461292561347a565b111592915050565b60205481565b6000806129418560016125b7565b61295057506000905080612b17565b61295b8460006125b7565b61296a57506000905080612b17565b6001600160a01b038086166000908152601c60209081526040808320549388168352601a90915281205490546001811115612a825760155460408051630f29818d60e31b815290516000926001600160a01b03169163794c0c68916004808301926020929190829003018186803b1580156129e457600080fd5b505afa1580156129f8573d6000803e3d6000fd5b505050506040513d6020811015612a0e57600080fd5b5051600085815260126020908152604080832084845282528083205460139092528220549293509190828210612a535760018503838303600a0281612a4f57fe5b0490505b8460320283118015612a6457508083115b15612a7d57600060019850985050505050505050612b17565b505050505b6000612a8c61347a565b905080871115612aa6576000809550955050505050612b17565b60648082118015612ab8575080820388105b15612ace57600080965096505050505050612b17565b60008481526007602090815260408083208b8452825280832088845290915290205460ff1615612b0957600080965096505050505050612b17565b600160009650965050505050505b935093915050565b6000612b2a82611147565b61292561347a565b600080612b3e836119a9565b90508061198857600091505061116e565b6025546001600160a01b031681565b612b66613486565b6001600160a01b0316336001600160a01b031614612b8357600080fd5b60265415612b9057600080fd5b601654736a3154a1f55a8faf96dfde75d25eff0c06eb678414612bb257600080fd5b6016805460268054600181810183557f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a35949182019390935581548084019092557359be7069745a9820a75aa66357a50a5d7f66ced591018190558254600090815260276020526040808220805460ff1990811686179091559282527f4bf96c2adb0c7a309689f5f3e58c1a880f1b61efb59c1459be862d2666e5acdb8054909316909317909155601554925482516394f3a24160e01b8152600481019190915291516001600160a01b03909316926394f3a24192602480820193929182900301818387803b158015612ca257600080fd5b505af1158015612cb6573d6000803e3d6000fd5b5050601554604080516394f3a24160e01b81527359be7069745a9820a75aa66357a50a5d7f66ced5600482015290516001600160a01b0390921693506394f3a241925060248082019260009290919082900301818387803b158015612d1a57600080fd5b505af1158015612d2e573d6000803e3d6000fd5b505060006016555050565b6001600160a01b03166000908152601c60209081526040808320548352601790915290205490565b606080600080549050604051908082528060200260200182016040528015612d93578160200160208202803883390190505b50905060005b8151811015612e0b57601e6000808381548110612db257fe5b9060005260206000200154815260200190815260200160002060009054906101000a90046001600160a01b0316828281518110612deb57fe5b6001600160a01b0390921660209283029190910190910152600101612d99565b50905090565b60185481565b612e1f61148c565b612e2857600080fd5b336000818152601c60209081526040808320546001600160a01b0389168452601a90925290912054612e5b8360016125b7565b15612e6957612e6982613fff565b600080612e77858a8a612933565b9150915081612ef3578015612ee957604080516001808252818301909252606091602080830190803883390190505090508581600081518110612eb657fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612ee781637370616d60e01b61347e565b505b505050505061301c565b60008381526006602090815260408083208b84528252808320805460018181018355828652848620909101899055878552600784528285208d86528452828520898652845293829020805460ff191690941790935580516001600160a01b03808a1682528d16928101929092528051869288928d927fc98c577e9aca0ce08e747dd843b95214821e69106d6916218997e8a8f357f3189281900390910190a46000548154612fa890600263ffffffff61394416565b111561224257604080516001808252818301909252606091602080830190803883390190505090508a81600081518110612fde57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505061301481686d616c6963696f757360b81b61347e565b505050505050505b50505050565b6001600160a01b03166000908152601c60209081526040808320548352600b90915290205490565b60008061305561347a565b90508060010183111561306c5760009150506130fd565b60648111801561307e57508260648203115b1561308d5760009150506130fd565b6001600160a01b0384166000908152601a60205260409020546130af8161196a565b156130bf576000925050506130fd565b6001600160a01b0386166000908152601c6020908152604080832054938352600782528083208784528252808320938352929052205460ff16159150505b9392505050565b60236020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156114845780601f1061145957610100808354040283529160200191611484565b6011546001600160a01b031681565b613183613486565b6001600160a01b0316336001600160a01b0316146131a057600080fd5b60005b81811015611008576131c68383838181106131ba57fe5b90506020020135613f26565b6001016131a3565b600d5481565b601e602052600090815260409020546001600160a01b031681565b60276020526000908152604090205460ff1681565b6015546001600160a01b031681565b606080600180549050604051908082528060200260200182016040528015613245578160200160208202803883390190505b50905060005b8151811015612e0b57601e60006001838154811061326557fe5b9060005260206000200154815260200190815260200160002060009054906101000a90046001600160a01b031682828151811061329e57fe5b6001600160a01b039092166020928302919091019091015260010161324b565b6001600160a01b03166000908152601c60209081526040808320548352600e90915290205460ff1690565b606060008054806020026020016040519081016040528092919081815260200182805480156110c157602002820191906000526020600020908154815260200190600101908083116110ad575050505050905090565b60155460408051630a38dcbd60e41b81526004810184905290516000926001600160a01b03169163a38dcbd0916024808301928692919082900301818387803b15801561338b57600080fd5b505af115801561339f573d6000803e3d6000fd5b505060018054925082141590506133ba57600091505061116e565b60005b818110156129045783600182815481106133d357fe5b90600052602060002001541415613436576001808303815481106133f357fe5b90600052602060002001546001828154811061340b57fe5b600091825260209091200155600180549061342a9060001983016140a6565b5060019250505061116e565b6001016133bd565b6005805460ff19166001179055808015613459575060015415155b1561346e576005805461ff0019166101001790555b50600d80546001019055565b4390565b61134361347a565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b602154600090156134bb57600080fd5b6001600160a01b0383166134ce57600080fd5b6001600160a01b0382166134e157600080fd5b816001600160a01b0316836001600160a01b0316141561350057600080fd5b6001600160a01b03828116600090815260106020526040902054161561352557600080fd5b6001600160a01b03838116600090815260106020526040902054161561354a57600080fd5b6001600160a01b03828116600090815260146020526040902054161561356f57600080fd5b6001600160a01b03838116600090815260146020526040902054161561359457600080fd5b601554604080516322e8c68760e21b81526001600160a01b03868116600483015291519190921691638ba31a1c916024808301926020929190829003018186803b1580156135e157600080fd5b505afa1580156135f5573d6000803e3d6000fd5b505050506040513d602081101561360b57600080fd5b50511561361757600080fd5b601554604080516322e8c68760e21b81526001600160a01b03858116600483015291519190921691638ba31a1c916024808301926020929190829003018186803b15801561366457600080fd5b505afa158015613678573d6000803e3d6000fd5b505050506040513d602081101561368e57600080fd5b50511561369a57600080fd5b6001600160a01b0383166000908152601a6020526040902054156136bd57600080fd5b6001600160a01b0382166000908152601a6020526040902054156136e057600080fd5b6001600160a01b0383166000908152601b602052604090205460ff161561370657600080fd5b6001600160a01b0382166000908152601b602052604090205460ff161561372c57600080fd5b506020805460019081018083556001600160a01b039485166000818152601c8552604080822084905595909616808752601d8552858720839055828752601e855285872080546001600160a01b03199081168417909155818852601086528688208054821684179055838852601f865286882080548216831790559187526014855285872080549092168117909155601a84528486208290558552601b90925291909220805460ff1916909117905590565b610100825111156137ee57600080fd5b610400815111156137fe57600080fd5b6000838152602360209081526040909120835161381d92850190614138565b506000838152602460209081526040909120825161383d92840190614138565b50827f79a6be597f1291d06b4ccea662f373201edec72cbcc5df2ccfcd74ce9ff4b2e98383604051808060200180602001838103835285818151815260200191508051906020019080838360005b838110156138a357818101518382015260200161388b565b50505050905090810190601f1680156138d05780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156139035781810151838201526020016138eb565b50505050905090810190601f1680156139305780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2505050565b60008261395357506000612704565b8282028284828161396057fe5b04146130fd57600080fd5b60008282111561397a57600080fd5b50900390565b6001600160a01b039384166000818152601c60209081526040808320839055958716808352868320869055858352601e825286832080546001600160a01b0319908116831790915594909716808352601082528683208054861689179055928252601481528582208054851690559581528481208054909316909117909155601a909352912055565b600080838381613a1557fe5b0690506000805b828211613a4857868181518110613a2f57fe5b6020026020010151820191508080600101915050613a1c565b600019019695505050505050565b8051613c1e5760005b600154811015613c1857600060018281548110613a7857fe5b6000918252602080832090910154808352602790915260409091205490915060ff1615613aa55750613c10565b601554604080516317775f1960e31b81526004810184905290516001600160a01b039092169163bbbaf8c891602480820192602092909190829003018186803b158015613af157600080fd5b505afa158015613b05573d6000803e3d6000fd5b505050506040513d6020811015613b1b57600080fd5b50518015613ba55750601554604080516371f87fb360e11b8152600481018490526000602482015290516001600160a01b039092169163e3f0ff6691604480820192602092909190829003018186803b158015613b7757600080fd5b505afa158015613b8b573d6000803e3d6000fd5b505050506040513d6020811015613ba157600080fd5b5051155b15613bb05750613c10565b600180541415613bc05750613c18565b600180546000198101908110613bd257fe5b906000526020600020015460018381548110613bea57fe5b6000918252602090912001556001805490613c099060001983016140a6565b5050600019015b600101613a5f565b50612802565b60268054613c2e916001916140ca565b5060005b815181108015613c4457506001546013115b1561106f576001828281518110613c5757fe5b6020908102919091018101518254600181810185556000948552929093209092019190915501613c32565b60025460005b81811015613cd6576000600f600060028481548110613ca357fe5b60009182526020808320919091015483528201929092526040019020805460ff1916911515919091179055600101613c88565b505060008054905b81811015613d2b576001600f6000808481548110613cf857fe5b60009182526020808320919091015483528201929092526040019020805460ff1916911515919091179055600101613cde565b60008054611008916002916140ca565b6060600080805480602002602001604051908101604052809291908181526020018280548015613d8a57602002820191906000526020600020905b815481526020019060010190808311613d76575b50505050509150600090505b8151811015613de2576000600e6000848481518110613db157fe5b6020908102919091018101518252810191909152604001600020805460ff1916911515919091179055600101613d96565b60048054613df2916000916140ca565b506000805480602002602001604051908101604052809291908181526020018280548015613e3f57602002820191906000526020600020905b815481526020019060010190808311613e2b575b50505050509150600090505b8151811015611008576000828281518110613e6257fe5b6020908102919091018101516000818152600e9092526040909120805460ff1916600117905590508315613ea6576000818152601760205260409020805460010190555b50600101613e4b565b6021548015613ef6576000818152601e6020908152604080832054602254601f9093529220546001600160a01b03928316929182169116613ef283838684613980565b5050505b506000602155602280546001600160a01b0319169055565b6005805461ffff198116909155610100900460ff1690565b60008181526027602052604090205460ff1615613f4257600080fd5b602654601311613f5157600080fd5b6026805460018181019092557f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a359401829055600082815260276020526040808220805460ff191690931790925560155482516394f3a24160e01b81526004810185905292516001600160a01b03909116926394f3a24192602480830193919282900301818387803b158015613fe457600080fd5b505af1158015613ff8573d6000803e3d6000fd5b5050505050565b60155460408051630f29818d60e31b815290516000926001600160a01b03169163794c0c68916004808301926020929190829003018186803b15801561404457600080fd5b505afa158015614058573d6000803e3d6000fd5b505050506040513d602081101561406e57600080fd5b505160009283526012602090815260408085209285529181528184208054600190810190915560139091529220805490920190915550565b815481835581811115611008576000838152602090206110089181019083016141a6565b82805482825590600052602060002090810192821561410a5760005260206000209182015b8281111561410a5782548255916001019190600101906140ef565b506141169291506141a6565b5090565b508054600082559060005260206000209081019061280291906141a6565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061417957805160ff191683800117855561410a565b8280016001018555821561410a579182015b8281111561410a57825182559160200191906001019061418b565b6110c991905b8082111561411657600081556001016141ac56fea265627a7a7230582055f1a6432160796b00712c102535aff37d15150aeb81412e0c35d8522cd3bc3164736f6c634300050a0032" + }, + "0x1100000000000000000000000000000000000001": { + "balance": "0", + "constructor": "0x60806040526040516108053803806108058339818101604052604081101561002657600080fd5b50805160209182015160408051600081529384018082527f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000905251603c81850301902091929091839190600019016000805160206107aa8339815191521461008a57fe5b61009c826001600160e01b036101bd16565b805115610154576000826001600160a01b0316826040518082805190602001908083835b602083106100df5780518252601f1990920191602091820191016100c0565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461013f576040519150601f19603f3d011682016040523d82523d6000602084013e610144565b606091505b505090508061015257600080fd5b505b5050604080517f656970313936372e70726f78792e61646d696e000000000000000000000000008152905190819003601301902060008051602061078a833981519152600019909101146101a457fe5b6101b6816001600160e01b0361023716565b505061024f565b6101d08161024960201b6104801760201c565b610225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806107ca603b913960400191505060405180910390fd5b6000805160206107aa83398151915255565b60008051602061078a83398151915255565b3b151590565b61052c8061025e6000396000f3fe60806040526004361061004a5760003560e01c80633659cfe6146100545780634f1ef286146100875780635c60da1b146101075780638f28397014610138578063f851a4401461016b575b610052610180565b005b34801561006057600080fd5b506100526004803603602081101561007757600080fd5b50356001600160a01b031661019a565b6100526004803603604081101561009d57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100c857600080fd5b8201836020820111156100da57600080fd5b803590602001918460018302840111640100000000831117156100fc57600080fd5b5090925090506101cb565b34801561011357600080fd5b5061011c61026f565b604080516001600160a01b039092168252519081900360200190f35b34801561014457600080fd5b506100526004803603602081101561015b57600080fd5b50356001600160a01b031661027e565b34801561017757600080fd5b5061011c61033c565b610188610198565b610198610193610346565b61036b565b565b6101a261038f565b6001600160a01b0316336001600160a01b0316146101bf57600080fd5b6101c8816103b4565b50565b6101d361038f565b6001600160a01b0316336001600160a01b0316146101f057600080fd5b6101f9836103b4565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610256576040519150601f19603f3d011682016040523d82523d6000602084013e61025b565b606091505b505090508061026957600080fd5b50505050565b6000610279610346565b905090565b61028661038f565b6001600160a01b0316336001600160a01b0316146102a357600080fd5b6001600160a01b0381166102e85760405162461bcd60e51b81526004018080602001828103825260368152602001806104876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61031161038f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101c8816103f4565b600061027961038f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6103bd81610418565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b61042181610480565b61045c5760405162461bcd60e51b815260040180806020018281038252603b8152602001806104bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3b15159056fe43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a265627a7a72305820a9aab4b95b654a79b32f5aa284796894f8329aaa083932695296085b196c27bd64736f6c634300050a0032b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc43616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000000000000000001100000000000000000000000000000000000000000000000000000000000000b03a86b3126157c039b55e21d378587ccfc04d45" + }, + "0x1100000000000000000000000000000000000000": { + "balance": "0", + "constructor": "0x608060405234801561001057600080fd5b5061579480620000216000396000f3fe6080604052600436106103c35760003560e01c80638c2243ae116101f2578063cd22c7521161010d578063e3f0ff66116100a0578063f07860961161006f578063f078609614611033578063f3fef3a314611048578063f494250114611081578063fb367a9b14611096576103c3565b8063e3f0ff6614610efd578063e4a9e42e14610f36578063edd7db7514611009578063ee435f551461101e576103c3565b8063d609ea93116100dc578063d609ea9314610ea9578063da7a9b6a14610ebe578063df6f55f514610ed3578063dfc8bf4e14610ee8576103c3565b8063cd22c75214610dfe578063cfef144114610e28578063d290c21d14610e5b578063d2f2a13614610e70576103c3565b8063a4c0ed3611610185578063b61ed63a11610154578063b61ed63a14610cc4578063bbbaf8c814610cfd578063bcdb0d3814610d27578063cc4a666714610d51576103c3565b8063a4c0ed3614610bde578063a5d54f6514610c6e578063adc9772e14610c83578063b172b22214610caf576103c3565b806397997ebb116101c157806397997ebb14610b4b5780639fb0e72e14610b60578063a1fc275314610b8a578063a38dcbd014610bb4576103c3565b80638c2243ae14610a6157806394f3a24114610a76578063950a651314610aa0578063957950a714610adb576103c3565b80633ea15d62116102e2578063673a2a1f116102755780637069e746116102445780637069e746146109ef57806374bdb37214610a04578063794c0c6814610a195780638ba31a1c14610a2e576103c3565b8063673a2a1f146109365780636bda15771461094b5780636d01b4fe146109865780636e69cd8b146109c5576103c3565b80635292fccf116102b15780635292fccf14610891578063561c4c81146108c4578063570941d2146108ee5780635fef764314610921576103c3565b80633ea15d621461074b5780633fb1a1e4146108045780634070a2d01461083d57806348aaa4a214610867576103c3565b806327d89b3a1161035a5780632ebfaf4e116103295780632ebfaf4e146106445780632f248e30146106d3578063381883b0146106fd578063392e53cd14610736576103c3565b806327d89b3a146105865780632a8f6ecd146105bf5780632bafde8d146105e95780632d21d21714610613576103c3565b80631555371c116103965780631555371c146104b1578063186dc46f146104c657806320d96e4614610519578063251441a914610543576103c3565b806302a53ba1146103c85780630555c5e214610413578063073b62fe1461043f578063093411da14610478575b600080fd5b3480156103d457600080fd5b50610401600480360360408110156103eb57600080fd5b50803590602001356001600160a01b0316611173565b60408051918252519081900360200190f35b34801561041f57600080fd5b5061043d6004803603602081101561043657600080fd5b5035611190565b005b34801561044b57600080fd5b506104016004803603604081101561046257600080fd5b50803590602001356001600160a01b0316611325565b34801561048457600080fd5b506104016004803603604081101561049b57600080fd5b50803590602001356001600160a01b0316611359565b3480156104bd57600080fd5b5061043d611376565b3480156104d257600080fd5b50610505600480360360608110156104e957600080fd5b508035906001600160a01b036020820135169060400135611418565b604080519115158252519081900360200190f35b34801561052557600080fd5b5061043d6004803603602081101561053c57600080fd5b503561143e565b34801561054f57600080fd5b5061043d6004803603606081101561056657600080fd5b506001600160a01b0381358116916020810135909116906040013561145a565b34801561059257600080fd5b50610401600480360360408110156105a957600080fd5b50803590602001356001600160a01b03166115f2565b3480156105cb57600080fd5b50610401600480360360208110156105e257600080fd5b503561160f565b3480156105f557600080fd5b5061043d6004803603602081101561060c57600080fd5b5035611621565b34801561061f57600080fd5b5061062861165c565b604080516001600160a01b039092168252519081900360200190f35b34801561065057600080fd5b506106836004803603606081101561066757600080fd5b506001600160a01b03813516906020810135906040013561166b565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106bf5781810151838201526020016106a7565b505050509050019250505060405180910390f35b3480156106df57600080fd5b5061043d600480360360208110156106f657600080fd5b5035611780565b34801561070957600080fd5b506104016004803603604081101561072057600080fd5b50803590602001356001600160a01b03166117e3565b34801561074257600080fd5b50610505611800565b34801561075757600080fd5b5061043d6004803603604081101561076e57600080fd5b810190602081018135600160201b81111561078857600080fd5b82018360208201111561079a57600080fd5b803590602001918460208302840111600160201b831117156107bb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505090356001600160a01b031691506118129050565b34801561081057600080fd5b506104016004803603604081101561082757600080fd5b50803590602001356001600160a01b0316611e87565b34801561084957600080fd5b506104016004803603602081101561086057600080fd5b5035611ea4565b34801561087357600080fd5b5061043d6004803603602081101561088a57600080fd5b5035611eb6565b34801561089d57600080fd5b5061043d600480360360208110156108b457600080fd5b50356001600160a01b0316611ef1565b3480156108d057600080fd5b50610683600480360360208110156108e757600080fd5b5035612045565b3480156108fa57600080fd5b5061043d6004803603602081101561091157600080fd5b50356001600160a01b03166120b1565b34801561092d57600080fd5b5061040161213d565b34801561094257600080fd5b50610683612143565b34801561095757600080fd5b506104016004803603604081101561096e57600080fd5b506001600160a01b038135811691602001351661219b565b34801561099257600080fd5b50610401600480360360608110156109a957600080fd5b508035906001600160a01b03602082013516906040013561235a565b3480156109d157600080fd5b50610401600480360360208110156109e857600080fd5b503561237d565b3480156109fb57600080fd5b5061040161238f565b348015610a1057600080fd5b50610401612395565b348015610a2557600080fd5b5061040161239b565b348015610a3a57600080fd5b5061040160048036036020811015610a5157600080fd5b50356001600160a01b03166123a1565b348015610a6d57600080fd5b506104016123bc565b348015610a8257600080fd5b5061043d60048036036020811015610a9957600080fd5b50356123e1565b348015610aac57600080fd5b5061040160048036036040811015610ac357600080fd5b506001600160a01b0381358116916020013516612420565b348015610ae757600080fd5b50610af06125d1565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610b36578181015183820152602001610b1e565b50505050905001935050505060405180910390f35b348015610b5757600080fd5b50610401612634565b348015610b6c57600080fd5b5061040160048036036020811015610b8357600080fd5b503561263a565b348015610b9657600080fd5b5061068360048036036020811015610bad57600080fd5b503561264c565b348015610bc057600080fd5b5061043d60048036036020811015610bd757600080fd5b50356126b6565b348015610bea57600080fd5b5061050560048036036060811015610c0157600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610c3057600080fd5b820183602082011115610c4257600080fd5b803590602001918460018302840111600160201b83111715610c6357600080fd5b5090925090506126d6565b348015610c7a57600080fd5b5061068361283c565b61043d60048036036040811015610c9957600080fd5b506001600160a01b038135169060200135612892565b348015610cbb57600080fd5b5061062861289c565b348015610cd057600080fd5b5061043d60048036036040811015610ce757600080fd5b506001600160a01b0381351690602001356128ab565b348015610d0957600080fd5b5061050560048036036020811015610d2057600080fd5b5035612cd7565b348015610d3357600080fd5b5061040160048036036020811015610d4a57600080fd5b5035612d12565b348015610d5d57600080fd5b5061043d6004803603610100811015610d7557600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b811115610da857600080fd5b820183602082011115610dba57600080fd5b803590602001918460208302840111600160201b83111715610ddb57600080fd5b919350915080359060208101359060408101359060608101359060800135612d24565b348015610e0a57600080fd5b5061040160048036036020811015610e2157600080fd5b5035612f0f565b348015610e3457600080fd5b5061043d60048036036020811015610e4b57600080fd5b50356001600160a01b0316612f21565b348015610e6757600080fd5b50610683613128565b348015610e7c57600080fd5b5061040160048036036040811015610e9357600080fd5b50803590602001356001600160a01b031661317e565b348015610eb557600080fd5b5061040161319b565b348015610eca57600080fd5b506104016131a1565b348015610edf57600080fd5b506106836131a7565b348015610ef457600080fd5b506106286131fd565b348015610f0957600080fd5b5061040160048036036040811015610f2057600080fd5b50803590602001356001600160a01b031661320c565b61040160048036036080811015610f4c57600080fd5b8135916001600160a01b0360208201351691810190606081016040820135600160201b811115610f7b57600080fd5b820183602082011115610f8d57600080fd5b803590602001918460018302840111600160201b83111715610fae57600080fd5b919390929091602081019035600160201b811115610fcb57600080fd5b820183602082011115610fdd57600080fd5b803590602001918460018302840111600160201b83111715610ffe57600080fd5b509092509050613229565b34801561101557600080fd5b5061043d6132a3565b34801561102a57600080fd5b5061043d613452565b34801561103f57600080fd5b50610401613474565b34801561105457600080fd5b5061043d6004803603604081101561106b57600080fd5b506001600160a01b03813516906020013561347a565b34801561108d57600080fd5b50610505613568565b3480156110a257600080fd5b5061115a600480360360608110156110b957600080fd5b810190602081018135600160201b8111156110d357600080fd5b8201836020820111156110e557600080fd5b803590602001918460208302840111600160201b8311171561110657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550506001600160a01b0383358116945060209093013590921691506135aa9050565b6040805192835260208301919091528051918290030190f35b602a60209081526000928352604080842090915290825290205481565b611198613c33565b6001600160a01b0316336001600160a01b0316146111b557600080fd5b60006111bf613c58565b90506035546000146111d057600080fd5b6037548110806111e05750603754155b6111e957600080fd5b816111f2613c5c565b146111fc57600080fd5b600054828161120757fe5b061561121257600080fd5b6000805461122790849063ffffffff613cd816565b603780549084905590915060005b60005481101561131c57600080828154811061124d57fe5b6000918252602080832090910154603954604080516316cf66ab60e01b81526004810184905290519295506001600160a01b03909116926316cf66ab92602480840193829003018186803b1580156112a457600080fd5b505afa1580156112b8573d6000803e3d6000fd5b505050506040513d60208110156112ce57600080fd5b50516000838152603160209081526040808320838052909152902054909150156112f757600080fd5b611302818287613cfa565b506000908152600b60205260409020839055600101611235565b50603755505050565b6000828152600a602090815260408083206001600160a01b0385168452825280832060355484529091529020545b92915050565b602b60209081526000928352604080842090915290825290205481565b6039546001600160a01b0316331461138d57600080fd5b606060038054806020026020016040519081016040528092919081815260200182805480156113db57602002820191906000526020600020905b8154815260200190600101908083116113c7575b50939450600093505050505b81518110156114145761140c8282815181106113ff57fe5b60200260200101516141dc565b6001016113e7565b5050565b603060209081526000938452604080852082529284528284209052825290205460ff1681565b6039546001600160a01b0316331461145557600080fd5b603755565b816001600160a01b0316836001600160a01b0316141561147957600080fd5b6039546040805163a26301f960e01b81526001600160a01b0386811660048301529151600093929092169163a26301f991602480820192602092909190829003018186803b1580156114ca57600080fd5b505afa1580156114de573d6000803e3d6000fd5b505050506040513d60208110156114f457600080fd5b50516039546040805163a26301f960e01b81526001600160a01b0387811660048301529151939450600093919092169163a26301f9916024808301926020929190829003018186803b15801561154957600080fd5b505afa15801561155d573d6000803e3d6000fd5b505050506040513d602081101561157357600080fd5b50519050336115838682866142c8565b61158e858286613cfa565b603554604080516001600160a01b03898116825260208201889052818301879052606082018690529151828516928916917f982f87186288986ca297b6c86b6d4547934327c6e005ce210da6b0cdc06a370d919081900360800190a4505050505050565b603260209081526000928352604080842090915290825290205481565b60386020526000908152604090205481565b611629613c33565b6001600160a01b0316336001600160a01b03161461164657600080fd5b61164e611800565b61165757600080fd5b602555565b6053546001600160a01b031681565b6001600160a01b0383166000908152600860205260409020606090826116df578054604080516020808402820181019092528281529183918301828280156116d257602002820191906000526020600020905b8154815260200190600101908083116116be575b5050505050915050611779565b80546000906116f4908663ffffffff61453a16565b90508084116117035783611705565b805b60405190808252806020026020018201604052801561172e578160200160208202803883390190505b50925060005b835181101561177557828187018154811061174b57fe5b906000526020600020015484828151811061176257fe5b6020908102919091010152600101611734565b5050505b9392505050565b6039546001600160a01b0316331461179757600080fd5b806117a157600080fd5b6000818152603160209081526040808320838052909152902054156117d7576117c98161454f565b6117d28161460b565b6117e0565b6117e0816146c4565b50565b603360209081526000928352604080842090915290825290205481565b6039546001600160a01b031615155b90565b3a61181c57600080fd5b611824611800565b61182d57600080fd5b6039546040805163a26301f960e01b81526001600160a01b03848116600483015291513393600093169163a26301f9916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b505190506001600160a01b0383166118bd57600080fd5b6001600160a01b0382166118d057600080fd5b806118da57600080fd5b6000836001600160a01b0316836001600160a01b031614156118fd5760006118ff565b825b9050600080846001600160a01b0316866001600160a01b0316146119715760008481526032602090815260408083206001600160a01b038916845290915290205491508161194c57600080fd5b5060008381526033602090815260408083206001600160a01b03881684529091529020545b60395460408051632b5aa5d760e11b815290516000926001600160a01b0316916356b54bae916004808301926020929190829003018186803b1580156119b657600080fd5b505afa1580156119ca573d6000803e3d6000fd5b505050506040513d60208110156119e057600080fd5b505190506119ec615708565b50604080518082019091526000808252602082018190528951611ad957826001600160a01b031663e7f6cfe2886040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611a4d57600080fd5b505afa158015611a61573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611a8a57600080fd5b810190808051600160201b811115611aa157600080fd5b82016020810184811115611ab457600080fd5b81518560208202830111600160201b82111715611ad057600080fd5b50909d50505050505b60005b8a51811015611df25760008b8281518110611af357fe5b602002602001015190508160001480611b2157508b6001830381518110611b1657fe5b602002602001015181115b611b2a57600080fd5b6035548110611b3857600080fd5b60008981526030602090815260408083206001600160a01b038c168452825280832084845290915290205460ff1615611b715750611dea565b611b79615708565b8a6001600160a01b03168c6001600160a01b031614611c655787821015611ba1575050611dea565b818711158015611bb057508615155b15611bbc575050611df2565b611bc98289868d8f61474d565b9350816001019750856001600160a01b031663877ffdea85848d6040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050604080518083038186803b158015611c2457600080fd5b505afa158015611c38573d6000803e3d6000fd5b505050506040513d6040811015611c4e57600080fd5b508051602091820151918301919091528152611cec565b60408051631289b17960e01b815260048101849052602481018c905281516001600160a01b03891692631289b1799260448082019391829003018186803b158015611caf57600080fd5b505afa158015611cc3573d6000803e3d6000fd5b505050506040513d6040811015611cd957600080fd5b5080516020918201519183019190915281525b80518551611cff9163ffffffff6147bf16565b855260208082015190860151611d1a9163ffffffff6147bf16565b8560200181815250506001603060008c815260200190815260200160002060008b6001600160a01b03166001600160a01b03168152602001908152602001600020600084815260200190815260200160002060006101000a81548160ff021916908315150217905550818b6001600160a01b03168d6001600160a01b03167f6d8e1b032c4629c85b1e460dedd0e2d7c5eb72880982d3e495f0f892b7f64406846000015185602001518f60405180848152602001838152602001828152602001935050505060405180910390a450505b600101611adc565b50826001600160a01b03166370cafd65836000015184602001518b6040518463ffffffff1660e01b815260040180848152602001838152602001826001600160a01b03166001600160a01b031681526020019350505050600060405180830381600087803b158015611e6357600080fd5b505af1158015611e77573d6000803e3d6000fd5b5050505050505050505050505050565b603160209081526000928352604080842090915290825290205481565b60286020526000908152604090205481565b611ebe613c33565b6001600160a01b0316336001600160a01b031614611edb57600080fd5b611ee3611800565b611eec57600080fd5b602455565b611ef9613c33565b6001600160a01b0316336001600160a01b031614611f1657600080fd5b6001600160a01b038116611f2957600080fd5b6039546040805163a26301f960e01b815273eb43574e8f4fddf11fbaf65a8632ca92262a1266600482018190529151919269043c33c193756480000092849283926001600160a01b03169163a26301f991602480820192602092909190829003018186803b158015611f9a57600080fd5b505afa158015611fae573d6000803e3d6000fd5b505050506040513d6020811015611fc457600080fd5b505114611fd057600080fd5b6000838152600b6020526040812055611fea8180846142c8565b611ff484836147d1565b603554604080518481526020810186905281516001600160a01b0385169283927f5c5eecdba4673a19126d31c4ea006153eec8120d460905a4643cacd174da8722929081900390910190a450505050565b6000818152600660209081526040918290208054835181840281018401909452808452606093928301828280156120a557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612087575b50505050509050919050565b6120b9613c33565b6001600160a01b0316336001600160a01b0316146120d657600080fd5b6120de611800565b6120e757600080fd5b6001600160a01b0381166120fa57600080fd5b6053546001600160a01b03161561211057600080fd5b605380546001600160a01b0319166001600160a01b038316179055612133613c5c565b156117e057600080fd5b60245481565b6060600080548060200260200160405190810160405280929190818152602001828054801561219157602002820191906000526020600020905b81548152602001906001019080831161217d575b5050505050905090565b6039546040805163a26301f960e01b81526001600160a01b03858116600483015291516000938493169163a26301f9916024808301926020929190829003018186803b1580156121ea57600080fd5b505afa1580156121fe573d6000803e3d6000fd5b505050506040513d602081101561221457600080fd5b5051905060006001600160a01b038481169086161415612235576000612237565b835b90506001600160a01b038581169085161415612253838261488c565b6122635760009350505050611353565b60008381526031602090815260408083206001600160a01b0386168452909152902054816122ae576000848152600b60205260409020546122ab90829063ffffffff61453a16565b90505b60395460408051635245821560e11b81526004810187905290516001600160a01b039092169163a48b042a91602480820192602092909190829003018186803b1580156122fa57600080fd5b505afa15801561230e573d6000803e3d6000fd5b505050506040513d602081101561232457600080fd5b505161233557935061135392505050565b60006123418585611325565b90508082111561234f578091505b509695505050505050565b602660209081526000938452604080852082529284528284209052825290205481565b602c6020526000908152604090205481565b60375481565b603a5481565b60355481565b6001600160a01b031660009081526008602052604090205490565b60375460009080156123cf5760016123d2565b60005b60ff1660365482010391505090565b6039546001600160a01b031633146123f857600080fd5b6004546002541461240857600080fd5b6000818152600b60205260408120556117e0816148c2565b6039546040805163a26301f960e01b81526001600160a01b03858116600483015291516000938493169163a26301f9916024808301926020929190829003018186803b15801561246f57600080fd5b505afa158015612483573d6000803e3d6000fd5b505050506040513d602081101561249957600080fd5b505190506001600160a01b0384811690841614156000816124bb5760006124bd565b845b90506124c9838361488c565b6124d95760009350505050611353565b60395460408051635245821560e11b81526004810186905290516001600160a01b039092169163a48b042a91602480820192602092909190829003018186803b15801561252557600080fd5b505afa158015612539573d6000803e3d6000fd5b505050506040513d602081101561254f57600080fd5b50516125615760009350505050611353565b60008381526031602090815260408083206001600160a01b0385168452909152902054826125ac576000848152600b60205260409020546125a990829063ffffffff61453a16565b90505b6125c66125b98584611325565b829063ffffffff61453a16565b979650505050505050565b6060600060046005548180548060200260200160405190810160405280929190818152602001828054801561262557602002820191906000526020600020905b815481526020019060010190808311612611575b50505050509150915091509091565b60345481565b602e6020526000908152604090205481565b6000818152600760209081526040918290208054835181840281018401909452808452606093928301828280156120a5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116120875750505050509050919050565b6039546001600160a01b031633146126cd57600080fd5b6117e0816141dc565b60006126e0611800565b6126e957600080fd5b6053546001600160a01b0316331461270057600080fd5b601482101561270e57600080fd5b600080606085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050506020820151606081901c955060581c60ff1615801594509192506128239050576000806060602084015160ff8160501c16935050826040519080825280601f01601f1916602001820160405280156127a7576020820181803883390190505b50905082609a60208301378351609a84013560f01c92508190838501601801146127d057600080fd5b826040519080825280601f01601f1916602001820160405280156127fb576020820181803883390190505b5091508284609c016020840137816128188c8e8a60018686614a0e565b50505050505061282e565b61282e838989613cfa565b506001979650505050505050565b60606002805480602002602001604051908101604052809291908181526020018280548015612191576020028201919060005260206000209081548152602001906001019080831161217d575050505050905090565b6114148282614be1565b603b546001600160a01b031681565b3a6128b557600080fd5b6128bd611800565b6128c657600080fd5b6039546040805163a26301f960e01b81526001600160a01b0385811660048301529151600093929092169163a26301f991602480820192602092909190829003018186803b15801561291757600080fd5b505afa15801561292b573d6000803e3d6000fd5b505050506040513d602081101561294157600080fd5b505190506001600160a01b03831661295857600080fd5b8161296257600080fd5b8061296c57600080fd5b3360006001600160a01b038516821415612987576000612989565b815b90506129a0836001600160a01b038316151561488c565b6129a957600080fd5b60008381526027602090815260408083206001600160a01b0385168085529083528184205487855260288452828520546031855283862092865291845282852054888652603890945291842054919390929190881315612a8f5787612a0e8a88612420565b811115612a1a57600080fd5b612a2a858263ffffffff6147bf16565b9450612a3c848263ffffffff6147bf16565b9350612a4e838263ffffffff61453a16565b9250612a60828263ffffffff61453a16565b60355460008a81526029602090815260408083206001600160a01b038c1684529091529020559150612ade9050565b6000889003612aa4858263ffffffff61453a16565b9450612ab6848263ffffffff61453a16565b9350612ac8838263ffffffff6147bf16565b9250612ada828263ffffffff6147bf16565b9150505b60008781526027602090815260408083206001600160a01b03808a168086529184528285208990558b855260288452828520889055603184528285209185529083528184208690558a84526038909252909120829055868116908a161415612c24576000878152600b6020526040902054821015612b5b57600080fd5b811580612b6a57506024548210155b612b7357600080fd5b6039546040805163738bef1d60e11b8152600481018a905290516000926001600160a01b03169163e717de3a916024808301926020929190829003018186803b158015612bbf57600080fd5b505afa158015612bd3573d6000803e3d6000fd5b505050506040513d6020811015612be957600080fd5b50511590506000891315612c145782612c0f5780612c0657600080fd5b612c0f886146c4565b612c1e565b612c1e8882614c7f565b50612c6d565b811580612c3357506025548210155b612c3c57600080fd5b6000881315612c595781612c5457612c548787614cfb565b612c63565b612c638787614e4a565b612c6d8787614f07565b612c768761460b565b603554866001600160a01b03168a6001600160a01b03167f89b66c7c015442886e0ce3c9c8137443ebbe1b1766f6b3a942dde6c3bb82517d8b8b604051808381526020018281526020019250505060405180910390a4505050505050505050565b6000818152602d602052604081205481548110801561177957508260008281548110612cff57fe5b9060005260206000200154149392505050565b602f6020526000908152604090205481565b6001600160a01b038916612d3757600080fd5b85612d4157600080fd5b84612d4b57600080fd5b83612d5557600080fd5b82612d5f57600080fd5b808311612d6b57600080fd5b80612d7557600080fd5b612d7d613c58565b1580612da15750612d8c613c33565b6001600160a01b0316336001600160a01b0316145b612daa57600080fd5b612db2611800565b15612dbc57600080fd5b603980546001600160a01b03808c166001600160a01b031992831617909255603b8054928b169290911691909117905560005b86811015612edf57878782818110612e0357fe5b9050602002013560001415612e1757600080fd5b612e34888883818110612e2657fe5b905060200201356000614c7f565b6039546001600160a01b031663e717de3a898984818110612e5157fe5b905060200201356040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612e8c57600080fd5b505afa158015612ea0573d6000803e3d6000fd5b505050506040513d6020811015612eb657600080fd5b5051612ed757612ed7888883818110612ecb57fe5b905060200201356146c4565b600101612def565b5060258590556024849055603683905560378290556034819055612f01613c58565b603a55505050505050505050565b602d6020526000908152604090205481565b6039546040805163a26301f960e01b81526001600160a01b0384811660048301529151600093929092169163a26301f991602480820192602092909190829003018186803b158015612f7257600080fd5b505afa158015612f86573d6000803e3d6000fd5b505050506040513d6020811015612f9c57600080fd5b5051905080612faa57600080fd5b3360006001600160a01b038416821415612fc5576000612fc7565b815b60008481526029602090815260408083206001600160a01b038516845290915290205460355491925010612ffa57600080fd5b61300f836001600160a01b0383161515614fea565b1561301957600080fd5b60008381526027602090815260408083206001600160a01b03851684529091529020548061304657600080fd5b60008481526027602090815260408083206001600160a01b038616845282528083208390558683526028909152902054613086908263ffffffff61453a16565b600085815260286020908152604080832093909355603181528282206001600160a01b0386168352905220546130c1576130c18486856151a5565b6130cb83826147d1565b603554836001600160a01b0316866001600160a01b03167f3b1f0416a322c81d02b7eb108c29b8c9cf15503da84e83c389c529625b10389e8488604051808381526020018281526020019250505060405180910390a45050505050565b60606003805480602002602001604051908101604052809291908181526020018280548015612191576020028201919060005260206000209081548152602001906001019080831161217d575050505050905090565b602960209081526000928352604080842090915290825290205481565b60365481565b60255481565b60606001805480602002602001604051908101604052809291908181526020018280548015612191576020028201919060005260206000209081548152602001906001019080831161217d575050505050905090565b6039546001600160a01b031681565b602760209081526000928352604080842090915290825290205481565b60006125c6873388600089898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a9081908401838280828437600092019190915250614a0e92505050565b3a6132ad57600080fd5b6132b5611800565b6132be57600080fd5b6039546040805163a26301f960e01b815233600482015290516000926001600160a01b03169163a26301f9916024808301926020929190829003018186803b15801561330957600080fd5b505afa15801561331d573d6000803e3d6000fd5b505050506040513d602081101561333357600080fd5b505190508061334157600080fd5b600060355411806133c7575060395460408051639b4a14bf60e01b81526004810184905290516001600160a01b0390921691639b4a14bf91602480820192602092909190829003018186803b15801561339957600080fd5b505afa1580156133ad573d6000803e3d6000fd5b505050506040513d60208110156133c357600080fd5b5051155b6133d057600080fd5b6039546040805163738bef1d60e11b81526004810184905290516001600160a01b039092169163e717de3a91602480820192602092909190829003018186803b15801561341c57600080fd5b505afa158015613430573d6000803e3d6000fd5b505050506040513d602081101561344657600080fd5b5051156126cd57600080fd5b6039546001600160a01b0316331461346957600080fd5b603580546001019055565b610bb881565b6039546040805163a26301f960e01b81526001600160a01b03858116600483015291513393600093169163a26301f9916024808301926020929190829003018186803b1580156134c957600080fd5b505afa1580156134dd573d6000803e3d6000fd5b505050506040513d60208110156134f357600080fd5b505190506135028483856142c8565b61350c82846147d1565b603554826001600160a01b0316856001600160a01b03167f5c5eecdba4673a19126d31c4ea006153eec8120d460905a4643cacd174da87228685604051808381526020018281526020019250505060405180910390a450505050565b600080613573613c58565b905060375481101561358957600091505061180f565b6034546036546037549190039061359e576001015b60375490910310905090565b6039546040805163a26301f960e01b81526001600160a01b03858116600483015291516000938493849391169163a26301f991602480820192602092909190829003018186803b1580156135fd57600080fd5b505afa158015613611573d6000803e3d6000fd5b505050506040513d602081101561362757600080fd5b505190506001600160a01b03851661363e57600080fd5b6001600160a01b03841661365157600080fd5b8061365b57600080fd5b6000856001600160a01b0316856001600160a01b0316141561367e576000613680565b845b604080516002808252606080830184529394509091602083019080388339019050509050856001600160a01b0316876001600160a01b0316146137595760008381526032602090815260408083206001600160a01b038a1684529091528120548251909183916136ec57fe5b6020026020010181815250508060008151811061370557fe5b60200260200101516000141561371a57600080fd5b60008381526033602090815260408083206001600160a01b038a16845290915290205481518290600190811061374c57fe5b6020026020010181815250505b60395460408051632b5aa5d760e11b815290516000926001600160a01b0316916356b54bae916004808301926020929190829003018186803b15801561379e57600080fd5b505afa1580156137b2573d6000803e3d6000fd5b505050506040513d60208110156137c857600080fd5b505190506137d4615708565b50604080518082019091526000808252602082018190528a516138c157826001600160a01b031663e7f6cfe2876040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561383557600080fd5b505afa158015613849573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561387257600080fd5b810190808051600160201b81111561388957600080fd5b8201602081018481111561389c57600080fd5b81518560208202830111600160201b821117156138b857600080fd5b50909e50505050505b60005b8b51811015613c195780158061390257508b60018203815181106138e457fe5b60200260200101518c82815181106138f857fe5b6020026020010151115b61390b57600080fd5b6035548c828151811061391a57fe5b60200260200101511061392c57600080fd5b60008781526030602090815260408083206001600160a01b038a16845290915281208d519091908e908490811061395f57fe5b60209081029190910181015182528101919091526040016000205460ff161561398757613c11565b61398f615708565b8a6001600160a01b03168c6001600160a01b031614613b4157856000815181106139b557fe5b60200260200101518d83815181106139c957fe5b602002602001015110156139dd5750613c11565b8c82815181106139e957fe5b6020026020010151866001815181106139fe57fe5b602002602001015111158015613a29575085600181518110613a1c57fe5b6020026020010151600014155b15613a345750613c19565b613a688d8381518110613a4357fe5b602002602001015187600081518110613a5857fe5b6020026020010151858b8f61474d565b92508c8281518110613a7657fe5b602002602001015160010186600081518110613a8e57fe5b602002602001018181525050846001600160a01b031663877ffdea848f8581518110613ab657fe5b60200260200101518b6040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050604080518083038186803b158015613b0057600080fd5b505afa158015613b14573d6000803e3d6000fd5b505050506040513d6040811015613b2a57600080fd5b508051602091820151918301919091528152613bdc565b846001600160a01b0316631289b1798e8481518110613b5c57fe5b60200260200101518a6040518363ffffffff1660e01b81526004018083815260200182815260200192505050604080518083038186803b158015613b9f57600080fd5b505afa158015613bb3573d6000803e3d6000fd5b505050506040513d6040811015613bc957600080fd5b5080516020918201519183019190915281525b80518451613bef9163ffffffff6147bf16565b845260208082015190850151613c0a9163ffffffff6147bf16565b6020850152505b6001016138c4565b50508051602090910151909a909950975050505050505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b4390565b605354604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015613ca757600080fd5b505afa158015613cbb573d6000803e3d6000fd5b505050506040513d6020811015613cd157600080fd5b5051905090565b6000808211613ce657600080fd5b6000828481613cf157fe5b04949350505050565b3a613d0457600080fd5b613d0c611800565b613d1557600080fd5b6039546040805163a26301f960e01b81526001600160a01b0386811660048301529151600093929092169163a26301f991602480820192602092909190829003018186803b158015613d6657600080fd5b505afa158015613d7a573d6000803e3d6000fd5b505050506040513d6020811015613d9057600080fd5b505190506001600160a01b038416613da757600080fd5b80613db157600080fd5b81613dbb57600080fd5b60395460408051632682240f60e11b81526004810184905290516001600160a01b0390921691634d04481e91602480820192602092909190829003018186803b158015613e0757600080fd5b505afa158015613e1b573d6000803e3d6000fd5b505050506040513d6020811015613e3157600080fd5b505115613e3d57600080fd5b613e45613568565b613e4e57600080fd5b6000846001600160a01b0316846001600160a01b03161415613e71576000613e73565b835b60008381526031602090815260408083206001600160a01b038516845290915281205491925090613eaa908563ffffffff6147bf16565b9050856001600160a01b0316856001600160a01b03161415613eda57602454811015613ed557600080fd5b613f0c565b602554811015613ee957600080fd5b6000838152603160209081526040808320838052909152902054613f0c57600080fd5b60008381526031602090815260408083206001600160a01b03861684529091529020819055613f4b84613f3f8585611325565b9063ffffffff6147bf16565b6000848152600a602090815260408083206001600160a01b038716845282528083206035548452825280832093909355858252603890522054613f94908563ffffffff6147bf16565b6000848152603860205260409020556001600160a01b038581169087161415614040576039546040805163738bef1d60e11b815260048101869052905161403b9286926001600160a01b039091169163e717de3a91602480820192602092909190829003018186803b15801561400957600080fd5b505afa15801561401d573d6000803e3d6000fd5b505050506040513d602081101561403357600080fd5b505115614c7f565b614175565b61404a8386614e4a565b6140548386614f07565b6001600160a01b038516600090815260086020908152604080832080546009845282852088865290935290832054909282821015806140a957508684838154811061409b57fe5b906000526020600020015414155b905080156140e8576001600160a01b03891660009081526009602090815260408083208a84528252822085905585546001810187558683529120018790555b8261417057603954604080516341a32dc160e11b81526001600160a01b038c81166004830152915191909216916383465b82916024808301926020929190829003018186803b15801561413a57600080fd5b505afa15801561414e573d6000803e3d6000fd5b505050506040513d602081101561416457600080fd5b50511561417057600080fd5b505050505b61417e8361460b565b603554856001600160a01b0316876001600160a01b03167f1111552b4d689ce73a2a7356e066e28215e6d61a2294e89ac9e02a933ebb0d508787604051808381526020018281526020019250505060405180910390a4505050505050565b6000818152602d60205260408120549054811080156142115750816000828154811061420457fe5b9060005260206000200154145b1561428257600080548190600019810190811061422a57fe5b90600052602060002001549050806000838154811061424557fe5b6000918252602080832090910192909255828152602d9091526040808220849055848252812081905580549061427f906000198301615722565b50505b61428b826152f5565b1561429e5761429982615320565b6142a7565b6142a7826153c6565b6142b0826148c2565b6142b982615449565b6142c1613c58565b603a555050565b3a6142d257600080fd5b6142da611800565b6142e357600080fd5b6039546040805163a26301f960e01b81526001600160a01b0386811660048301529151600093929092169163a26301f991602480820192602092909190829003018186803b15801561433457600080fd5b505afa158015614348573d6000803e3d6000fd5b505050506040513d602081101561435e57600080fd5b505190506001600160a01b03841661437557600080fd5b8161437f57600080fd5b8061438957600080fd5b614393848461219b565b82111561439f57600080fd5b6000846001600160a01b0316846001600160a01b031614156143c25760006143c4565b835b60008381526031602090815260408083206001600160a01b0385168452909152812054919250906143fb908563ffffffff61453a16565b90506000856001600160a01b0316876001600160a01b0316141561443d576000848152600b602052604090205482101561443457600080fd5b50602454614442565b506025545b81158061444f5750808210155b61445857600080fd5b60008481526031602090815260408083206001600160a01b038716845290915281208390556144878585611325565b90508581101561449857600061449c565b8581035b6000868152600a602090815260408083206001600160a01b0389168452825280832060355484528252808320939093558782526038905220546144e5908763ffffffff61453a16565b60008681526038602052604090205582614504576145048589896151a5565b876001600160a01b0316876001600160a01b031614614527576145278588614f07565b6145308561460b565b5050505050505050565b60008282111561454957600080fd5b50900390565b6000818152602e602052604090205460025480821015806145875750826002838154811061457957fe5b906000526020600020015414155b156145fd576000838152602e602052604081208290556002805460018181019092557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0185905560048054918201815582527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01555b61460683615449565b505050565b614613613c58565b603a55600080614622836154ef565b91509150816146325750506117e0565b60006004828154811061464157fe5b90600052602060002001549050600060386000868152602001908152602001600020549050806004848154811061467457fe5b6000918252602090912001558181106146a45760055461469c9083830363ffffffff6147bf16565b6005556146bd565b6005546146b99082840363ffffffff61453a16565b6005555b5050505050565b6000818152602f602052604090205460035480821015806146fc575082600383815481106146ee57fe5b906000526020600020015414155b15614744576000838152602f602052604081208290556003805460018101825591527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b018390555b614606836148c2565b60005b5060008281526026602090815260408083206001600160a01b03851684528252808320888452909152902054801561479b5760001981146147915780614794565b60005b90506147b6565b848614156147aa5750826147b6565b60001990950194614750565b95945050505050565b60008282018381101561177957600080fd5b3a6147db57600080fd5b6147e3611800565b6147ec57600080fd5b6053546001600160a01b031661480157600080fd5b6053546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561485757600080fd5b505af115801561486b573d6000803e3d6000fd5b505050506040513d602081101561488157600080fd5b50516142b957600080fd5b60006148988383614fea565b156148a557506000611353565b6148ad613568565b6148b957506000611353565b50600192915050565b600454600254146148d2576117e0565b6000818152602e602052604090205460025481108015614908575081600282815481106148fb57fe5b9060005260206000200154145b15611414576004818154811061491a57fe5b906000526020600020015460055410614955576004818154811061493a57fe5b6000918252602090912001546005805491909103905561495b565b60006005555b600280546000198101916000918390811061497257fe5b90600052602060002001549050806002848154811061498d57fe5b9060005260206000200181905550600482815481106149a857fe5b9060005260206000200154600484815481106149c057fe5b6000918252602080832090910192909255828152602e909152604080822085905585825281205560028054906149fa906000198301615722565b5060048054906146bd906000198301615722565b60395460405163374dc77d60e01b81526001600160a01b03868116600483019081528882166024840152608060448401908152865160848501528651600095869594169363374dc77d938b938d938b938b939291606482019160a4019060208701908083838f5b83811015614a8d578181015183820152602001614a75565b50505050905090810190601f168015614aba5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015614aed578181015183820152602001614ad5565b50505050905090810190601f168015614b1a5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015614b3d57600080fd5b505af1158015614b51573d6000803e3d6000fd5b505050506040513d6020811015614b6757600080fd5b505190508415614b8157614b7c87888a613cfa565b614b8b565b614b8b8789614be1565b856001600160a01b0316876001600160a01b03167f7342ad45e4a4592daa7f7e40b50c1c2ce42aa21da0242065e849a8509de7ba7e836040518082815260200191505060405180910390a3979650505050505050565b33614bed838284613cfa565b3415614bf857600080fd5b6053546001600160a01b0316614c0d57600080fd5b605354604080516356e4bb9760e11b81526001600160a01b038481166004830152602482018690529151919092169163adc9772e91604480830192600092919082900301818387803b158015614c6257600080fd5b505af1158015614c76573d6000803e3d6000fd5b50505050505050565b614c8882612cd7565b614ce35760008054838252602d602052604082208190556001810182559080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56301829055614cd561553f565b6000541115614ce357600080fd5b614cec82615320565b8015611414576114148261454f565b6000828152600660209081526040808320602a83528184206001600160a01b038616855290925290912054815481108015614d5e5750826001600160a01b0316828281548110614d4757fe5b6000918252602090912001546001600160a01b0316145b15614e0357815460009083906000198101908110614d7857fe5b9060005260206000200160009054906101000a90046001600160a01b0316905080838381548110614da557fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055878252602a8152604080832085851684529091528082208590559186168152908120558254614e00846000198301615722565b50505b60008481526027602090815260408083206001600160a01b038716845290915290205415614e3a57614e358484615545565b614e44565b614e4484846155fb565b50505050565b6000828152600660209081526040808320602a83528184206001600160a01b03861685529092529091205481548082101580614eaf5750836001600160a01b0316838381548110614e9757fe5b6000918252602090912001546001600160a01b031614155b15614efd576000858152602a602090815260408083206001600160a01b0388168085529083529083208490558554600181018755868452919092200180546001600160a01b03191690911790555b6146bd85856155fb565b60355460008381526031602090815260408083206001600160a01b038616845290915290205460019091019080614f4057600019614f42565b805b60008581526026602090815260408083206001600160a01b038816808552908352818420878552835281842094909455878352603282528083209383529290522054614fae5760008481526032602090815260408083206001600160a01b038716845290915290208290555b8015614fbb576000614fbd565b815b60009485526033602090815260408087206001600160a01b03909616875294905292909320919091555050565b6000811561507c57603954604080516352700f5560e11b81526004810186905290516001600160a01b039092169163a4e01eaa91602480820192602092909190829003018186803b15801561503e57600080fd5b505afa158015615052573d6000803e3d6000fd5b505050506040513d602081101561506857600080fd5b50511561507757506001611353565b61519c565b60395460408051632682240f60e11b81526004810186905290516001600160a01b0390921691634d04481e91602480820192602092909190829003018186803b1580156150c857600080fd5b505afa1580156150dc573d6000803e3d6000fd5b505050506040513d60208110156150f257600080fd5b50511561510157506001611353565b603b546001600160a01b03161580159061518f5750603b546040805163cd2ecdf360e01b81526004810186905290516001600160a01b039092169163cd2ecdf391602480820192602092909190829003018186803b15801561516257600080fd5b505afa158015615176573d6000803e3d6000fd5b505050506040513d602081101561518c57600080fd5b50515b1561519c57506001611353565b50600092915050565b816001600160a01b0316816001600160a01b031614156152d4576039546040805163738bef1d60e11b81526004810186905290516001600160a01b039092169163e717de3a91602480820192602092909190829003018186803b15801561520b57600080fd5b505afa15801561521f573d6000803e3d6000fd5b505050506040513d602081101561523557600080fd5b50516152cf5760395460408051639b4a14bf60e01b81526004810186905290516001600160a01b0390921691639b4a14bf91602480820192602092909190829003018186803b15801561528757600080fd5b505afa15801561529b573d6000803e3d6000fd5b505050506040513d60208110156152b157600080fd5b5051156152c6576152c1836146c4565b6152cf565b6152cf836141dc565b614606565b6152de8382614cfb565b6152e7836152f5565b156146065761460683615320565b6000818152603860205260408120541580156113535750506000908152602860205260409020541590565b6000818152602c6020526040902054600154811080156153565750816001828154811061534957fe5b9060005260206000200154145b15611414576001805460009190600019810190811061537157fe5b90600052602060002001549050806001838154811061538c57fe5b6000918252602080832090910192909255828152602c90915260408082208490558482528120556001805490614e44906000198301615722565b6000818152602c602052604090205460015480821015806153fe575082600183815481106153f057fe5b906000526020600020015414155b15614606576000838152602c6020526040812082905560018054808201825591527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601839055505050565b6000818152602f60205260409020546003548110801561547f5750816003828154811061547257fe5b9060005260206000200154145b15611414576003805460009190600019810190811061549a57fe5b9060005260206000200154905080600383815481106154b557fe5b6000918252602080832090910192909255828152602f90915260408082208490558482528120556003805490614e44906000198301615722565b6000818152602e6020526040812054600254811080156155255750826002828154811061551857fe5b9060005260206000200154145b15615533576001915061553a565b5060009050805b915091565b610bb890565b6000828152600760209081526040808320602b83528184206001600160a01b038616855290925290912054815480821015806155aa5750836001600160a01b031683838154811061559257fe5b6000918252602090912001546001600160a01b031614155b156146bd576000948552602b602090815260408087206001600160a01b039690961680885295825286209190915582546001810184559285529093200180546001600160a01b031916909117905550565b6000828152600760209081526040808320602b83528184206001600160a01b03861685529092529091205481548110801561565e5750826001600160a01b031682828154811061564757fe5b6000918252602090912001546001600160a01b0316145b15614e445781546000908390600019810190811061567857fe5b9060005260206000200160009054906101000a90046001600160a01b03169050808383815481106156a557fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055878252602b8152604080832085851684529091528082208590559186168152908120558254615700846000198301615722565b505050505050565b604051806040016040528060008152602001600081525090565b8154818355818111156146065760008381526020902061460691810190830161180f91905b8082111561575b5760008155600101615747565b509056fea265627a7a72305820996d14df4eb718bdfaf51d30633ce9f875a01d08087e1f0c649175bcda695ad364736f6c634300050a0032" + }, + "0x2000000000000000000000000000000000000001": { + "balance": "0", + "constructor": "0x60806040526040516108053803806108058339818101604052604081101561002657600080fd5b50805160209182015160408051600081529384018082527f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000905251603c81850301902091929091839190600019016000805160206107aa8339815191521461008a57fe5b61009c826001600160e01b036101bd16565b805115610154576000826001600160a01b0316826040518082805190602001908083835b602083106100df5780518252601f1990920191602091820191016100c0565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461013f576040519150601f19603f3d011682016040523d82523d6000602084013e610144565b606091505b505090508061015257600080fd5b505b5050604080517f656970313936372e70726f78792e61646d696e000000000000000000000000008152905190819003601301902060008051602061078a833981519152600019909101146101a457fe5b6101b6816001600160e01b0361023716565b505061024f565b6101d08161024960201b6104801760201c565b610225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806107ca603b913960400191505060405180910390fd5b6000805160206107aa83398151915255565b60008051602061078a83398151915255565b3b151590565b61052c8061025e6000396000f3fe60806040526004361061004a5760003560e01c80633659cfe6146100545780634f1ef286146100875780635c60da1b146101075780638f28397014610138578063f851a4401461016b575b610052610180565b005b34801561006057600080fd5b506100526004803603602081101561007757600080fd5b50356001600160a01b031661019a565b6100526004803603604081101561009d57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100c857600080fd5b8201836020820111156100da57600080fd5b803590602001918460018302840111640100000000831117156100fc57600080fd5b5090925090506101cb565b34801561011357600080fd5b5061011c61026f565b604080516001600160a01b039092168252519081900360200190f35b34801561014457600080fd5b506100526004803603602081101561015b57600080fd5b50356001600160a01b031661027e565b34801561017757600080fd5b5061011c61033c565b610188610198565b610198610193610346565b61036b565b565b6101a261038f565b6001600160a01b0316336001600160a01b0316146101bf57600080fd5b6101c8816103b4565b50565b6101d361038f565b6001600160a01b0316336001600160a01b0316146101f057600080fd5b6101f9836103b4565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610256576040519150601f19603f3d011682016040523d82523d6000602084013e61025b565b606091505b505090508061026957600080fd5b50505050565b6000610279610346565b905090565b61028661038f565b6001600160a01b0316336001600160a01b0316146102a357600080fd5b6001600160a01b0381166102e85760405162461bcd60e51b81526004018080602001828103825260368152602001806104876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61031161038f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101c8816103f4565b600061027961038f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6103bd81610418565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b61042181610480565b61045c5760405162461bcd60e51b815260040180806020018281038252603b8152602001806104bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3b15159056fe43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a265627a7a72305820a9aab4b95b654a79b32f5aa284796894f8329aaa083932695296085b196c27bd64736f6c634300050a0032b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc43616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000000000000000002000000000000000000000000000000000000000000000000000000000000000b03a86b3126157c039b55e21d378587ccfc04d45" + }, + "0x2000000000000000000000000000000000000000": { + "balance": "0", + "constructor": "0x608060405234801561001057600080fd5b50614620806100206000396000f3fe6080604052600436106102935760003560e01c80636834fc901161015a578063adc481a7116100c1578063dfc8bf4e1161007a578063dfc8bf4e14610d5c578063e706ba2714610d71578063e7f6cfe214610da1578063f8fdc6b914610dcb578063f91c289814610dfb578063faaf3aff14610f5f57610293565b8063adc481a714610c8f578063b25a00fd14610ca4578063b4a523e814610cb9578063c5dd762814610cec578063cc7cab9514610d01578063cdf7a09014610d3257610293565b80638c439867116101135780638c43986714610ad65780639a0a9fdc14610b51578063a4c0ed3614610b66578063a9add57d14610c2c578063aa9fa27414610c41578063ac8a094214610c7a57610293565b80636834fc901461096557806368c49f3d146109e057806370cafd65146109f5578063727b071d14610a345780638737929a14610a64578063877ffdea14610aa057610293565b80633bf47e96116101fe5780634b6368cf116101b75780634b6368cf1461086a5780634de6c0361461087f57806353251389146108ba578063553a5c85146108e45780635fba554e146108f9578063621784781461093b57610293565b80633bf47e96146106c45780633d84b8c1146106ee578063419ce2641461072157806343544960146107365780634476d66a14610805578063485cc9551461082f57610293565b8063212329f311610250578063212329f31461042d578063222fafb2146105375780632ee57f8d14610561578063307bff261461059357806330f6eb1614610662578063392e53cd1461069b57610293565b80630ac2daa014610298578063118d2191146102da5780631289b1791461030f578063128b265f14610358578063171d54dd146103825780631f1a01b7146103fd575b600080fd5b3480156102a457600080fd5b506102c8600480360360408110156102bb57600080fd5b5080359060200135610f74565b60408051918252519081900360200190f35b3480156102e657600080fd5b5061030d600480360360208110156102fd57600080fd5b50356001600160a01b0316610f91565b005b34801561031b57600080fd5b5061033f6004803603604081101561033257600080fd5b5080359060200135610fe9565b6040805192835260208301919091528051918290030190f35b34801561036457600080fd5b5061030d6004803603602081101561037b57600080fd5b5035611073565b34801561038e57600080fd5b5061030d600480360360208110156103a557600080fd5b810190602081018135600160201b8111156103bf57600080fd5b8201836020820111156103d157600080fd5b803590602001918460208302840111600160201b831117156103f257600080fd5b50909250905061107f565b34801561040957600080fd5b506102c86004803603604081101561042057600080fd5b508035906020013561117a565b34801561043957600080fd5b506104e76004803603608081101561045057600080fd5b81359190810190604081016020820135600160201b81111561047157600080fd5b82018360208201111561048357600080fd5b803590602001918460208302840111600160201b831117156104a457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505082359350505060200135611197565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561052357818101518382015260200161050b565b505050509050019250505060405180910390f35b34801561054357600080fd5b5061030d6004803603602081101561055a57600080fd5b5035611269565b34801561056d57600080fd5b506105766112e6565b604080516001600160e01b03199092168252519081900360200190f35b34801561059f57600080fd5b5061033f600480360360a08110156105b657600080fd5b6001600160a01b038235169160208101359160408201359160608101359181019060a081016080820135600160201b8111156105f157600080fd5b82018360208201111561060357600080fd5b803590602001918460208302840111600160201b8311171561062457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506112f2945050505050565b34801561066e57600080fd5b506102c86004803603604081101561068557600080fd5b506001600160a01b038135169060200135611318565b3480156106a757600080fd5b506106b0611335565b604080519115158252519081900360200190f35b3480156106d057600080fd5b506102c8600480360360208110156106e757600080fd5b5035611346565b3480156106fa57600080fd5b506102c86004803603602081101561071157600080fd5b50356001600160a01b031661192e565b34801561072d57600080fd5b506104e7611940565b34801561074257600080fd5b5061033f600480360360a081101561075957600080fd5b6001600160a01b038235169160208101359160408201359160608101359181019060a081016080820135600160201b81111561079457600080fd5b8201836020820111156107a657600080fd5b803590602001918460208302840111600160201b831117156107c757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506119a2945050505050565b34801561081157600080fd5b506102c86004803603602081101561082857600080fd5b50356119b2565b34801561083b57600080fd5b5061030d6004803603604081101561085257600080fd5b506001600160a01b03813581169160200135166119c4565b34801561087657600080fd5b506102c8611a78565b34801561088b57600080fd5b506104e7600480360360408110156108a257600080fd5b506001600160a01b0381358116916020013516611a83565b3480156108c657600080fd5b5061030d600480360360208110156108dd57600080fd5b5035611ee1565b3480156108f057600080fd5b506102c8611eea565b34801561090557600080fd5b506102c8600480360360a081101561091c57600080fd5b5080359060208101359060408101359060608101359060800135611ef0565b34801561094757600080fd5b5061030d6004803603602081101561095e57600080fd5b5035611f93565b34801561097157600080fd5b5061030d6004803603602081101561098857600080fd5b810190602081018135600160201b8111156109a257600080fd5b8201836020820111156109b457600080fd5b803590602001918460208302840111600160201b831117156109d557600080fd5b50909250905061202a565b3480156109ec57600080fd5b506102c8612121565b348015610a0157600080fd5b5061030d60048036036060811015610a1857600080fd5b50803590602081013590604001356001600160a01b0316612127565b348015610a4057600080fd5b506102c860048036036040811015610a5757600080fd5b50803590602001356122bf565b348015610a7057600080fd5b506102c860048036036080811015610a8757600080fd5b50803590602081013590604081013590606001356122dc565b348015610aac57600080fd5b5061033f60048036036060811015610ac357600080fd5b5080359060208101359060400135612356565b348015610ae257600080fd5b5061030d60048036036020811015610af957600080fd5b810190602081018135600160201b811115610b1357600080fd5b820183602082011115610b2557600080fd5b803590602001918460208302840111600160201b83111715610b4657600080fd5b5090925090506123ea565b348015610b5d57600080fd5b506104e76124e1565b348015610b7257600080fd5b506106b060048036036060811015610b8957600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610bb857600080fd5b820183602082011115610bca57600080fd5b803590602001918460018302840111600160201b83111715610beb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612541945050505050565b348015610c3857600080fd5b506102c8612548565b348015610c4d57600080fd5b5061030d60048036036040811015610c6457600080fd5b50803590602001356001600160a01b0316612555565b348015610c8657600080fd5b506102c86125e0565b348015610c9b57600080fd5b506102c86125e6565b348015610cb057600080fd5b506104e76125ec565b348015610cc557600080fd5b506102c860048036036020811015610cdc57600080fd5b50356001600160a01b031661264c565b348015610cf857600080fd5b5061030d61265e565b348015610d0d57600080fd5b50610d16612881565b604080516001600160a01b039092168252519081900360200190f35b348015610d3e57600080fd5b506102c860048036036020811015610d5557600080fd5b5035612890565b348015610d6857600080fd5b50610d166128a2565b348015610d7d57600080fd5b506102c860048036036040811015610d9457600080fd5b50803590602001356128b1565b348015610dad57600080fd5b506104e760048036036020811015610dc457600080fd5b50356128ce565b348015610dd757600080fd5b506102c860048036036040811015610dee57600080fd5b508035906020013561292e565b348015610e0757600080fd5b50610ec660048036036040811015610e1e57600080fd5b810190602081018135600160201b811115610e3857600080fd5b820183602082011115610e4a57600080fd5b803590602001918460208302840111600160201b83111715610e6b57600080fd5b919390929091602081019035600160201b811115610e8857600080fd5b820183602082011115610e9a57600080fd5b803590602001918460208302840111600160201b83111715610ebb57600080fd5b509092509050612949565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610f0a578181015183820152602001610ef2565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610f49578181015183820152602001610f31565b5050505090500194505050505060405180910390f35b348015610f6b57600080fd5b506102c8613211565b602960209081526000928352604080842090915290825290205481565b610f99613217565b6001600160a01b0316336001600160a01b031614610fb657600080fd5b610fbe611335565b610fc757600080fd5b604d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152602a6020908152604080832084845282528083205485845260298352818420858552835281842054868552604b84528285208686529093529083205483929061103c908790849084906122dc565b6000878152602260209081526040808320898452909152902054909450611068908790849084906122dc565b925050509250929050565b61107c81611f93565b50565b611087613217565b6001600160a01b0316336001600160a01b0316146110a457600080fd5b6110ac611335565b6110b557600080fd5b60005b60025481101561111157600060016000600284815481106110d557fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff19169115159190911790556001016110b8565b61111d60028484614526565b50600090505b8181101561117557600180600085858581811061113c57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101611123565b505050565b602260209081526000928352604080842090915290825290205481565b606080836111bf576040805160008152602081019091526111b990849061323c565b90955093505b8515806111ca575083155b156111e4575060408051600081526020810190915261125e565b845160405190808252806020026020018201604052801561120f578160200160208202803883390190505b50905060005b855181101561125c578486828151811061122b57fe5b602002602001015188028161123c57fe5b0482828151811061124957fe5b6020908102919091010152600101611215565b505b90505b949350505050565b3360009081526001602052604090205460ff1661128557600080fd5b8061128f57600080fd5b6021546112a2908263ffffffff6134a316565b6021819055604080518381526020810192909252805133927f619cc90cbd264bea3dfc113e68fd307789a937a8c10ef4b0110607ac7490367392908290030190a250565b63069ad3e560e11b5b90565b60008061130a61130287856134bc565b8887876134d7565b915091509550959350505050565b602460209081526000928352604080842090915290825290205481565b602c546001600160a01b0316151590565b600080602c60009054906101000a90046001600160a01b03166001600160a01b031663ee99205c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561139757600080fd5b505afa1580156113ab573d6000803e3d6000fd5b505050506040513d60208110156113c157600080fd5b505160408051630f29818d60e31b815290519192506000916001600160a01b0384169163794c0c68916004808301926020929190829003018186803b15801561140957600080fd5b505afa15801561141d573d6000803e3d6000fd5b505050506040513d602081101561143357600080fd5b505190508061144757600092505050611929565b602c5460408051639b4a14bf60e01b81526004810187905290516001600160a01b0390921691639b4a14bf91602480820192602092909190829003018186803b15801561149357600080fd5b505afa1580156114a7573d6000803e3d6000fd5b505050506040513d60208110156114bd57600080fd5b50511561150a576000818152602a602090815260408083208784528252808320548484526029835281842088855290925290912054611501918391620f42406122dc565b92505050611929565b602c60009054906101000a90046001600160a01b03166001600160a01b031663b927ef436040518163ffffffff1660e01b815260040160206040518083038186803b15801561155857600080fd5b505afa15801561156c573d6000803e3d6000fd5b505050506040513d602081101561158257600080fd5b50516118285760606000602c60009054906101000a90046001600160a01b03166001600160a01b0316636729c2dc6040518163ffffffff1660e01b815260040160006040518083038186803b1580156115da57600080fd5b505afa1580156115ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561161757600080fd5b810190808051600160201b81111561162e57600080fd5b8201602081018481111561164157600080fd5b81518560208202830111600160201b8211171561165d57600080fd5b5090955060009450505050505b81518110156116de5781818151811061167f57fe5b60200260200101518614156116d6576000838152602a60209081526040808320898452825280832054868452602983528184208a8552909252909120546116cb918591620f42406122dc565b945050505050611929565b60010161166a565b602c60009054906101000a90046001600160a01b03166001600160a01b0316630bf480c06040518163ffffffff1660e01b815260040160006040518083038186803b15801561172c57600080fd5b505afa158015611740573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561176957600080fd5b810190808051600160201b81111561178057600080fd5b8201602081018481111561179357600080fd5b81518560208202830111600160201b821117156117af57600080fd5b5090955060009450505050505b8151811015611825578181815181106117d157fe5b602002602001015186141561181d576000838152602a60209081526040808320898452825280832054868452602983528184208a8552909252909120546116cb918591620f42406122dc565b6001016117bc565b50505b60408051630fec687960e21b8152600481018690526000602482015290516119249183916001600160a01b03861691633fb1a1e4916044808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b505160408051632a8f6ecd60e01b81526004810189905290516001600160a01b03871691632a8f6ecd916024808301926020929190829003018186803b1580156118ef57600080fd5b505afa158015611903573d6000803e3d6000fd5b505050506040513d602081101561191957600080fd5b5051620f42406122dc565b925050505b919050565b60236020526000908152604090205481565b6060600280548060200260200160405190810160405280929190818152602001828054801561199857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161197a575b5050505050905090565b60008061130a6113028785613578565b60256020526000908152604090205481565b6119cc61359b565b15806119f057506119db613217565b6001600160a01b0316336001600160a01b0316145b6119f957600080fd5b611a01611335565b15611a0b57600080fd5b6001600160a01b038216611a1e57600080fd5b602c80546001600160a01b039384166001600160a01b0319918216179091556000808052602b6020527fe18c65fb8491ea105d3652ed62258476aaccd771ae89682addbba12f33acc62a5560038054929093169116179055565b660b1a2bc2ec500081565b602c546040805163a26301f960e01b81526001600160a01b0385811660048301529151606093600093169163a26301f9916024808301926020929190829003018186803b158015611ad357600080fd5b505afa158015611ae7573d6000803e3d6000fd5b505050506040513d6020811015611afd57600080fd5b505190506001600160a01b038416611b1457600080fd5b6001600160a01b038316611b2757600080fd5b80611b3157600080fd5b602c5460408051633ba6481760e21b815290516000926001600160a01b03169163ee99205c916004808301926020929190829003018186803b158015611b7657600080fd5b505afa158015611b8a573d6000803e3d6000fd5b505050506040513d6020811015611ba057600080fd5b5051905060006001600160a01b038581169087161415611bc1576000611bc3565b845b90506000806001600160a01b03831615611d1157836001600160a01b03166327d89b3a86856040518363ffffffff1660e01b815260040180838152602001826001600160a01b03166001600160a01b031681526020019250505060206040518083038186803b158015611c3557600080fd5b505afa158015611c49573d6000803e3d6000fd5b505050506040513d6020811015611c5f57600080fd5b5051915081611c845750506040805160008152602081019091529350611edb92505050565b836001600160a01b031663381883b086856040518363ffffffff1660e01b815260040180838152602001826001600160a01b03166001600160a01b031681526020019250505060206040518083038186803b158015611ce257600080fd5b505afa158015611cf6573d6000803e3d6000fd5b505050506040513d6020811015611d0c57600080fd5b505190505b600085815260208181526040918290208054835181815281840281019093019093529190606090828015611d4f578160200160208202803883390190505b5090506000805b83811015611e63576000858281548110611d6c57fe5b60009182526020909120015490506001600160a01b03891615611db15787811015611d975750611e5b565b808711158015611da657508615155b15611db15750611e63565b6040805163186dc46f60e01b8152600481018d90526001600160a01b038b81166024830152604482018490529151918c169163186dc46f91606480820192602092909190829003018186803b158015611e0957600080fd5b505afa158015611e1d573d6000803e3d6000fd5b505050506040513d6020811015611e3357600080fd5b5051611e595780848480600101955081518110611e4c57fe5b6020026020010181815250505b505b600101611d56565b81604051908082528060200260200182016040528015611e8d578160200160208202803883390190505b509a50600090505b81811015611ed057828181518110611ea957fe5b60200260200101518b8281518110611ebd57fe5b6020908102919091010152600101611e95565b505050505050505050505b92915050565b61107c81611269565b60265481565b6000841580611efd575083155b80611f06575082155b15611f1357506000611f8a565b60008085851015611f25576000611f29565b8585035b905080611f3b57600092505050611f8a565b6000888152602b6020526040902054818102606482900388021115611f6d578588860281611f6557fe5b049250611f84565b81606402816064038987020281611f8057fe5b0492505b50909150505b95945050505050565b3360009081526046602052604090205460ff1680611fc057503360009081526047602052604090205460ff165b611fc957600080fd5b80611fd357600080fd5b604a54611fe6908263ffffffff6134a316565b604a819055604080518381526020810192909252805133927f412edf02d82089ccd9d6158ca78bb761a19c8f63a840cff791e4ad472bcaa0ac92908290030190a250565b612032613217565b6001600160a01b0316336001600160a01b03161461204f57600080fd5b612057611335565b61206057600080fd5b60005b6049548110156120bc576000604760006049848154811061208057fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055600101612063565b6120c860498484614526565b50600090505b81811015611175576001604760008585858181106120e857fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016120ce565b604c5481565b602c60009054906101000a90046001600160a01b03166001600160a01b031663ee99205c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561217557600080fd5b505afa158015612189573d6000803e3d6000fd5b505050506040513d602081101561219f57600080fd5b50516001600160a01b031633146121b557600080fd5b82156122b55760003390506000816001600160a01b0316632d21d2176040518163ffffffff1660e01b815260040160206040518083038186803b1580156121fb57600080fd5b505afa15801561220f573d6000803e3d6000fd5b505050506040513d602081101561222557600080fd5b50516040805163a9059cbb60e01b81526001600160a01b0386811660048301526024820189905291519293509083169163a9059cbb916044808201926020929091908290030181600087803b15801561227d57600080fd5b505af1158015612291573d6000803e3d6000fd5b505050506040513d60208110156122a757600080fd5b50516122b257600080fd5b50505b611175828261359f565b602a60209081526000928352604080842090915290825290205481565b60008315806122e9575082155b156122f657506000611261565b6000808585101561230857600061230c565b8585035b6000888152602b602052604090205490915080820260648290038802111561234157858786028161233957fe5b04925061234a565b60648582020492505b50909695505050505050565b6000828152602a6020908152604080832084845282528083205485845260298352818420858552835281842054868552604b8452828520868652909352908320548392906123ab908790899085908590611ef0565b93506123de86888484602260008c815260200190815260200160002060008b815260200190815260200160002054611ef0565b92505050935093915050565b6123f2613217565b6001600160a01b0316336001600160a01b03161461240f57600080fd5b612417611335565b61242057600080fd5b60005b60485481101561247c576000604660006048848154811061244057fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055600101612423565b61248860488484614526565b50600090505b81811015611175576001604660008585858181106124a857fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff191691151591909117905560010161248e565b60606048805480602002602001604051908101604052809291908181526020018280548015611998576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161197a575050505050905090565b6000806000fd5b6004546005540360010190565b3360009081526001602052604090205460ff1661257157600080fd5b8161257b57600080fd5b600354600160a01b900460ff1661259157600080fd5b61259c828233613617565b60408051838152905133916001600160a01b038416917f3c798bbcf33115b42c728b8504cff11dd58736e9fa789f1cda2738db7d696b2a9181900360200190a35050565b60215481565b60285481565b60606049805480602002602001604051908101604052809291908181526020018280548015611998576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161197a575050505050905090565b60276020526000908152604090205481565b602c546001600160a01b0316331461267557600080fd5b602c5460408051633ba6481760e21b815290516000926001600160a01b03169163ee99205c916004808301926020929190829003018186803b1580156126ba57600080fd5b505afa1580156126ce573d6000803e3d6000fd5b505050506040513d60208110156126e457600080fd5b505160408051630f29818d60e31b815290519192506000916001600160a01b0384169163794c0c68916004808301926020929190829003018186803b15801561272c57600080fd5b505afa158015612740573d6000803e3d6000fd5b505050506040513d602081101561275657600080fd5b5051602c5460408051637f2a23bf60e11b815290519293506060926001600160a01b039092169163fe54477e91600480820192600092909190829003018186803b1580156127a357600080fd5b505afa1580156127b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156127e057600080fd5b810190808051600160201b8111156127f757600080fd5b8201602081018481111561280a57600080fd5b81518560208202830111600160201b8211171561282657600080fd5b50909450600093505050505b815181101561287b57600083815260208052604081208351829085908590811061285857fe5b602090810291909101810151825281019190915260400160002055600101612832565b50505050565b604d546001600160a01b031681565b602b6020526000908152604090205481565b602c546001600160a01b031681565b604b60209081526000928352604080842090915290825290205481565b6000818152602081815260409182902080548351818402810184019094528084526060939283018282801561292257602002820191906000526020600020905b81548152602001906001019080831161290e575b50505050509050919050565b60208080526000928352604080842090915290825290205481565b6060806002600160a01b03331461295f57600080fd5b848314158061296f575060018514155b8061299657508383600081811061298257fe5b9050602002013561ffff1661ffff16600014155b156129c75760408051600080825260208201909252905b506040805160008152602081019091529092509050613208565b602c546001600160a01b03166129ed5760408051600080825260208201909252906129ad565b602c60009054906101000a90046001600160a01b03166001600160a01b031663ccf69e9b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a3b57600080fd5b505afa158015612a4f573d6000803e3d6000fd5b505050506040513d6020811015612a6557600080fd5b50516040805163109c110760e01b815290516001600160a01b039092169163109c11079160048082019260009290919082900301818387803b158015612aaa57600080fd5b505af1158015612abe573d6000803e3d6000fd5b5050600354600160a01b900460ff169150612afa905057600160045560006005556003805460ff60a01b1916600160a01b179055612afa61368c565b602c5460408051633ba6481760e21b815290516064926000926001600160a01b039091169163ee99205c91600480820192602092909190829003018186803b158015612b4557600080fd5b505afa158015612b59573d6000803e3d6000fd5b505050506040513d6020811015612b6f57600080fd5b505160408051630f29818d60e31b815290519192506000916001600160a01b0384169163794c0c68916004808301926020929190829003018186803b158015612bb757600080fd5b505afa158015612bcb573d6000803e3d6000fd5b505050506040513d6020811015612be157600080fd5b50516040805163461121d760e11b815290519192506000916001600160a01b03851691638c2243ae916004808301926020929190829003018186803b158015612c2957600080fd5b505afa158015612c3d573d6000803e3d6000fd5b505050506040513d6020811015612c5357600080fd5b5051602c546040805163b927ef4360e01b815290519293506000926001600160a01b039092169163b927ef4391600480820192602092909190829003018186803b158015612ca057600080fd5b505afa158015612cb4573d6000803e3d6000fd5b505050506040513d6020811015612cca57600080fd5b505115612e3f578215801590612d7b5750602c546001600160a01b031663a92252ae8c8c600081612cf757fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612d4d57600080fd5b505afa158015612d61573d6000803e3d6000fd5b505050506040513d6020811015612d7757600080fd5b5051155b15612e3f57602c546000906001600160a01b0316632bbb7b728d8d8481612d9e57fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612df457600080fd5b505afa158015612e08573d6000803e3d6000fd5b505050506040513d6020811015612e1e57600080fd5b50516000858152602080805260408083209383529290522080546001019055505b81612e4861359b565b14156131f4578215612e6257612e5f8484846137ee565b90505b602c60009054906101000a90046001600160a01b03166001600160a01b0316635ccee1de6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612eb257600080fd5b505af1158015612ec6573d6000803e3d6000fd5b5050602c54604080516319ca70b760e21b81529051600094506001880193506060926001600160a01b031691636729c2dc9160048083019288929190829003018186803b158015612f1657600080fd5b505afa158015612f2a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612f5357600080fd5b810190808051600160201b811115612f6a57600080fd5b82016020810184811115612f7d57600080fd5b81518560208202830111600160201b82111715612f9957600080fd5b5060009750909450505050505b8051831015612fd857612fcd8783838681518110612fc057fe5b602002602001015161391c565b600190920191612fa6565b602c60009054906101000a90046001600160a01b03166001600160a01b031663fe54477e6040518163ffffffff1660e01b815260040160006040518083038186803b15801561302657600080fd5b505afa15801561303a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561306357600080fd5b810190808051600160201b81111561307a57600080fd5b8201602081018481111561308d57600080fd5b81518560208202830111600160201b821117156130a957600080fd5b5060009750909450505050505b80518310156130db576130d08783838681518110612fc057fe5b6001909201916130b6565b602c60009054906101000a90046001600160a01b03166001600160a01b0316630bf480c06040518163ffffffff1660e01b815260040160006040518083038186803b15801561312957600080fd5b505afa15801561313d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561316657600080fd5b810190808051600160201b81111561317d57600080fd5b8201602081018481111561319057600080fd5b81518560208202830111600160201b821117156131ac57600080fd5b5060009750909450505050505b80518310156131de576131d38783838681518110612fc057fe5b6001909201916131b9565b506000908152602b602052604081208190559550505b6131fe8186613a70565b9650965050505050505b94509492505050565b604a5481565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6060600082516000141561332457602c60009054906101000a90046001600160a01b03166001600160a01b031663fe54477e6040518163ffffffff1660e01b815260040160006040518083038186803b15801561329857600080fd5b505afa1580156132ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156132d557600080fd5b810190808051600160201b8111156132ec57600080fd5b820160208101848111156132ff57600080fd5b81518560208202830111600160201b8211171561331b57600080fd5b50909650505050505b60608351604051908082528060200260200182016040528015613351578160200160208202803883390190505b5090506000805b855181101561349757600086828151811061336f57fe5b60209081029190910181015160008a8152602a8352604080822083835290935291909120549091501580159061341a5750602c5460408051632682240f60e11b81526004810184905290516001600160a01b0390921691634d04481e91602480820192602092909190829003018186803b1580156133ec57600080fd5b505afa158015613400573d6000803e3d6000fd5b505050506040513d602081101561341657600080fd5b5051155b1561345657600088815260208080526040808320848452909152902054845185908490811061344557fe5b602002602001018181525050613471565b600084838151811061346457fe5b6020026020010181815250505b83828151811061347d57fe5b602002602001015183019250508080600101915050613358565b50909590945092505050565b6000828201838110156134b557600080fd5b9392505050565b60006134c88383613c87565b60285460215401019392505050565b600080826135535761354d85866001600160a01b0316638c2243ae6040518163ffffffff1660e01b815260040160206040518083038186803b15801561351c57600080fd5b505afa158015613530573d6000803e3d6000fd5b505050506040513d602081101561354657600080fd5b5051613c8f565b90945092505b60008361356157600061356e565b838588028161356c57fe5b045b9795505050505050565b600061358c8383660b1a2bc2ec5000613e27565b604c54604a5401019392505050565b4390565b81158015906135d057506040516001600160a01b0382169083156108fc029084906000818181858888f19350505050155b156136135781816040516135e390614589565b6001600160a01b039091168152604051908190036020019082f08015801561360f573d6000803e3d6000fd5b5050505b5050565b60058054604080516060810182529586526001600160a01b03938416602080880191825295851687830190815260019384016000818152600690985292909620965187555191860180549285166001600160a01b03199384161790559351600290950180549590931694169390931790559055565b6003546001600160a01b03166136a1576137ec565b60005b600254811015613765576000600282815481106136bd57fe5b6000918252602091829020015460035460408051631694a47d60e31b81526001600160a01b03938416600482018190529151919550919092169263b4a523e892602480840193829003018186803b15801561371757600080fd5b505afa15801561372b573d6000803e3d6000fd5b505050506040513d602081101561374157600080fd5b50516001600160a01b039091166000908152602760205260409020556001016136a4565b50600254156137ec57600360009054906101000a90046001600160a01b03166001600160a01b031663553a5c856040518163ffffffff1660e01b815260040160206040518083038186803b1580156137bc57600080fd5b505afa1580156137d0573d6000803e3d6000fd5b505050506040513d60208110156137e657600080fd5b50516026555b565b60006060602c60009054906101000a90046001600160a01b03166001600160a01b031663fe54477e6040518163ffffffff1660e01b815260040160006040518083038186803b15801561384057600080fd5b505afa158015613854573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561387d57600080fd5b810190808051600160201b81111561389457600080fd5b820160208101848111156138a757600080fd5b81518560208202830111600160201b821117156138c357600080fd5b505092919050505090506000806138da8786613c8f565b91509150606060006138ec888661323c565b915091506138ff89898686898787613f83565b95506139108989868689878761409a565b50505050509392505050565b60008281526029602090815260408083208484529091529020541561394057611175565b6000836001600160a01b0316632a8f6ecd836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561398657600080fd5b505afa15801561399a573d6000803e3d6000fd5b505050506040513d60208110156139b057600080fd5b50519050806139bf5750611175565b600083815260296020908152604080832085845282528083208490558051630fec687960e21b8152600481018690526024810193909352516001600160a01b03871692633fb1a1e4926044808301939192829003018186803b158015613a2457600080fd5b505afa158015613a38573d6000803e3d6000fd5b505050506040513d6020811015613a4e57600080fd5b50516000848152602a6020908152604080832086845290915290205550505050565b6060806000613a7d612548565b905083811115613a8a5750825b84151580613a99576000613a9c565b60015b60ff168201604051908082528060200260200182016040528015613aca578160200160208202803883390190505b5093508351604051908082528060200260200182016040528015613af8578160200160208202803883390190505b50925060005b82811015613b75576000806000613b13614437565b92509250925081888581518110613b2657fe5b60200260200101906001600160a01b031690816001600160a01b03168152505082878581518110613b5357fe5b602002602001018181525050613b6a8383836144b8565b505050600101613afe565b508015613bc35730848381518110613b8957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505085838381518110613bb657fe5b6020026020010181815250505b7f2834f3daea15e82b5f27095c4b6d08cd437f303149009a0a3304be801d2dd7ce8484604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015613c2a578181015183820152602001613c12565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015613c69578181015183820152602001613c51565b5050505090500194505050505060405180910390a150509250929050565b600092915050565b602c546040805163b927ef4360e01b815290516000928392839260019284926001600160a01b039091169163b927ef4391600480820192602092909190829003018186803b158015613ce057600080fd5b505afa158015613cf4573d6000803e3d6000fd5b505050506040513d6020811015613d0a57600080fd5b5051905080156134975760006003602c60009054906101000a90046001600160a01b03166001600160a01b031663714897df6040518163ffffffff1660e01b815260040160206040518083038186803b158015613d6657600080fd5b505afa158015613d7a573d6000803e3d6000fd5b505050506040513d6020811015613d9057600080fd5b505160020281613d9c57fe5b04886001600160a01b0316637069e7466040518163ffffffff1660e01b815260040160206040518083038186803b158015613dd657600080fd5b505afa158015613dea573d6000803e3d6000fd5b505050506040513d6020811015613e0057600080fd5b505101600101905080821015613e14578091505b6001918703820198960301955050505050565b600081613e36575060006134b5565b8251613f1657602c60009054906101000a90046001600160a01b03166001600160a01b031663fe54477e6040518163ffffffff1660e01b815260040160006040518083038186803b158015613e8a57600080fd5b505afa158015613e9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613ec757600080fd5b810190808051600160201b811115613ede57600080fd5b82016020810184811115613ef157600080fd5b81518560208202830111600160201b82111715613f0d57600080fd5b50909650505050505b6000805b8451811015613f6c57602960008781526020019081526020016000206000868381518110613f4457fe5b6020026020010151815260200190815260200160002054820191508080600101915050613f1a565b50670de0b6b3a76400009083020490509392505050565b6000806000613f958a8a8a8a8a6112f2565b915091508060001415613fad5760009250505061408f565b600060218190556060613fc28488888e611197565b90508751815114156140835760005b8851811015614081576000898281518110613fe857fe5b60200260200101519050828281518110613ffe57fe5b60209081029190910181015160008f81526022835260408082208583529093529190912055825183908390811061403157fe5b60200260200101518401935082828151811061404957fe5b602002602001015160001461407857600081815260208181526040822080546001810182559083529120018d90555b50600101613fd1565b505b50908190036028559150505b979650505050505050565b6000806140aa89898989896119a2565b9150915080600014156140be57505061442e565b6000604a819055506000896001600160a01b0316632d21d2176040518163ffffffff1660e01b815260040160206040518083038186803b15801561410157600080fd5b505afa158015614115573d6000803e3d6000fd5b505050506040513d602081101561412b57600080fd5b5051604d549091506000906001600160a01b03161580159061415557506001600160a01b03821615155b156141f757604d5460408051638da5cb5b60e01b815290516001600160a01b0392831692851691638da5cb5b916004808301926020929190829003018186803b1580156141a157600080fd5b505afa1580156141b5573d6000803e3d6000fd5b505050506040513d60208110156141cb57600080fd5b50516001600160a01b031614156141ee5750604d546001600160a01b03166141f2565b5060005b6141fa565b50805b60006001600160a01b038216158015906142895750306001600160a01b0316826001600160a01b03166356b54bae6040518163ffffffff1660e01b815260040160206040518083038186803b15801561425257600080fd5b505afa158015614266573d6000803e3d6000fd5b505050506040513d602081101561427c57600080fd5b50516001600160a01b0316145b1561442457606061429c8689898f611197565b90508851815114156144225760005b89518110156143c2578181815181106142c057fe5b6020026020010151604b60008f815260200190815260200160002060008c84815181106142e957fe5b602002602001015181526020019081526020016000208190555081818151811061430f57fe5b60200260200101518301925081818151811061432757fe5b60200260200101516000141580156143765750602260008e815260200190815260200160002060008b838151811061435b57fe5b60200260200101518152602001908152602001600020546000145b156143ba576000808b838151811061438a57fe5b60209081029190910181015182528181019290925260400160009081208054600181018255908252919020018d90555b6001016142ab565b50826001600160a01b03166391c0aabf836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561440957600080fd5b505af115801561441d573d6000803e3d6000fd5b505050505b505b909203604c555050505b50505050505050565b60045460055460009182918291908181101561445e576000945060009350600092506144b1565b6000828152600660205260408120805460028201805460018085018054969095556001600160a01b03198087169095559381169091556004805490930190925596506001600160a01b0390811695501692505b5050909192565b60006144c261359b565b6001600160a01b03938416600081815260246020908152604080832085845282528083208990559282526023815282822080548901905592815260258352818120805488019055939094168352602790525020805482019055602680549091019055565b828054828255906000526020600020908101928215614579579160200282015b828111156145795781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190614546565b50614585929150614595565b5090565b6032806145ba83390190565b6112ef91905b808211156145855780546001600160a01b031916815560010161459b56fe60806040526040516032380380603283398181016040526020811015602357600080fd5b50516001600160a01b038116fffea265627a7a7230582062631356e570e39d323d66f88466882635eb13d9b0b483126bb5ca9245d1dedf64736f6c634300050a0032" + }, + "0x3000000000000000000000000000000000000001": { + "balance": "0", + "constructor": "0x60806040526040516108053803806108058339818101604052604081101561002657600080fd5b50805160209182015160408051600081529384018082527f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000905251603c81850301902091929091839190600019016000805160206107aa8339815191521461008a57fe5b61009c826001600160e01b036101bd16565b805115610154576000826001600160a01b0316826040518082805190602001908083835b602083106100df5780518252601f1990920191602091820191016100c0565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461013f576040519150601f19603f3d011682016040523d82523d6000602084013e610144565b606091505b505090508061015257600080fd5b505b5050604080517f656970313936372e70726f78792e61646d696e000000000000000000000000008152905190819003601301902060008051602061078a833981519152600019909101146101a457fe5b6101b6816001600160e01b0361023716565b505061024f565b6101d08161024960201b6104801760201c565b610225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806107ca603b913960400191505060405180910390fd5b6000805160206107aa83398151915255565b60008051602061078a83398151915255565b3b151590565b61052c8061025e6000396000f3fe60806040526004361061004a5760003560e01c80633659cfe6146100545780634f1ef286146100875780635c60da1b146101075780638f28397014610138578063f851a4401461016b575b610052610180565b005b34801561006057600080fd5b506100526004803603602081101561007757600080fd5b50356001600160a01b031661019a565b6100526004803603604081101561009d57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100c857600080fd5b8201836020820111156100da57600080fd5b803590602001918460018302840111640100000000831117156100fc57600080fd5b5090925090506101cb565b34801561011357600080fd5b5061011c61026f565b604080516001600160a01b039092168252519081900360200190f35b34801561014457600080fd5b506100526004803603602081101561015b57600080fd5b50356001600160a01b031661027e565b34801561017757600080fd5b5061011c61033c565b610188610198565b610198610193610346565b61036b565b565b6101a261038f565b6001600160a01b0316336001600160a01b0316146101bf57600080fd5b6101c8816103b4565b50565b6101d361038f565b6001600160a01b0316336001600160a01b0316146101f057600080fd5b6101f9836103b4565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610256576040519150601f19603f3d011682016040523d82523d6000602084013e61025b565b606091505b505090508061026957600080fd5b50505050565b6000610279610346565b905090565b61028661038f565b6001600160a01b0316336001600160a01b0316146102a357600080fd5b6001600160a01b0381166102e85760405162461bcd60e51b81526004018080602001828103825260368152602001806104876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61031161038f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101c8816103f4565b600061027961038f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6103bd81610418565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b61042181610480565b61045c5760405162461bcd60e51b815260040180806020018281038252603b8152602001806104bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3b15159056fe43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a265627a7a72305820a9aab4b95b654a79b32f5aa284796894f8329aaa083932695296085b196c27bd64736f6c634300050a0032b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc43616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000000000000000003000000000000000000000000000000000000000000000000000000000000000b03a86b3126157c039b55e21d378587ccfc04d45" + }, + "0x3000000000000000000000000000000000000000": { + "balance": "0", + "constructor": "0x608060405234801561001057600080fd5b50611f2a806100206000396000f3fe6080604052600436106101c25760003560e01c80637a3e286b116100f7578063c64c206411610095578063f2f56ffe11610064578063f2f56ffe146106df578063f58ccc6a14610718578063fd6c1d15146105ad578063fe7d567d14610583576101c2565b8063c64c206414610634578063cc93dab414610649578063de109e2014610675578063dfc8bf4e146106ae576101c2565b806398df67c6116100d157806398df67c614610583578063b6b295ae146105ad578063baf11cab146105e6578063c358ced01461061f576101c2565b80637a3e286b1461054457806383209c3f14610559578063832206261461056e576101c2565b80633afa443c1161016457806363f160e61161013e57806363f160e614610429578063695e89f61461046257806374ce90671461051a57806378ab865d1461052f576101c2565b80633afa443c146103c657806343e7aa1d146103db5780635aca47f6146103f0576101c2565b8063109c1107116101a0578063109c1107146103205780631c77c58c1461033557806328804dbd1461035c578063392e53cd1461039d576101c2565b8063096a113d146101c45780630b402823146102725780630b61ba851461029c575b005b3480156101d057600080fd5b506101fd600480360360408110156101e757600080fd5b50803590602001356001600160a01b031661072d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023757818101518382015260200161021f565b50505050905090810190601f1680156102645780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561027e57600080fd5b506101c26004803603602081101561029557600080fd5b5035610853565b3480156102a857600080fd5b506101c2600480360360408110156102bf57600080fd5b813591908101906040810160208201356401000000008111156102e157600080fd5b8201836020820111156102f357600080fd5b8035906020019184600183028401116401000000008311171561031557600080fd5b5090925090506108d2565b34801561032c57600080fd5b506101c2610a08565b34801561034157600080fd5b5061034a6111f7565b60408051918252519081900360200190f35b34801561036857600080fd5b506101c26004803603606081101561037f57600080fd5b508035906001600160a01b03602082013516906040013515156111fd565b3480156103a957600080fd5b506103b2611418565b604080519115158252519081900360200190f35b3480156103d257600080fd5b506103b261142a565b3480156103e757600080fd5b5061034a611433565b3480156103fc57600080fd5b5061034a6004803603604081101561041357600080fd5b50803590602001356001600160a01b0316611447565b34801561043557600080fd5b506103b26004803603604081101561044c57600080fd5b50803590602001356001600160a01b03166114e4565b34801561046e57600080fd5b5061049b6004803603604081101561048557600080fd5b50803590602001356001600160a01b0316611584565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156104de5781810151838201526020016104c6565b50505050905090810190601f16801561050b5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561052657600080fd5b506103b26116c8565b34801561053b57600080fd5b5061034a6116ee565b34801561055057600080fd5b5061034a6116fd565b34801561056557600080fd5b5061034a611714565b34801561057a57600080fd5b5061034a611742565b34801561058f57600080fd5b506101c2600480360360208110156105a657600080fd5b5035611748565b3480156105b957600080fd5b506103b2600480360360408110156105d057600080fd5b506001600160a01b038135169060200135611765565b3480156105f257600080fd5b506103b26004803603604081101561060957600080fd5b50803590602001356001600160a01b0316611778565b34801561062b57600080fd5b506103b26118d8565b34801561064057600080fd5b5061034a6118e8565b34801561065557600080fd5b506101c26004803603602081101561066c57600080fd5b5035151561191f565b34801561068157600080fd5b506103b26004803603604081101561069857600080fd5b506001600160a01b038135169060200135611957565b3480156106ba57600080fd5b506106c3611a26565b604080516001600160a01b039092168252519081900360200190f35b3480156106eb57600080fd5b5061034a6004803603604081101561070257600080fd5b50803590602001356001600160a01b0316611a35565b34801561072457600080fd5b5061034a611ad2565b600854604080516315ddbdb960e11b81526001600160a01b03848116600483015291516060936000931691632bbb7b72916024808301926020929190829003018186803b15801561077d57600080fd5b505afa158015610791573d6000803e3d6000fd5b505050506040513d60208110156107a757600080fd5b50516000858152602081815260408083208484528252918290208054835160026001831615610100026000190190921691909104601f810184900484028201840190945283815293945091908301828280156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b50505050509150505b92915050565b6008546001600160a01b0316331461086a57600080fd5b60006108746116fd565b600081815260076020908152604080832086845290915290205490915060ff166108ce576000818152600160209081526040808320858452825280832083905583835282825280832085845290915281206108ce91611df0565b5050565b6108da611418565b6108e357600080fd5b336108ee8185611957565b6108f757600080fd5b806001600160a01b0316610909611ae8565b6001600160a01b03161461091c57600080fd5b60006109266116fd565b600854604080516315ddbdb960e11b81526001600160a01b03868116600483015291519394506000939190921691632bbb7b72916024808301926020929190829003018186803b15801561097957600080fd5b505afa15801561098d573d6000803e3d6000fd5b505050506040513d60208110156109a357600080fd5b5051600083815260016020908152604080832084845282528083208a905585835282825280832084845290915290209091506109e0908686611e34565b5060009182526002602090815260408320805460018101825590845292209091015550505050565b600860009054906101000a90046001600160a01b03166001600160a01b03166356b54bae6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5657600080fd5b505afa158015610a6a573d6000803e3d6000fd5b505050506040513d6020811015610a8057600080fd5b50516001600160a01b03163314610a9657600080fd5b600354610aa1611aec565b81610aa857fe5b0615610ab3576111f5565b60606000806000600860009054906101000a90046001600160a01b03166001600160a01b031663ee99205c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b0857600080fd5b505afa158015610b1c573d6000803e3d6000fd5b505050506040513d6020811015610b3257600080fd5b505160408051630f29818d60e31b815290519192506000916001600160a01b0384169163794c0c68916004808301926020929190829003018186803b158015610b7a57600080fd5b505afa158015610b8e573d6000803e3d6000fd5b505050506040513d6020811015610ba457600080fd5b505160408051633834f3a360e11b815290519192506000916001600160a01b03851691637069e746916004808301926020929190829003018186803b158015610bec57600080fd5b505afa158015610c00573d6000803e3d6000fd5b505050506040513d6020811015610c1657600080fd5b50516040805163461121d760e11b815290519192506000916001600160a01b03861691638c2243ae916004808301926020929190829003018186803b158015610c5e57600080fd5b505afa158015610c72573d6000803e3d6000fd5b505050506040513d6020811015610c8857600080fd5b505190506000610c966116fd565b90506003546003028301610ca8611aec565b1115610e6457600860009054906101000a90046001600160a01b03166001600160a01b031663b7ab4db56040518163ffffffff1660e01b815260040160006040518083038186803b158015610cfc57600080fd5b505afa158015610d10573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610d3957600080fd5b810190808051640100000000811115610d5157600080fd5b82016020810184811115610d6457600080fd5b8151856020820283011164010000000082111715610d8157600080fd5b50909b5060009950505050505b8751861015610e6457878681518110610da357fe5b60200260200101519650610db781886114e4565b610e5957600854604080516315ddbdb960e11b81526001600160a01b038a8116600483015291516000939290921691632bbb7b7291602480820192602092909190829003018186803b158015610e0c57600080fd5b505afa158015610e20573d6000803e3d6000fd5b505050506040513d6020811015610e3657600080fd5b505160008681526006602090815260408083209383529290522080546001019055505b600190950194610d8e565b60055460ff168015610e90575081610e7a611aec565b1480610e90575081600354610e8d611aec565b01115b156111e3576000600354866001600160a01b03166397997ebb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ed357600080fd5b505afa158015610ee7573d6000803e3d6000fd5b505050506040513d6020811015610efd57600080fd5b505181610f0657fe5b0490506001811115610f1b5760011901610f26565b8015610f2657600019015b600860009054906101000a90046001600160a01b03166001600160a01b031663b7ab4db56040518163ffffffff1660e01b815260040160006040518083038186803b158015610f7457600080fd5b505afa158015610f88573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610fb157600080fd5b810190808051640100000000811115610fc957600080fd5b82016020810184811115610fdc57600080fd5b8151856020820283011164010000000082111715610ff957600080fd5b5050929190505050985060608951604051908082528060200260200182016040528015611030578160200160208202803883390190505b50600098509050875b8a518910156110ba578a898151811061104e57fe5b60200260200101519950611062848b6114e4565b1580611076575082611074888c611447565b115b156110af578982828060010193508151811061108e57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b600190980197611039565b80156111df576060816040519080825280602002602001820160405280156110ec578160200160208202803883390190505b509050600099505b818a101561113f57828a8151811061110857fe5b6020026020010151818b8151811061111c57fe5b6001600160a01b03909216602092830291909101909101526001909901986110f4565b60085460405163018daf6b60e21b81526020600482018181528451602484015284516001600160a01b0390941693630636bdac9386938392604490920191818601910280838360005b838110156111a0578181015183820152602001611188565b5050505090500192505050600060405180830381600087803b1580156111c557600080fd5b505af11580156111d9573d6000803e3d6000fd5b50505050505b5050505b6111ec81611af0565b50505050505050505b565b60035481565b611205611aec565b15806112295750611214611ba7565b6001600160a01b0316336001600160a01b0316145b61123257600080fd5b61123a611418565b1561124457600080fd5b81600284061561125357600080fd5b806001600160a01b031663714897df6040518163ffffffff1660e01b815260040160206040518083038186803b15801561128c57600080fd5b505afa1580156112a0573d6000803e3d6000fd5b505050506040513d60208110156112b657600080fd5b505184816112c057fe5b06156112cb57600080fd5b83816001600160a01b031663ee99205c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561130557600080fd5b505afa158015611319573d6000803e3d6000fd5b505050506040513d602081101561132f57600080fd5b50516040805163d609ea9360e01b815290516001600160a01b039092169163d609ea9391600480820192602092909190829003018186803b15801561137357600080fd5b505afa158015611387573d6000803e3d6000fd5b505050506040513d602081101561139d57600080fd5b5051816113a657fe5b06156113b157600080fd5b600084116113be57600080fd5b600354156113cb57600080fd5b6001600160a01b0383166113de57600080fd5b50600392909255600880546001600160a01b0319166001600160a01b03929092169190911790556005805460ff1916911515919091179055565b6008546001600160a01b031615155b90565b60055460ff1681565b600060026003548161144157fe5b04905090565b600854604080516315ddbdb960e11b81526001600160a01b038481166004830152915160009384931691632bbb7b72916024808301926020929190829003018186803b15801561149657600080fd5b505afa1580156114aa573d6000803e3d6000fd5b505050506040513d60208110156114c057600080fd5b50516000858152600660209081526040808320938352929052205491505092915050565b600854604080516315ddbdb960e11b81526001600160a01b038481166004830152915160009384931691632bbb7b72916024808301926020929190829003018186803b15801561153357600080fd5b505afa158015611547573d6000803e3d6000fd5b505050506040513d602081101561155d57600080fd5b50516000858152600760209081526040808320938352929052205460ff1691505092915050565b600854604080516315ddbdb960e11b81526001600160a01b03848116600483015291516000936060938593911691632bbb7b7291602480820192602092909190829003018186803b1580156115d857600080fd5b505afa1580156115ec573d6000803e3d6000fd5b505050506040513d602081101561160257600080fd5b505160008681526001602081815260408084208585528252808420548a855284835281852086865283529381902080548251600295821615610100026000190190911694909404601f810184900484028501840190925281845294955092939283918301828280156116b55780601f1061168a576101008083540402835291602001916116b5565b820191906000526020600020905b81548152906001019060200180831161169857829003601f168201915b5050505050905092509250509250929050565b60006116d2611433565b60035460016116df611aec565b03816116e757fe5b0610905090565b60006116f8611714565b905090565b6000600354600161170c611aec565b038161144157fe5b60008061171f611aec565b90506000600354600183038161173157fe5b066003540390508082019250505090565b60045481565b611750611418565b61175957600080fd5b61176281611bcc565b50565b60006117718383611cd8565b9392505050565b600854604080516315ddbdb960e11b81526001600160a01b038481166004830152915160009384931691632bbb7b72916024808301926020929190829003018186803b1580156117c757600080fd5b505afa1580156117db573d6000803e3d6000fd5b505050506040513d60208110156117f157600080fd5b50519050801580159061180757506118076116c8565b1561189057600854604080516324b49dad60e21b815281516000936001600160a01b0316926392d276b49260048082019391829003018186803b15801561184d57600080fd5b505afa158015611861573d6000803e3d6000fd5b505050506040513d604081101561187757600080fd5b505190508181141561188e5760019250505061084d565b505b60008481526001602090815260408083208484529091529020541515806118d05750600084815260076020908152604080832084845290915290205460ff165b949350505050565b60006118e26116c8565b15905090565b60006118f26116c8565b1561190f576118ff611433565b611907611ad2565b019050611427565b611917611433565b611907611714565b611927611ba7565b6001600160a01b0316336001600160a01b03161461194457600080fd5b6005805460ff1916911515919091179055565b60006119616116c8565b61196d5750600061084d565b8161197a5750600061084d565b6008546040805163facd743b60e01b81526001600160a01b0386811660048301529151919092169163facd743b916024808301926020929190829003018186803b1580156119c757600080fd5b505afa1580156119db573d6000803e3d6000fd5b505050506040513d60208110156119f157600080fd5b50516119ff5750600061084d565b611a10611a0a6116fd565b84611778565b15611a1d5750600061084d565b50600192915050565b6008546001600160a01b031681565b600854604080516315ddbdb960e11b81526001600160a01b038481166004830152915160009384931691632bbb7b72916024808301926020929190829003018186803b158015611a8457600080fd5b505afa158015611a98573d6000803e3d6000fd5b505050506040513d6020811015611aae57600080fd5b50516000858152600160209081526040808320938352929052205491505092915050565b6000600354611adf6116fd565b02600101905090565b4190565b4390565b80611afa57611762565b60001981016000818152600260205260408120805490915b81811015611b93576000838281548110611b2857fe5b60009182526020808320909101548783528282526040808420828552909252908220909250611b5691611df0565b6000858152600160208181526040808420858552825280842084905588845260078252808420948452939052919020805460ff1916905501611b12565b506000611ba08382611eb2565b5050505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b33611bd78183611765565b611be057600080fd5b806001600160a01b0316611bf2611ae8565b6001600160a01b031614611c0557600080fd5b600854604080516315ddbdb960e11b81526001600160a01b03848116600483015291516000939290921691632bbb7b7291602480820192602092909190829003018186803b158015611c5657600080fd5b505afa158015611c6a573d6000803e3d6000fd5b505050506040513d6020811015611c8057600080fd5b5051600480548518905590506000611c966116fd565b60008181526007602090815260408083208684528252808320805460ff1916600190811790915593835292815282822094825293909352822091909155505050565b6000611ce26118d8565b611cee5750600061084d565b604080516020808201859052825180830382018152918301909252805191012080611d1d57600091505061084d565b6008546040805163facd743b60e01b81526001600160a01b0387811660048301529151919092169163facd743b916024808301926020929190829003018186803b158015611d6a57600080fd5b505afa158015611d7e573d6000803e3d6000fd5b505050506040513d6020811015611d9457600080fd5b5051611da457600091505061084d565b6000611dae6116fd565b9050611dba81866114e4565b15611dca5760009250505061084d565b611dd48186611a35565b8214611de55760009250505061084d565b506001949350505050565b50805460018160011615610100020316600290046000825580601f10611e165750611762565b601f0160209004906000526020600020908101906117629190611edb565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611e755782800160ff19823516178555611ea2565b82800160010185558215611ea2579182015b82811115611ea2578235825591602001919060010190611e87565b50611eae929150611edb565b5090565b815481835581811115611ed657600083815260209020611ed6918101908301611edb565b505050565b61142791905b80821115611eae5760008155600101611ee156fea265627a7a72305820fb070d0efcf95ea5a546d38c7d35a2cc3bb541e53f6853d2b155fd86d1bde23564736f6c634300050a0032" + }, + "0x4000000000000000000000000000000000000001": { + "balance": "0", + "constructor": "0x60806040526040516108053803806108058339818101604052604081101561002657600080fd5b50805160209182015160408051600081529384018082527f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000905251603c81850301902091929091839190600019016000805160206107aa8339815191521461008a57fe5b61009c826001600160e01b036101bd16565b805115610154576000826001600160a01b0316826040518082805190602001908083835b602083106100df5780518252601f1990920191602091820191016100c0565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461013f576040519150601f19603f3d011682016040523d82523d6000602084013e610144565b606091505b505090508061015257600080fd5b505b5050604080517f656970313936372e70726f78792e61646d696e000000000000000000000000008152905190819003601301902060008051602061078a833981519152600019909101146101a457fe5b6101b6816001600160e01b0361023716565b505061024f565b6101d08161024960201b6104801760201c565b610225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806107ca603b913960400191505060405180910390fd5b6000805160206107aa83398151915255565b60008051602061078a83398151915255565b3b151590565b61052c8061025e6000396000f3fe60806040526004361061004a5760003560e01c80633659cfe6146100545780634f1ef286146100875780635c60da1b146101075780638f28397014610138578063f851a4401461016b575b610052610180565b005b34801561006057600080fd5b506100526004803603602081101561007757600080fd5b50356001600160a01b031661019a565b6100526004803603604081101561009d57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100c857600080fd5b8201836020820111156100da57600080fd5b803590602001918460018302840111640100000000831117156100fc57600080fd5b5090925090506101cb565b34801561011357600080fd5b5061011c61026f565b604080516001600160a01b039092168252519081900360200190f35b34801561014457600080fd5b506100526004803603602081101561015b57600080fd5b50356001600160a01b031661027e565b34801561017757600080fd5b5061011c61033c565b610188610198565b610198610193610346565b61036b565b565b6101a261038f565b6001600160a01b0316336001600160a01b0316146101bf57600080fd5b6101c8816103b4565b50565b6101d361038f565b6001600160a01b0316336001600160a01b0316146101f057600080fd5b6101f9836103b4565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610256576040519150601f19603f3d011682016040523d82523d6000602084013e61025b565b606091505b505090508061026957600080fd5b50505050565b6000610279610346565b905090565b61028661038f565b6001600160a01b0316336001600160a01b0316146102a357600080fd5b6001600160a01b0381166102e85760405162461bcd60e51b81526004018080602001828103825260368152602001806104876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61031161038f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101c8816103f4565b600061027961038f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6103bd81610418565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b61042181610480565b61045c5760405162461bcd60e51b815260040180806020018281038252603b8152602001806104bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3b15159056fe43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a265627a7a72305820a9aab4b95b654a79b32f5aa284796894f8329aaa083932695296085b196c27bd64736f6c634300050a0032b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc43616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000000000000000004000000000000000000000000000000000000000000000000000000000000000b03a86b3126157c039b55e21d378587ccfc04d45" + }, + "0x4000000000000000000000000000000000000000": { + "balance": "0", + "constructor": "0x608060405234801561001057600080fd5b5061139e806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806390482d72116100ad578063baddbfa011610071578063baddbfa014610479578063c746c8f4146104a5578063d9eb2d5e146104cb578063dfc8bf4e146104d3578063efc78401146104db57610121565b806390482d72146102b957806394a1fd781461033a5780639d7912aa14610360578063a0a8e46014610386578063b9056afa1461038e57610121565b8063392e53cd116100f4578063392e53cd146101ea578063469ab1e314610206578063471eab5c1461020e57806375d0c0dc146102345780637877a797146102b157610121565b80630651cd86146101265780631a9ebeaa146101545780631b9f67a1146101785780633272b28c14610192575b600080fd5b6101526004803603604081101561013c57600080fd5b506001600160a01b038135169060200135610501565b005b61015c61058b565b604080516001600160a01b039092168252519081900360200190f35b61018061059a565b60408051918252519081900360200190f35b61019a6105a1565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156101d65781810151838201526020016101be565b505050509050019250505060405180910390f35b6101f2610604565b604080519115158252519081900360200190f35b610180610615565b6101526004803603602081101561022457600080fd5b50356001600160a01b0316610691565b61023c6107c5565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027657818101518382015260200161025e565b50505050905090810190601f1680156102a35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101806107f5565b610152600480360360608110156102cf57600080fd5b8101906020810181356401000000008111156102ea57600080fd5b8201836020820111156102fc57600080fd5b8035906020019184602083028401116401000000008311171561031e57600080fd5b91935091506001600160a01b0381358116916020013516610914565b6101806004803603602081101561035057600080fd5b50356001600160a01b03166109e2565b6101806004803603602081101561037657600080fd5b50356001600160a01b03166109f4565b610180610a26565b610459600480360360a08110156103a457600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156103e457600080fd5b8201836020820111156103f657600080fd5b8035906020019184600183028401116401000000008311171561041857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a2b945050505050565b6040805163ffffffff909316835290151560208301528051918290030190f35b6101526004803603604081101561048f57600080fd5b506001600160a01b038135169060200135610a4c565b610152600480360360208110156104bb57600080fd5b50356001600160a01b0316610ad6565b610180610b18565b61015c610b1f565b6101f2600480360360208110156104f157600080fd5b50356001600160a01b0316610b2e565b610509610b43565b6001600160a01b0316336001600160a01b03161461052657600080fd5b61052e610604565b61053757600080fd5b6001600160a01b038216600081815260056020908152604091829020849055815184815291517fc8eecc08ae9cffd51fce8871ab6f4c6c8c112f8753fad097a055d51433661a7d9281900390910190a25050565b6001546001600160a01b031681565b623d090081565b606060008054806020026020016040519081016040528092919081815260200182805480156105f957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105db575b505050505090505b90565b6003546001600160a01b0316151590565b600061061f6107c5565b6040516020018082805190602001908083835b602083106106515780518252601f199092019160209182019101610632565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905090565b610699610b43565b6001600160a01b0316336001600160a01b0316146106b657600080fd5b6106be610604565b6106c757600080fd5b6001600160a01b03811660009081526002602052604090205460ff166106ec57600080fd5b60008054905b818110156107a2576000818154811061070757fe5b6000918252602090912001546001600160a01b038481169116141561079a576000600183038154811061073657fe5b600091825260208220015481546001600160a01b0390911691908390811061075a57fe5b6000918252602082200180546001600160a01b0319166001600160a01b039390931692909217909155805490610794906000198301611322565b506107a2565b6001016106f2565b50506001600160a01b03166000908152600260205260409020805460ff19169055565b604080518082019091526016815275151617d41154935254d4d253d397d0d3d395149050d560521b602082015290565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663ee99205c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561084657600080fd5b505afa15801561085a573d6000803e3d6000fd5b505050506040513d602081101561087057600080fd5b50516040805163461121d760e11b815290519192506000916001600160a01b03841691638c2243ae916004808301926020929190829003018186803b1580156108b857600080fd5b505afa1580156108cc573d6000803e3d6000fd5b505050506040513d60208110156108e257600080fd5b5051905043600019820114806108f757508043145b1561090957623d090092505050610601565b62bebc209250505090565b4315806109395750610924610b43565b6001600160a01b0316336001600160a01b0316145b61094257600080fd5b61094a610604565b1561095457600080fd5b6001600160a01b03821661096757600080fd5b6001600160a01b03811661097a57600080fd5b60005b838110156109b1576109a985858381811061099457fe5b905060200201356001600160a01b0316610b68565b60010161097d565b50600180546001600160a01b039384166001600160a01b031991821617909155600380549290931691161790555050565b60056020526000908152604090205481565b6001600160a01b0381166000908152600460205260408120548015610a1a579050610a21565b6178009150505b919050565b600390565b600080610a3e8787878788600089610c06565b915091509550959350505050565b610a54610b43565b6001600160a01b0316336001600160a01b031614610a7157600080fd5b610a79610604565b610a8257600080fd5b6001600160a01b038216600081815260046020908152604091829020849055815184815291517f89afe3f32b77b643649ede79272f126acd78aa80feeabe1b8c103d0b2f2848969281900390910190a25050565b610ade610b43565b6001600160a01b0316336001600160a01b031614610afb57600080fd5b610b03610604565b610b0c57600080fd5b610b1581610b68565b50565b62bebc2081565b6003546001600160a01b031681565b60026020526000908152604090205460ff1681565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6001600160a01b03811660009081526002602052604090205460ff1615610b8e57600080fd5b6001600160a01b038116610ba157600080fd5b60008054600181810183557f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56390910180546001600160a01b039094166001600160a01b031990941684179055918152600260205260409020805460ff19169091179055565b6001600160a01b038716600090815260026020526040812054819060ff1615610c38575063ffffffff90506000611316565b6001600160a01b038816158015610c575750610c53896109f4565b8351115b15610c6757506000905080611316565b6004838101516003546040805163ccf69e9b60e01b8152905160e09390931b936001600160a01b039092169263ccf69e9b92828101926020929190829003018186803b158015610cb657600080fd5b505afa158015610cca573d6000803e3d6000fd5b505050506040513d6020811015610ce057600080fd5b50516001600160a01b038a811691161415610e5e576001600160e01b03198116630b61ba8560e01b148015610d16575060248451115b15610db957602484810151604080516306f084f160e51b81526001600160a01b038e81166004830152938101839052905191928c169163de109e2091604480820192602092909190829003018186803b158015610d7257600080fd5b505afa158015610d86573d6000803e3d6000fd5b505050506040513d6020811015610d9c57600080fd5b5051610da9576000610dac565b60025b6000935093505050611316565b6001600160e01b0319811663fe7d567d60e01b1480610de857506001600160e01b03198116634c6fb3e360e11b145b8015610df5575083516024145b15610e51576024848101516040805163fd6c1d1560e01b81526001600160a01b038e81166004830152938101839052905191928c169163fd6c1d1591604480820192602092909190829003018186803b158015610d7257600080fd5b6000809250925050611316565b6003546001600160a01b038a8116911614156110bd576001600160e01b031981166349da712f60e11b1415610f2157600360009054906101000a90046001600160a01b03166001600160a01b0316633d3b54586040518163ffffffff1660e01b815260040160206040518083038186803b158015610edb57600080fd5b505afa158015610eef573d6000803e3d6000fd5b505050506040513d6020811015610f0557600080fd5b5051610f12576000610f15565b60025b60009250925050611316565b6001600160e01b03198116630311db7560e61b148015610f4357506044845110155b156110335760008060248601519150604486015190506000600360009054906101000a90046001600160a01b03166001600160a01b031663a670eb568e85856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050604080518083038186803b158015610fe757600080fd5b505afa158015610ffb573d6000803e3d6000fd5b505050506040513d604081101561101157600080fd5b5051905080611021576000611024565b60025b60009550955050505050611316565b86156110bd576003546040805163facd743b60e01b81526001600160a01b038d811660048301529151919092169163facd743b916024808301926020929190829003018186803b15801561108657600080fd5b505afa15801561109a573d6000803e3d6000fd5b505050506040513d60208110156110b057600080fd5b5051610e51576002610f15565b6003546040805163facd743b60e01b81526001600160a01b038d811660048301529151919092169163facd743b916024808301926020929190829003018186803b15801561110a57600080fd5b505afa15801561111e573d6000803e3d6000fd5b505050506040513d602081101561113457600080fd5b505180156111425750600087115b15611195576001600160e01b0319811663a9059cbb60e01b141561116e57600260009250925050611316565b60008a6001600160a01b03163111611187576000610f15565b600160009250925050611316565b6003546040805163facd743b60e01b81526001600160a01b038c811660048301529151919092169163facd743b916024808301926020929190829003018186803b1580156111e257600080fd5b505afa1580156111f6573d6000803e3d6000fd5b505050506040513d602081101561120c57600080fd5b505115611220576000809250925050611316565b866112ba57600154604080516303a388eb60e61b81526001600160a01b038d811660048301529151919092169163e8e23ac0916024808301926020929190829003018186803b15801561127257600080fd5b505afa158015611286573d6000803e3d6000fd5b505050506040513d602081101561129c57600080fd5b50516112a9576000610f15565b63ffffffff60009250925050611316565b6001600160a01b038a166000908152600560205260409020548710806112f757506001600160a01b038a1660009081526005602052604090205486105b15611309576000809250925050611316565b63ffffffff600092509250505b97509795505050505050565b8154818355818111156113465760008381526020902061134691810190830161134b565b505050565b61060191905b808211156113655760008155600101611351565b509056fea265627a7a72305820de9ee9915ae9231fc972bc7570c92a6e882aae006233dfefbea7769e5545011064736f6c634300050a0032" + }, + "0x4100000000000000000000000000000000000000": { + "balance": "0", + "constructor": "0x60806040523480156200001157600080fd5b506040516200232d3803806200232d8339810160408190526200003491620000bd565b6001600160a01b038116620000465750335b6001600160a01b0381166200005a57600080fd5b600880546001600160a01b0319166001600160a01b0383169081179091556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000112565b8051620000b781620000f8565b92915050565b600060208284031215620000d057600080fd5b6000620000de8484620000aa565b949350505050565b60006001600160a01b038216620000b7565b6200010381620000e6565b81146200010f57600080fd5b50565b61220b80620001226000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80638da5cb5b1161008c578063a5b62cb311610066578063a5b62cb314610187578063d13a26531461019a578063f2fde38b146101bc578063f53c7e2f146101cf576100cf565b80638da5cb5b14610157578063a0daeed21461016c578063a2bf0af514610174576100cf565b80630af28392146100d4578063338cd6bd146100e9578063399b6f3e14610107578063662520bd1461011c5780637d616fd31461012f578063879cda7314610144575b600080fd5b6100e76100e2366004611ccd565b6101e2565b005b6100f1610465565b6040516100fe91906120a0565b60405180910390f35b61010f6104c7565b6040516100fe9190612140565b6100e761012a366004611c93565b6104cd565b610137610608565b6040516100fe91906120b1565b6100e7610152366004611c93565b610699565b61015f610915565b6040516100fe9190612058565b610137610924565b6100e7610182366004611d1a565b610a15565b6100e7610195366004611ccd565b610a89565b6101ad6101a8366004611d5c565b610c9c565b6040516100fe93929190612066565b6100e76101ca366004611c6d565b610ccb565b61010f6101dd366004611c93565b610d77565b6008546001600160a01b031633146102155760405162461bcd60e51b815260040161020c90612100565b60405180910390fd5b6001600160a01b03831661023b5760405162461bcd60e51b815260040161020c90612120565b806102585760405162461bcd60e51b815260040161020c90612130565b6001600160a01b03831660009081526004602090815260408083206001600160e01b031986168452909152902054600354811080156102c55750836001600160a01b0316600382815481106102a957fe5b60009182526020909120600290910201546001600160a01b0316145b801561030b5750826001600160e01b031916600382815481106102e457fe5b6000918252602090912060029091020154600160a01b900460e01b6001600160e01b031916145b1561033857816003828154811061031e57fe5b906000526020600020906002020160010181905550610413565b600380546001600160a01b0386811660008181526004602090815260408083206001600160e01b03198b16808552908352818420879055815160608101835294855291840191825283018881526001860187559590915290517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b6002909402938401805492516001600160a01b0319909316919093161763ffffffff60a01b1916600160a01b60e09290921c9190910217905590517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c909101555b826001600160e01b031916846001600160a01b03167f7c3ecffa528bfccc8dd5c2454093da1c08757c960b1e5425afb9cb3b18439028846040516104579190612140565b60405180910390a350505050565b606060028054806020026020016040519081016040528092919081815260200182805480156104bd57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161049f575b5050505050905090565b60055481565b6008546001600160a01b031633146104f75760405162461bcd60e51b815260040161020c90612100565b6001600160a01b03821660009081526007602090815260408083206001600160e01b031985168452909152902054806105425760405162461bcd60e51b815260040161020c906120d0565b61055360008263ffffffff610d9416565b6001600160a01b03831660009081526007602090815260408083206001600160e01b03198616845282528083208390558383526006909152812080546001600160c01b03191681556001908101919091556005546105b091610fc2565b6005556040516001600160e01b03198316906001600160a01b038516907f896fc6a8eb054c92d480f4d32ec773e5ebe77109ad3b179f3e97ac78cf3e7cb7906105fb906000906120c2565b60405180910390a3505050565b60606003805480602002602001604051908101604052809291908181526020016000905b82821015610690576000848152602090819020604080516060810182526002860290920180546001600160a01b0381168452600160a01b900460e01b6001600160e01b0319168385015260019081015491830191909152908352909201910161062c565b50505050905090565b6008546001600160a01b031633146106c35760405162461bcd60e51b815260040161020c90612100565b6001600160a01b03821660009081526004602090815260408083206001600160e01b031985168452909152902054600354811080156107305750826001600160a01b03166003828154811061071457fe5b60009182526020909120600290910201546001600160a01b0316145b80156107765750816001600160e01b0319166003828154811061074f57fe5b6000918252602090912060029091020154600160a01b900460e01b6001600160e01b031916145b156108f857610783611b02565b60038054600019810190811061079557fe5b600091825260209182902060408051606081018252600290930290910180546001600160a01b03811684526001600160e01b0319600160a01b90910460e01b169383019390935260019092015491810191909152600380549192508291849081106107fc57fe5b60009182526020808320845160029093020180548583015160e01c600160a01b0263ffffffff60a01b196001600160a01b039586166001600160a01b031990931692909217919091161781556040948501516001909101558451821683526004808252848420868301516001600160e01b03199081168652908352858520889055928916845281528383209187168352529081205560038054906108a4906000198301611b22565b50826001600160e01b031916846001600160a01b03167f7c3ecffa528bfccc8dd5c2454093da1c08757c960b1e5425afb9cb3b1843902860006040516108ea91906120c2565b60405180910390a350610910565b60405162461bcd60e51b815260040161020c90612110565b505050565b6008546001600160a01b031681565b606060055460405190808252806020026020018201604052801561096257816020015b61094f611b02565b8152602001906001900390816109475790505b50905060006109716000610fdc565b905060005b8115610a1057600554811061098a57600080fd5b600082815260066020908152604091829020825160608101845281546001600160a01b0381168252600160a01b900460e01b6001600160e01b0319169281019290925260019081015492820192909252845191830192909185919081106109ed57fe5b6020908102919091010152610a0960008363ffffffff61101c16565b9150610976565b505090565b6008546001600160a01b03163314610a3f5760405162461bcd60e51b815260040161020c90612100565b610a4b60028383611b4e565b507ff3a1b17f96de235ad0ae63327b65739025bc92dd4bc161c9d8b661cb449ec62d8282604051610a7d92919061208e565b60405180910390a15050565b6008546001600160a01b03163314610ab35760405162461bcd60e51b815260040161020c90612100565b6001600160a01b038316610ad95760405162461bcd60e51b815260040161020c90612120565b80610af65760405162461bcd60e51b815260040161020c906120e0565b6001600160a01b03831660009081526007602090815260408083206001600160e01b0319861684529091529020548015610bac5781811415610b7657826001600160e01b031916846001600160a01b03167f896fc6a8eb054c92d480f4d32ec773e5ebe77109ad3b179f3e97ac78cf3e7cb7846040516108ea9190612140565b610b8760008263ffffffff610d9416565b600081815260066020526040812080546001600160c01b031916815560010155610bc4565b600554610bc090600163ffffffff6110b916565b6005555b610bd560008363ffffffff6110d216565b604080516060810182526001600160a01b038087168083526001600160e01b03198716602080850182815285870189815260008a81526006845288812097518854935160e01c600160a01b0263ffffffff60a01b19919098166001600160a01b031990941693909317929092169590951786559351600190950194909455818352600784528483208184529093529083902085905591519091907f896fc6a8eb054c92d480f4d32ec773e5ebe77109ad3b179f3e97ac78cf3e7cb790610457908690612140565b600660205260009081526040902080546001909101546001600160a01b03821691600160a01b900460e01b9083565b6008546001600160a01b03163314610cf55760405162461bcd60e51b815260040161020c90612100565b6001600160a01b038116610d1b5760405162461bcd60e51b815260040161020c906120f0565b6008546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b600760209081526000928352604080842090915290825290205481565b80610d9e57600080fd5b610da882826111ec565b610db157600080fd5b6000818152600180840160205260408220015481901580610de357506000838152600185016020526040902060020154155b15610def575081610e37565b5060008281526001840160205260409020600201545b600081815260018086016020526040909120015415610e37576000908152600180850160205260409091200154610e05565b600081815260018086016020526040909120015415610e6b5760008181526001808601602052604090912001549150610e82565b600081815260018501602052604090206002015491505b60008181526001850160205260408082205484835291208190558015610ef4576000818152600180870160205260409091200154821415610ed85760008181526001808701602052604090912001839055610eef565b600081815260018601602052604090206002018390555b610ef8565b8285555b600082815260018601602052604090206003015460ff1615848314610f8257610f2286848761121b565b60008581526001878101602052604080832080830154878552828520938401819055845281842087905560028082015490840181905584529083208690556003908101549286905201805460ff191660ff90921615159190911790559193915b8015610f9257610f928685611292565b5050600090815260019384016020526040812081815593840181905560028401555050600301805460ff19169055565b600082821115610fd157600080fd5b508082035b92915050565b80548015611017575b600081815260018301602052604090206002015415611017576000908152600182016020526040902060020154610fe5565b919050565b60008161102857600080fd5b6000828152600180850160205260409091200154156110675760008281526001808501602052604090912001546110609084906116ad565b9050610fd6565b5060008181526001830160205260409020545b801580159061109b5750600081815260018085016020526040909120015482145b15610fd657600081815260018401602052604090205490915061107a565b6000828201838110156110cb57600080fd5b9392505050565b806110dc57600080fd5b6110e682826111ec565b156110f057600080fd5b81546000905b801561113a5780915080831015611120576000908152600180850160205260409091200154611135565b60009081526001840160205260409020600201545b6110f6565b60408051608081018252838152600060208083018281528385018381526001606086018181528a86528b82019094529590932093518455519383019390935551600282015590516003909101805460ff1916911515919091179055816111a2578284556111dc565b818310156111c557600082815260018086016020526040909120018390556111dc565b600082815260018501602052604090206002018390555b6111e684846116ea565b50505050565b600081158015906110cb575082548214806110cb57505060009081526001919091016020526040902054151590565b600081815260018401602052604080822054848352912081905580611242578284556111e6565b600081815260018086016020526040909120015482141561127857600081815260018086016020526040909120018390556111e6565b600090815260019390930160205250604090912060020155565b60005b825482148015906112ba5750600082815260018401602052604090206003015460ff16155b1561168e5760008281526001808501602052604080832054808452922001548314156114b75760008181526001850160205260408082206002015480835291206003015490925060ff161561135e576000828152600180860160205260408083206003908101805460ff199081169091558585529190932090920180549092161790556113478482611955565b600081815260018501602052604090206002015491505b60008281526001808601602052604080832090910154825290206003015460ff161580156113a95750600082815260018501602052604080822060020154825290206003015460ff16155b156113d657600082815260018581016020526040909120600301805460ff191690911790559150816114b2565b600082815260018501602052604080822060020154825290206003015460ff16611453576000828152600180860160205260408083208083015484529083206003908101805460ff199081169091559386905201805490921617905561143c8483611a2d565b600081815260018501602052604090206002015491505b600081815260018501602052604080822060039081018054868552838520808401805460ff909316151560ff1993841617905582548216909255600290910154845291909220909101805490911690556114ad8482611955565b835492505b611688565b6000818152600180860160205260408083209091015480835291206003015490925060ff1615611536576000828152600180860160205260408083206003908101805460ff1990811690915585855291909320909201805490921617905561151f8482611a2d565b600081815260018086016020526040909120015491505b600082815260018501602052604080822060020154825290206003015460ff16158015611581575060008281526001808601602052604080832090910154825290206003015460ff16155b156115ae57600082815260018581016020526040909120600301805460ff19169091179055915081611688565b60008281526001808601602052604080832090910154825290206003015460ff1661162d57600082815260018086016020526040808320600281015484529083206003908101805460ff19908116909155938690520180549092161790556116168483611955565b600081815260018086016020526040909120015491505b60008181526001808601602052604080832060039081018054878652838620808401805460ff909316151560ff199384161790558254821690925593015484529220909101805490911690556116838482611a2d565b835492505b50611295565b506000908152600190910160205260409020600301805460ff19169055565b60005b6000828152600184016020526040902060020154156116e457600091825260018301602052604090912060020154906116b0565b50919050565b60005b825482148015906117175750600082815260018401602052604080822054825290206003015460ff165b1561193357600082815260018085016020526040808320548084528184205484529220015481141561183a5760008181526001850160205260408082205482528082206002015480835291206003015490925060ff16156117c0576000818152600180860160205260408083206003808201805460ff19908116909155878652838620820180548216905582548652928520018054909216909217905590829052549250611835565b60008181526001850160205260409020600201548314156117e8578092506117e88484611955565b50600082815260018085016020526040808320548084528184206003808201805460ff19908116909155825487529386200180549093169093179091559182905254611835908590611a2d565b61192d565b6000818152600180860160205260408083205483528083209091015480835291206003015490925060ff16156118b8576000818152600180860160205260408083206003808201805460ff1990811690915587865283862082018054821690558254865292852001805490921690921790559082905254925061192d565b60008181526001808601602052604090912001548314156118e0578092506118e08484611a2d565b50600082815260018085016020526040808320548084528184206003808201805460ff1990811690915582548752938620018054909316909317909155918290525461192d908590611955565b506116ed565b505080546000908152600190910160205260409020600301805460ff19169055565b60008181526001808401602052604080832060028101805491548286529285209093015493859052918390559091801561199d57600081815260018601602052604090208490555b60008381526001860160205260409020829055816119bd57828555611a0a565b60008281526001808701602052604090912001548414156119f35760008281526001808701602052604090912001839055611a0a565b600082815260018601602052604090206002018390555b505060008181526001938401602052604080822090940183905591825291902055565b60008181526001808401602052604080832091820180549254838552918420600201549385905283905590918015611a7357600081815260018601602052604090208490555b6000838152600186016020526040902082905581611a9357828555611ae0565b6000828152600186016020526040902060020154841415611ac95760008281526001860160205260409020600201839055611ae0565b600082815260018087016020526040909120018390555b5050600081815260019093016020526040808420600201839055918352912055565b604080516060810182526000808252602082018190529181019190915290565b815481835581811115610910576002028160020283600052602060002091820191016109109190611bb1565b828054828255906000526020600020908101928215611ba1579160200282015b82811115611ba15781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190611b6e565b50611bad929150611bdf565b5090565b611bdc91905b80821115611bad5780546001600160c01b031916815560006001820155600201611bb7565b90565b611bdc91905b80821115611bad5780546001600160a01b0319168155600101611be5565b8035610fd68161219f565b60008083601f840112611c2057600080fd5b50813567ffffffffffffffff811115611c3857600080fd5b602083019150836020820283011115611c5057600080fd5b9250929050565b8035610fd6816121b6565b8035610fd6816121bf565b600060208284031215611c7f57600080fd5b6000611c8b8484611c03565b949350505050565b60008060408385031215611ca657600080fd5b6000611cb28585611c03565b9250506020611cc385828601611c57565b9150509250929050565b600080600060608486031215611ce257600080fd5b6000611cee8686611c03565b9350506020611cff86828701611c57565b9250506040611d1086828701611c62565b9150509250925092565b60008060208385031215611d2d57600080fd5b823567ffffffffffffffff811115611d4457600080fd5b611d5085828601611c0e565b92509250509250929050565b600060208284031215611d6e57600080fd5b6000611c8b8484611c62565b6000611d868383611da2565b505060200190565b6000611d9a838361201c565b505060600190565b611dab81612170565b82525050565b6000611dbd8385612158565b9350611dc882611bdc565b8060005b85811015611dfe57611dde8284612161565b611de88882611d7a565b9750611df38361214e565b925050600101611dcc565b509495945050505050565b6000611e1482612154565b611e1e8185612158565b9350611e298361214e565b8060005b83811015611dfe578151611e418882611d7a565b9750611e4c8361214e565b925050600101611e2d565b6000611e6282612154565b611e6c8185612158565b9350611e778361214e565b8060005b83811015611dfe578151611e8f8882611d8e565b9750611e9a8361214e565b925050600101611e7b565b611dab8161217b565b611dab81612194565b6000611ec4601a83612158565b7f64657374696e6174696f6e20646f6573206e6f74206578697374000000000000815260200192915050565b6000611efd601283612158565b7107765696768742063616e6e6f7420626520360741b815260200192915050565b6000611f2b601d83612158565b7f6e6577206f776e657220697320746865207a65726f2061646472657373000000815260200192915050565b6000611f64601783612158565b7f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000815260200192915050565b6000611f9d600983612158565b681b9bdd08199bdd5b9960ba1b815260200192915050565b6000611fc2601283612158565b7107461726765742063616e6e6f7420626520360741b815260200192915050565b6000611ff0601783612158565b7f6d696e47617350726963652063616e6e6f742062652030000000000000000000815260200192915050565b8051606083019061202d8482611da2565b5060208201516120406020850182611ea5565b5060408201516111e660408501825b611dab81611bdc565b60208101610fd68284611da2565b606081016120748286611da2565b6120816020830185611ea5565b611c8b604083018461204f565b60208082528101611c8b818486611db1565b602080825281016110cb8184611e09565b602080825281016110cb8184611e57565b60208101610fd68284611eae565b60208082528101610fd681611eb7565b60208082528101610fd681611ef0565b60208082528101610fd681611f1e565b60208082528101610fd681611f57565b60208082528101610fd681611f90565b60208082528101610fd681611fb5565b60208082528101610fd681611fe3565b60208101610fd6828461204f565b60200190565b5190565b90815260200190565b60006110cb6020840184611c03565b6000610fd682612188565b6001600160e01b03191690565b6001600160a01b031690565b6000610fd682611bdc565b6121a881612170565b81146121b357600080fd5b50565b6121a88161217b565b6121a881611bdc56fea365627a7a72305820f7014cfc58f43e5dc9f5a4bf6c6a6f5bce8883c71fa0b037ee28c5764fedabab6c6578706572696d656e74616cf564736f6c634300050a0040000000000000000000000000b03a86b3126157c039b55e21d378587ccfc04d45" + }, + "0x5000000000000000000000000000000000000001": { + "balance": "0", + "constructor": "0x60806040526040516108053803806108058339818101604052604081101561002657600080fd5b50805160209182015160408051600081529384018082527f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000905251603c81850301902091929091839190600019016000805160206107aa8339815191521461008a57fe5b61009c826001600160e01b036101bd16565b805115610154576000826001600160a01b0316826040518082805190602001908083835b602083106100df5780518252601f1990920191602091820191016100c0565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461013f576040519150601f19603f3d011682016040523d82523d6000602084013e610144565b606091505b505090508061015257600080fd5b505b5050604080517f656970313936372e70726f78792e61646d696e000000000000000000000000008152905190819003601301902060008051602061078a833981519152600019909101146101a457fe5b6101b6816001600160e01b0361023716565b505061024f565b6101d08161024960201b6104801760201c565b610225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806107ca603b913960400191505060405180910390fd5b6000805160206107aa83398151915255565b60008051602061078a83398151915255565b3b151590565b61052c8061025e6000396000f3fe60806040526004361061004a5760003560e01c80633659cfe6146100545780634f1ef286146100875780635c60da1b146101075780638f28397014610138578063f851a4401461016b575b610052610180565b005b34801561006057600080fd5b506100526004803603602081101561007757600080fd5b50356001600160a01b031661019a565b6100526004803603604081101561009d57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100c857600080fd5b8201836020820111156100da57600080fd5b803590602001918460018302840111640100000000831117156100fc57600080fd5b5090925090506101cb565b34801561011357600080fd5b5061011c61026f565b604080516001600160a01b039092168252519081900360200190f35b34801561014457600080fd5b506100526004803603602081101561015b57600080fd5b50356001600160a01b031661027e565b34801561017757600080fd5b5061011c61033c565b610188610198565b610198610193610346565b61036b565b565b6101a261038f565b6001600160a01b0316336001600160a01b0316146101bf57600080fd5b6101c8816103b4565b50565b6101d361038f565b6001600160a01b0316336001600160a01b0316146101f057600080fd5b6101f9836103b4565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610256576040519150601f19603f3d011682016040523d82523d6000602084013e61025b565b606091505b505090508061026957600080fd5b50505050565b6000610279610346565b905090565b61028661038f565b6001600160a01b0316336001600160a01b0316146102a357600080fd5b6001600160a01b0381166102e85760405162461bcd60e51b81526004018080602001828103825260368152602001806104876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61031161038f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101c8816103f4565b600061027961038f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6103bd81610418565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b61042181610480565b61045c5760405162461bcd60e51b815260040180806020018281038252603b8152602001806104bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3b15159056fe43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a265627a7a72305820a9aab4b95b654a79b32f5aa284796894f8329aaa083932695296085b196c27bd64736f6c634300050a0032b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc43616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000000000000000005000000000000000000000000000000000000000000000000000000000000000b03a86b3126157c039b55e21d378587ccfc04d45" + }, + "0x5000000000000000000000000000000000000000": { + "balance": "0", + "constructor": "0x608060405234801561001057600080fd5b50610616806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80635d6067d01161005b5780635d6067d014610189578063cc1d4c02146101f9578063dfc8bf4e1461021f578063e8e23ac0146102435761007d565b806305f203d914610082578063392e53cd146100f4578063462d0b2e14610110575b600080fd5b6100f26004803603602081101561009857600080fd5b8101906020810181356401000000008111156100b357600080fd5b8201836020820111156100c557600080fd5b803590602001918460208302840111640100000000831117156100e757600080fd5b509092509050610269565b005b6100fc61033e565b604080519115158252519081900360200190f35b6100f26004803603604081101561012657600080fd5b81019060208101813564010000000081111561014157600080fd5b82018360208201111561015357600080fd5b8035906020019184602083028401116401000000008311171561017557600080fd5b9193509150356001600160a01b031661034f565b6100f26004803603602081101561019f57600080fd5b8101906020810181356401000000008111156101ba57600080fd5b8201836020820111156101cc57600080fd5b803590602001918460208302840111640100000000831117156101ee57600080fd5b5090925090506103fe565b6100fc6004803603602081101561020f57600080fd5b50356001600160a01b0316610456565b61022761050a565b604080516001600160a01b039092168252519081900360200190f35b6100fc6004803603602081101561025957600080fd5b50356001600160a01b0316610519565b610271610537565b6001600160a01b0316336001600160a01b03161461028e57600080fd5b61029661033e565b61029f57600080fd5b60005b818110156103395760008383838181106102b857fe5b602090810292909201356001600160a01b03166000818152928390526040909220549192505060ff166102ea57600080fd5b6001600160a01b038116600081815260208190526040808220805460ff19169055517fb6fa8b8bd5eab60f292eca876e3ef90722275b785309d84b1de113ce0b8c4e749190a2506001016102a2565b505050565b6001546001600160a01b0316151590565b431580610374575061035f610537565b6001600160a01b0316336001600160a01b0316145b61037d57600080fd5b61038561033e565b1561038f57600080fd5b6001600160a01b0381166103a257600080fd5b60005b828110156103d9576103d18484838181106103bc57fe5b905060200201356001600160a01b031661055c565b6001016103a5565b50600180546001600160a01b0319166001600160a01b03929092169190911790555050565b610406610537565b6001600160a01b0316336001600160a01b03161461042357600080fd5b61042b61033e565b61043457600080fd5b60005b818110156103395761044e8383838181106103bc57fe5b600101610437565b6001600160a01b03811660009081526020819052604081205460ff161561047f57506001610505565b6001805460408051639184d0ad60e01b81526001600160a01b038681166004830152602482019490945290519290911691639184d0ad91604480820192602092909190829003018186803b1580156104d657600080fd5b505afa1580156104ea573d6000803e3d6000fd5b505050506040513d602081101561050057600080fd5b505190505b919050565b6001546001600160a01b031681565b6001600160a01b031660009081526020819052604090205460ff1690565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6001600160a01b03811661056f57600080fd5b6001600160a01b03811660009081526020819052604090205460ff161561059557600080fd5b6001600160a01b038116600081815260208190526040808220805460ff19166001179055517fd415b905d4dd806bfba99a7a0e6351bd0c9db3a9912add21c0e6bef4479f673f9190a25056fea265627a7a72305820f80f64fde129011b547316cf9ce9cd58a9917ae771746100649cc2e4b3ba4edf64736f6c634300050a0032" + }, + "0x6100000000000000000000000000000000000001": { + "balance": "0", + "constructor": "0x60806040526040516108053803806108058339818101604052604081101561002657600080fd5b50805160209182015160408051600081529384018082527f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000905251603c81850301902091929091839190600019016000805160206107aa8339815191521461008a57fe5b61009c826001600160e01b036101bd16565b805115610154576000826001600160a01b0316826040518082805190602001908083835b602083106100df5780518252601f1990920191602091820191016100c0565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461013f576040519150601f19603f3d011682016040523d82523d6000602084013e610144565b606091505b505090508061015257600080fd5b505b5050604080517f656970313936372e70726f78792e61646d696e000000000000000000000000008152905190819003601301902060008051602061078a833981519152600019909101146101a457fe5b6101b6816001600160e01b0361023716565b505061024f565b6101d08161024960201b6104801760201c565b610225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806107ca603b913960400191505060405180910390fd5b6000805160206107aa83398151915255565b60008051602061078a83398151915255565b3b151590565b61052c8061025e6000396000f3fe60806040526004361061004a5760003560e01c80633659cfe6146100545780634f1ef286146100875780635c60da1b146101075780638f28397014610138578063f851a4401461016b575b610052610180565b005b34801561006057600080fd5b506100526004803603602081101561007757600080fd5b50356001600160a01b031661019a565b6100526004803603604081101561009d57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100c857600080fd5b8201836020820111156100da57600080fd5b803590602001918460018302840111640100000000831117156100fc57600080fd5b5090925090506101cb565b34801561011357600080fd5b5061011c61026f565b604080516001600160a01b039092168252519081900360200190f35b34801561014457600080fd5b506100526004803603602081101561015b57600080fd5b50356001600160a01b031661027e565b34801561017757600080fd5b5061011c61033c565b610188610198565b610198610193610346565b61036b565b565b6101a261038f565b6001600160a01b0316336001600160a01b0316146101bf57600080fd5b6101c8816103b4565b50565b6101d361038f565b6001600160a01b0316336001600160a01b0316146101f057600080fd5b6101f9836103b4565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610256576040519150601f19603f3d011682016040523d82523d6000602084013e61025b565b606091505b505090508061026957600080fd5b50505050565b6000610279610346565b905090565b61028661038f565b6001600160a01b0316336001600160a01b0316146102a357600080fd5b6001600160a01b0381166102e85760405162461bcd60e51b81526004018080602001828103825260368152602001806104876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61031161038f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101c8816103f4565b600061027961038f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6103bd81610418565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b61042181610480565b61045c5760405162461bcd60e51b815260040180806020018281038252603b8152602001806104bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3b15159056fe43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a265627a7a72305820a9aab4b95b654a79b32f5aa284796894f8329aaa083932695296085b196c27bd64736f6c634300050a0032b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc43616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000000000000000006100000000000000000000000000000000000000000000000000000000000000b03a86b3126157c039b55e21d378587ccfc04d45" + }, + "0x6100000000000000000000000000000000000000": { + "balance": "0", + "constructor": "0x608060405234801561001057600080fd5b50611976806100206000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063b1724b46116100f9578063dfc8bf4e11610097578063f1854e1911610071578063f1854e1914610498578063f9d5ee75146104b5578063fc87bc9e14610531578063ff1ad2d91461054e576101c4565b8063dfc8bf4e1461044f578063e523d61c14610473578063e852faad14610490576101c4565b8063bf8b68da116100d3578063bf8b68da146103d2578063c342a7bf146103ef578063c4d66de81461040c578063cd2ecdf314610432576101c4565b8063b1724b461461039f578063b384abef146103a7578063b6a6d177146103ca576101c4565b80633b79f1a511610166578063518d9fca11610140578063518d9fca1461031757806382c4c9631461033457806388cb91b614610365578063a7debe9d14610382576101c4565b80633b79f1a5146102c057806340e58ee5146102dd5780634e7b4366146102fa576101c4565b8063260f08ad116101a2578063260f08ad1461024c578063280ad39a1461026957806332eac267146102865780633381afbd146102a3576101c4565b806305261aea146101c95780630d13a1c1146101e85780630f045f691461021d575b600080fd5b6101e6600480360360208110156101df57600080fd5b503561056b565b005b61020b600480360360408110156101fe57600080fd5b5080359060200135610589565b60408051918252519081900360200190f35b6101e66004803603608081101561023357600080fd5b50803590602081013590604081013590606001356105a6565b61020b6004803603602081101561026257600080fd5b5035610c1f565b61020b6004803603602081101561027f57600080fd5b5035610c31565b61020b6004803603602081101561029c57600080fd5b5035610c43565b61020b600480360360208110156102b957600080fd5b5035610c55565b61020b600480360360208110156102d657600080fd5b5035610c67565b6101e6600480360360208110156102f357600080fd5b5035610c79565b61020b6004803603602081101561031057600080fd5b5035610e61565b61020b6004803603602081101561032d57600080fd5b5035610e73565b6103516004803603602081101561034a57600080fd5b5035610e85565b604080519115158252519081900360200190f35b61020b6004803603602081101561037b57600080fd5b50356110e8565b61020b6004803603602081101561039857600080fd5b50356110fa565b61020b61110c565b6101e6600480360360408110156103bd57600080fd5b5080359060200135611113565b61020b611375565b61020b600480360360208110156103e857600080fd5b503561137b565b61020b6004803603602081101561040557600080fd5b503561138d565b6101e66004803603602081101561042257600080fd5b50356001600160a01b031661139f565b6103516004803603602081101561044857600080fd5b503561141f565b6104576114e2565b604080516001600160a01b039092168252519081900360200190f35b61020b6004803603602081101561048957600080fd5b50356114f1565b61020b611503565b61020b600480360360208110156104ae57600080fd5b5035611509565b6104d2600480360360208110156104cb57600080fd5b503561151b565b604080519c8d5260208d019b909b528b8b019990995260608b019790975260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083015251908190036101800190f35b61020b6004803603602081101561054757600080fd5b5035611607565b61020b6004803603602081101561056457600080fd5b5035611619565b61057481610e85565b61057d57600080fd5b6105868161162b565b50565b600f60209081526000928352604080842090915290825290205481565b6011546040805163a26301f960e01b815233600482015290516000926001600160a01b03169163a26301f9916024808301926020929190829003018186803b1580156105f157600080fd5b505afa158015610605573d6000803e3d6000fd5b505050506040513d602081101561061b57600080fd5b505160115460408051639b4a14bf60e01b81526004810189905290519293506001600160a01b0390911691639b4a14bf91602480820192602092909190829003018186803b15801561066c57600080fd5b505afa158015610680573d6000803e3d6000fd5b505050506040513d602081101561069657600080fd5b50516106a157600080fd5b60115460408051639b4a14bf60e01b81526004810184905290516001600160a01b0390921691639b4a14bf91602480820192602092909190829003018186803b1580156106ed57600080fd5b505afa158015610701573d6000803e3d6000fd5b505050506040513d602081101561071757600080fd5b505161072257600080fd5b8085141561072f57600080fd5b6000858152602081905260409020541561074857600080fd5b60115460408051637f2a23bf60e11b815290516000926001600160a01b03169163fe54477e9160048083019286929190829003018186803b15801561078c57600080fd5b505afa1580156107a0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156107c957600080fd5b8101908080516401000000008111156107e157600080fd5b820160208101848111156107f457600080fd5b815185602082028301116401000000008211171561081157600080fd5b50505160008681526001602081905260409091208054918201905590945060038504935083119150610844905057600080fd5b61438086101561085357600080fd5b6201518086111561086357600080fd5b716f6674656e20626c6f636b2064656c61797360701b8514806108995750706f6674656e20626c6f636b20736b69707360781b85145b806108b85750716f6674656e2072657665616c20736b69707360701b85145b806108cf5750691d5b9c995d99585b195960b21b85145b6108d857600080fd5b601080546001019081905560006108fd886108f1611810565b9063ffffffff61181416565b60008381526002602090815260408083208d90556003825280832089905560048083528184208590556011548251633ba6481760e21b81529251959650600c956001600160a01b039091169363ee99205c938084019391929190829003018186803b15801561096b57600080fd5b505afa15801561097f573d6000803e3d6000fd5b505050506040513d602081101561099557600080fd5b50516040805163d609ea9360e01b815290519192506000916001600160a01b0384169163d609ea93916004808301926020929190829003018186803b1580156109dd57600080fd5b505afa1580156109f1573d6000803e3d6000fd5b505050506040513d6020811015610a0757600080fd5b50516040805163461121d760e11b815290519192506000916001600160a01b03851691638c2243ae916004808301926020929190829003018186803b158015610a4f57600080fd5b505afa158015610a63573d6000803e3d6000fd5b505050506040513d6020811015610a7957600080fd5b5051905080851115610aaf57610aac60016108f1868186610aa08b8863ffffffff61182f16565b9063ffffffff61184416565b93505b610ac3816108f1868563ffffffff61186616565b600087815260056020526040902055610af7816108f184610aeb88600c63ffffffff61182f16565b9063ffffffff61186616565b6006600088815260200190815260200160002081905550826001600160a01b031663794c0c686040518163ffffffff1660e01b815260040160206040518083038186803b158015610b4757600080fd5b505afa158015610b5b573d6000803e3d6000fd5b505050506040513d6020811015610b7157600080fd5b50516000878152600a6020908152604080832093909355600781528282208e90556009905220600190555060029250869150610baa9050565b6000848152600b60209081526040808320949093046001019093558b81529182905290208290558515610be157610be18287611113565b6040805183815290517f06acbfb32bcf8383f3b0a768b70ac9ec234ea0f2d3b9c77fa6a2de69b919aad19181900360200190a1505050505050505050565b60006020819052908152604090205481565b60036020526000908152604090205481565b600e6020526000908152604090205481565b60076020526000908152604090205481565b60026020526000908152604090205481565b6011546040805163a26301f960e01b815233600482015290516000926001600160a01b03169163a26301f9916024808301926020929190829003018186803b158015610cc457600080fd5b505afa158015610cd8573d6000803e3d6000fd5b505050506040513d6020811015610cee57600080fd5b50516000838152600360205260409020549091508114610d0d57600080fd5b600082815260096020526040902054600114610d2857600080fd5b600082815260046020526040902054610d3f611810565b10610d4957600080fd5b60115460408051639b4a14bf60e01b81526004810184905290516001600160a01b0390921691639b4a14bf91602480820192602092909190829003018186803b158015610d9557600080fd5b505afa158015610da9573d6000803e3d6000fd5b505050506040513d6020811015610dbf57600080fd5b5051610dca57600080fd5b60008281526009602090815260408083206003905583835260019182905290912054610dfb9163ffffffff61182f16565b6000828152600160209081526040808320939093558482526002815282822054808352828252838320929092558251858152925191927f829a8683c544ad289ce92d3ce06e9ebad69b18a6916e60ec766c2c217461d8e9929081900390910190a1505050565b600d6020526000908152604090205481565b60086020526000908152604090205481565b600081815260096020526040812054600114610ea3575060006110e3565b600082815260046020526040902054610eba611810565b10610ec7575060016110e3565b6000828152600a6020908152604091829020546011548351633ba6481760e21b8152935191936001600160a01b039091169263ee99205c92600480840193829003018186803b158015610f1957600080fd5b505afa158015610f2d573d6000803e3d6000fd5b505050506040513d6020811015610f4357600080fd5b505160408051630f29818d60e31b815290516001600160a01b039092169163794c0c6891600480820192602092909190829003018186803b158015610f8757600080fd5b505afa158015610f9b573d6000803e3d6000fd5b505050506040513d6020811015610fb157600080fd5b505114156110df576000828152600c6020908152604080832054600d835281842054600e909352818420546011548351637f2a23bf60e11b815293519295919391926001600160a01b039091169163fe54477e9160048083019286929190829003018186803b15801561102357600080fd5b505afa158015611037573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561106057600080fd5b81019080805164010000000081111561107857600080fd5b8201602081018481111561108b57600080fd5b81518560208202830111640100000000821117156110a857600080fd5b50505193508392506110c891508490506108f1878763ffffffff61181416565b106110da5760019450505050506110e3565b505050505b5060005b919050565b60016020526000908152604090205481565b60066020526000908152604090205481565b6201518081565b60008281526003602052604090205461112b57600080fd5b6011546040805163a26301f960e01b815233600482015290516000926001600160a01b03169163a26301f9916024808301926020929190829003018186803b15801561117657600080fd5b505afa15801561118a573d6000803e3d6000fd5b505050506040513d60208110156111a057600080fd5b505160115460408051639b4a14bf60e01b81526004810184905290519293506001600160a01b0390911691639b4a14bf91602480820192602092909190829003018186803b1580156111f157600080fd5b505afa158015611205573d6000803e3d6000fd5b505050506040513d602081101561121b57600080fd5b505161122657600080fd5b60008381526002602052604090205481141561124157600080fd5b60008381526009602052604090205460011461125c57600080fd5b600083815260046020526040902054611273611810565b1061127d57600080fd5b6000838152600f60209081526040808320848452909152902054156112a157600080fd5b6000838152600f60209081526040808320848452909152902082905560018214156112e0576000838152600c6020526040902080546001019055611322565b6002821415611303576000838152600d6020526040902080546001019055611322565b60038214156101c4576000838152600e60205260409020805460010190555b604080518381529051829185917f5fe8f1cc066896edbe87bedf2e870c54f6311a7d6668c860949e2e1224a0955e9181900360200190a361136283610e85565b15611370576113708361162b565b505050565b61438081565b600a6020526000908152604090205481565b60046020526000908152604090205481565b6113a7611810565b15806113cb57506113b661188d565b6001600160a01b0316336001600160a01b0316145b6113d457600080fd5b6011546001600160a01b0316156113ea57600080fd5b6001600160a01b0381166113fd57600080fd5b601180546001600160a01b0319166001600160a01b0392909216919091179055565b60008181526020819052604081205480158061144a5750600081815260096020526040902054600114155b156114595760009150506110e3565b600081815260046020526040902054611470611810565b10156114805760019150506110e3565b600061148b826118b2565b905060028114156114b8576000828152600660205260409020546114ad611810565b1115925050506110e3565b60038114156114d8576000828152600560205260409020546114ad611810565b5060009392505050565b6011546001600160a01b031681565b60056020526000908152604090205481565b60105481565b600c6020526000908152604090205481565b60008181526002602090815260408083205460038352818420546004845282852054600585528386205460068652848720546007875285882054600988528689205460089098529588205494979396929591949093919291908190819081908190156115955760008d81526008602052604090205461159e565b61159e8d6118b2565b9450600b60008e8152602001908152602001600020549350600c60008e8152602001908152602001600020549250600d60008e8152602001908152602001600020549150600e60008e815260200190815260200160002054905091939597999b5091939597999b565b600b6020526000908152604090205481565b60096020526000908152604090205481565b6011546001600160a01b031661164057600080fd5b600061164b826118b2565b600083815260036020908152604080832054600283528184205460088452828520869055818552600193849052919093205493945091926116919163ffffffff61182f16565b60008381526001602052604090205560028314156117355760115460008581526006602090815260408083205460079092528083205481516305461c8560e01b81526004810187905260248101939093526044830152516001600160a01b03909316926305461c859260648084019391929182900301818387803b15801561171857600080fd5b505af115801561172c573d6000803e3d6000fd5b505050506117c6565b60038314156117c65760115460008581526005602090815260408083205460079092528083205481516305461c8560e01b81526004810187905260248101939093526044830152516001600160a01b03909316926305461c859260648084019391929182900301818387803b1580156117ad57600080fd5b505af11580156117c1573d6000803e3d6000fd5b505050505b60008181526020818152604080832092909255815186815291517f839cf22e1ba87ce2f5b9bbf46cf0175a09eed52febdfaac8852478e68203c7639281900390910190a150505050565b4390565b60008282018381101561182657600080fd5b90505b92915050565b60008282111561183e57600080fd5b50900390565b600080821161185257600080fd5b600082848161185d57fe5b04949350505050565b60008261187557506000611829565b8282028284828161188257fe5b041461182657600080fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6000818152600c6020908152604080832054600d835281842054600e845282852054600b909452918420549092906118f4826108f1868663ffffffff61181416565b101561190657600193505050506110e3565b600181831115611921578383111561191c575060025b611938565b828211801561192f57508382115b15611938575060035b9594505050505056fea265627a7a723058200623ccf119f7da78633edc0832418c3a32f1244627f261a1dc1d135e3ceccba164736f6c634300050a0032" + }, + "0x6000000000000000000000000000000000000000": { + "balance": "0", + "constructor": "0x6080604052600080546001600160a01b03191633179055670de0b6b3a764000060035534801561002e57600080fd5b506040516120943803806120948339818101604052604081101561005157600080fd5b5080516020909101516001600160a01b03821661006d57600080fd5b604080517f736572766963655f7472616e73616374696f6e5f636865636b657200000000008152905190819003601b019020336001600160a01b038316156100cd5750600080546001600160a01b0319166001600160a01b038416179055815b600082815260016020819052604080832080546001600160a01b0386166001600160a01b03199091168117825582517f4100000000000000000000000000000000000000000000000000000000000000815260029092019382019390935290519081900360210181206001600160601b0319606089901b169055909184917f4963513eca575aba66fdcd25f267aae85958fe6fb97e75fa25d783f1a091a2219190a36040805181815260018183018190527f41000000000000000000000000000000000000000000000000000000000000006060830181905260806020840181905283019190915260a0820152905183917fb829c3e412537bbe794c048ccb9e4605bb4aaaa8e4d4c15c1a6e0c2adc1716ea919081900360c00190a250505050611e98806101fc6000396000f3fe60806040526004361061014b5760003560e01c80639890220b116100b6578063df57b7421161006f578063df57b742146105e6578063e30bd74014610610578063eadf9760146106b8578063ef5454d61461073a578063f25eb5c1146107be578063f6d339e4146107d35761014b565b80639890220b146104e4578063ac4e73f9146104f9578063ac72c1201461057d578063c3a3582514610426578063ddca3f43146105a7578063deb931a2146105bc5761014b565b80636795dbcd116101085780636795dbcd1461031057806369fe0e2d146103ae57806379ce9fac146103d85780638da5cb5b1461041157806390b97fc11461042657806392698814146104ba5761014b565b806306b2ff471461015057806313af40351461019757806319362a28146101cc5780633f3935d11461024e578063432ced04146102c95780634f39ca59146102e6575b600080fd5b34801561015c57600080fd5b506101836004803603602081101561017357600080fd5b50356001600160a01b031661085e565b604080519115158252519081900360200190f35b3480156101a357600080fd5b506101ca600480360360208110156101ba57600080fd5b50356001600160a01b031661088d565b005b3480156101d857600080fd5b50610183600480360360608110156101ef57600080fd5b81359190810190604081016020820135600160201b81111561021057600080fd5b82018360208201111561022257600080fd5b803590602001918460018302840111600160201b8311171561024357600080fd5b919350915035610912565b34801561025a57600080fd5b506101836004803603602081101561027157600080fd5b810190602081018135600160201b81111561028b57600080fd5b82018360208201111561029d57600080fd5b803590602001918460018302840111600160201b831117156102be57600080fd5b509092509050610a5b565b610183600480360360208110156102df57600080fd5b5035610be4565b3480156102f257600080fd5b506101836004803603602081101561030957600080fd5b5035610c91565b34801561031c57600080fd5b506103926004803603604081101561033357600080fd5b81359190810190604081016020820135600160201b81111561035457600080fd5b82018360208201111561036657600080fd5b803590602001918460018302840111600160201b8311171561038757600080fd5b509092509050610efa565b604080516001600160a01b039092168252519081900360200190f35b3480156103ba57600080fd5b50610183600480360360208110156103d157600080fd5b5035610f8c565b3480156103e457600080fd5b50610183600480360360408110156103fb57600080fd5b50803590602001356001600160a01b0316610fe4565b34801561041d57600080fd5b506103926110b4565b34801561043257600080fd5b506104a86004803603604081101561044957600080fd5b81359190810190604081016020820135600160201b81111561046a57600080fd5b82018360208201111561047c57600080fd5b803590602001918460018302840111600160201b8311171561049d57600080fd5b5090925090506110c3565b60408051918252519081900360200190f35b3480156104c657600080fd5b50610183600480360360208110156104dd57600080fd5b5035611152565b3480156104f057600080fd5b506101836111bb565b34801561050557600080fd5b506101836004803603604081101561051c57600080fd5b810190602081018135600160201b81111561053657600080fd5b82018360208201111561054857600080fd5b803590602001918460018302840111600160201b8311171561056957600080fd5b9193509150356001600160a01b031661123d565b34801561058957600080fd5b50610183600480360360208110156105a057600080fd5b5035611546565b3480156105b357600080fd5b506104a86115b3565b3480156105c857600080fd5b50610392600480360360208110156105df57600080fd5b50356115b9565b3480156105f257600080fd5b506103926004803603602081101561060957600080fd5b5035611620565b34801561061c57600080fd5b506106436004803603602081101561063357600080fd5b50356001600160a01b031661168b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561067d578181015183820152602001610665565b50505050905090810190601f1680156106aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156106c457600080fd5b50610183600480360360608110156106db57600080fd5b81359190810190604081016020820135600160201b8111156106fc57600080fd5b82018360208201111561070e57600080fd5b803590602001918460018302840111600160201b8311171561072f57600080fd5b919350915035611734565b34801561074657600080fd5b506101836004803603604081101561075d57600080fd5b810190602081018135600160201b81111561077757600080fd5b82018360208201111561078957600080fd5b803590602001918460018302840111600160201b831117156107aa57600080fd5b9193509150356001600160a01b0316611880565b3480156107ca57600080fd5b506101ca6119c4565b3480156107df57600080fd5b50610183600480360360608110156107f657600080fd5b81359190810190604081016020820135600160201b81111561081757600080fd5b82018360208201111561082957600080fd5b803590602001918460018302840111600160201b8311171561084a57600080fd5b9193509150356001600160a01b0316611c30565b6001600160a01b0316600090815260026020819052604090912054600181161561010002600019011604151590565b6000546001600160a01b031633146108a457600080fd5b6001600160a01b0381166108b757600080fd5b600080546040516001600160a01b03808516939216917f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b236491a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000848152600160208190526040822001548590600160a01b900460ff1615801561095357506000818152600160205260409020546001600160a01b031615155b61095c57600080fd5b60008681526001602052604090205486906001600160a01b0316331461098157600080fd5b83600160008981526020019081526020016000206002018787604051808383808284378083019250505092505050908152602001604051809103902081905550867fb829c3e412537bbe794c048ccb9e4605bb4aaaa8e4d4c15c1a6e0c2adc1716ea878789896040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a25060019695505050505050565b600082828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508451602080870191909120825260019081905260409091200154600160a01b900460ff161592505081159050610ae6575080516020808301919091206000908152600190915260409020546001600160a01b031615155b610aef57600080fd5b83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525084516020808701919091208252600190819052604090912001546001600160a01b031633149250610b5491505057600080fd5b336000908152600260205260409020610b6e908686611d8b565b50336001600160a01b03167f098ae8581bb8bd9af1beaf7f2e9f51f31a8e5a8bfada4e303a645d71d9c91920868660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2506001949350505050565b6000818152600160208190526040822001548290600160a01b900460ff16158015610c2457506000818152600160205260409020546001600160a01b0316155b610c2d57600080fd5b600354341015610c3c57600080fd5b60008381526001602052604080822080546001600160a01b031916339081179091559051909185917f4963513eca575aba66fdcd25f267aae85958fe6fb97e75fa25d783f1a091a2219190a350600192915050565b6000818152600160208190526040822001548290600160a01b900460ff16158015610cd257506000818152600160205260409020546001600160a01b031615155b610cdb57600080fd5b60008381526001602052604090205483906001600160a01b03163314610d0057600080fd5b60008481526001602081815260408084208301546001600160a01b03168452600291829052928390209251835488949391928392859260001991811615610100029190910116048015610d8a5780601f10610d68576101008083540402835291820191610d8a565b820191906000526020600020905b815481529060010190602001808311610d76575b505091505060405180910390201415610ea25760008481526001602081815260408084208301546001600160a01b03168085526002808452948290208251848152815460001996811615610100029690960190951695909504928401839052937f12491ad95fd945e444d88a894ffad3c21959880a4dcd8af99d4ae4ffc71d4abd939092909182919082019084908015610e655780601f10610e3a57610100808354040283529160200191610e65565b820191906000526020600020905b815481529060010190602001808311610e4857829003601f168201915b50509250505060405180910390a26000848152600160208181526040808420909201546001600160a01b03168352600290528120610ea291611e09565b6000848152600160208190526040808320909101805460ff60a01b1916600160a01b17905551339186917fef1961b4d2909dc23643b309bfe5c3e5646842d98c3a58517037ef3871185af39190a35060019392505050565b6000838152600160208190526040822001548490600160a01b900460ff16158015610f3b57506000818152600160205260409020546001600160a01b031615155b610f4457600080fd5b60016000868152602001908152602001600020600201848460405180838380828437919091019485525050604051928390036020019092205460601c93505050509392505050565b600080546001600160a01b03163314610fa457600080fd5b60038290556040805183815290517f6bbc57480a46553fa4d156ce702beef5f3ad66303b0ed1a5d4cb44966c6584c39181900360200190a1506001919050565b6000828152600160208190526040822001548390600160a01b900460ff1615801561102557506000818152600160205260409020546001600160a01b031615155b61102e57600080fd5b60008481526001602052604090205484906001600160a01b0316331461105357600080fd5b60008581526001602052604080822080546001600160a01b0319166001600160a01b03881690811790915590519091339188917f7b97c62130aa09acbbcbf7482630e756592496f1759eaf702f469cf64dfb779491a4506001949350505050565b6000546001600160a01b031681565b6000838152600160208190526040822001548490600160a01b900460ff1615801561110457506000818152600160205260409020546001600160a01b031615155b61110d57600080fd5b60016000868152602001908152602001600020600201848460405180838380828437919091019485525050604051928390036020019092205493505050509392505050565b6000818152600160208190526040822001548290600160a01b900460ff1615801561119357506000818152600160205260409020546001600160a01b031615155b61119c57600080fd5b50506000908152600160205260409020546001600160a01b0316151590565b600080546001600160a01b031633146111d357600080fd5b604080513031815290517fdef931299fe61d176f949118058530c1f3f539dcb6950b4e372c9b835c33ca079181900360200190a16040513390303180156108fc02916000818181858888f19350505050158015611234573d6000803e3d6000fd5b50600190505b90565b600083838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508451602080870191909120825260019081905260409091200154600160a01b900460ff1615925050811590506112c8575080516020808301919091206000908152600190915260409020546001600160a01b031615155b6112d157600080fd5b8484604051808383808284376040805193909101839003909220600081815260016020529290922054919450506001600160a01b031633149150611316905057600080fd5b60008686604051808383808284376040805191909301819003902060008181526001602081905293902090920154919550506001600160a01b0316158015935091506113f89050575060008181526001602081815260408084208301546001600160a01b031684526002918290529283902092518354859493919283928592600019918116156101000291909101160480156113e95780601f106113c75761010080835404028352918201916113e9565b820191906000526020600020905b8154815290600101906020018083116113d5575b50509150506040518091039020145b156114aa576000818152600160208181526040808420909201546001600160a01b0316835260029052812061142c91611e09565b6000818152600160208181526040928390209091015482518281529182018990526001600160a01b0316917f12491ad95fd945e444d88a894ffad3c21959880a4dcd8af99d4ae4ffc71d4abd918a918a919081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a25b60008181526001602081815260409283902090910180546001600160a01b0319166001600160a01b0389169081179091558251828152918201899052917f728435a0031f6a04538fcdd24922a7e06bc7bc945db03e83d22122d1bc5f28df918a918a919081908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a25060019695505050505050565b6000818152600160208190526040822001548290600160a01b900460ff1615801561158757506000818152600160205260409020546001600160a01b031615155b61159057600080fd5b5050600090815260016020819052604090912001546001600160a01b0316151590565b60035481565b6000818152600160208190526040822001548290600160a01b900460ff161580156115fa57506000818152600160205260409020546001600160a01b031615155b61160357600080fd5b50506000908152600160205260409020546001600160a01b031690565b6000818152600160208190526040822001548290600160a01b900460ff1615801561166157506000818152600160205260409020546001600160a01b031615155b61166a57600080fd5b5050600090815260016020819052604090912001546001600160a01b031690565b6001600160a01b038116600090815260026020818152604092839020805484516001821615610100026000190190911693909304601f810183900483028401830190945283835260609390918301828280156117285780601f106116fd57610100808354040283529160200191611728565b820191906000526020600020905b81548152906001019060200180831161170b57829003601f168201915b50505050509050919050565b6000848152600160208190526040822001548590600160a01b900460ff1615801561177557506000818152600160205260409020546001600160a01b031615155b61177e57600080fd5b60008681526001602052604090205486906001600160a01b031633146117a357600080fd5b8360001b600160008981526020019081526020016000206002018787604051808383808284378083019250505092505050908152602001604051809103902081905550867fb829c3e412537bbe794c048ccb9e4605bb4aaaa8e4d4c15c1a6e0c2adc1716ea878789896040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a25060019695505050505050565b600083838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508451602080870191909120825260019081905260409091200154600160a01b900460ff16159250508115905061190b575080516020808301919091206000908152600190915260409020546001600160a01b031615155b61191457600080fd5b6000546001600160a01b0316331461192b57600080fd5b6001600160a01b038316600090815260026020526040902061194e908686611d8b565b50826001600160a01b03167f098ae8581bb8bd9af1beaf7f2e9f51f31a8e5a8bfada4e303a645d71d9c91920868660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2506001949350505050565b33600090815260026020818152604092839020805484516001821615610100026000190190911693909304601f8101839004830284018301909452838352919290830182828015611a565780601f10611a2b57610100808354040283529160200191611a56565b820191906000526020600020905b815481529060010190602001808311611a3957829003601f168201915b5050505050600160008280519060200120815260200190815260200160002060010160149054906101000a900460ff16158015611ab4575080516020808301919091206000908152600190915260409020546001600160a01b031615155b611abd57600080fd5b33600081815260026020818152604092839020835182815281546000196101006001831615020116939093049183018290527f12491ad95fd945e444d88a894ffad3c21959880a4dcd8af99d4ae4ffc71d4abd93909291829182019084908015611b685780601f10611b3d57610100808354040283529160200191611b68565b820191906000526020600020905b815481529060010190602001808311611b4b57829003601f168201915b50509250505060405180910390a2336000908152600260208190526040808320905181546001949382918491600019610100838a16150201909116048015611be75780601f10611bc5576101008083540402835291820191611be7565b820191906000526020600020905b815481529060010190602001808311611bd3575b505060408051918290039091208452602080850195909552928301600090812060010180546001600160a01b0319169055338152600290945250508120611c2d91611e09565b50565b6000848152600160208190526040822001548590600160a01b900460ff16158015611c7157506000818152600160205260409020546001600160a01b031615155b611c7a57600080fd5b60008681526001602052604090205486906001600160a01b03163314611c9f57600080fd5b8360601b6bffffffffffffffffffffffff1916600160008981526020019081526020016000206002018787604051808383808284378083019250505092505050908152602001604051809103902081905550867fb829c3e412537bbe794c048ccb9e4605bb4aaaa8e4d4c15c1a6e0c2adc1716ea878789896040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a25060019695505050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611dcc5782800160ff19823516178555611df9565b82800160010185558215611df9579182015b82811115611df9578235825591602001919060010190611dde565b50611e05929150611e49565b5090565b50805460018160011615610100020316600290046000825580601f10611e2f5750611c2d565b601f016020900490600052602060002090810190611c2d91905b61123a91905b80821115611e055760008155600101611e4f56fea265627a7a723058206a686f5fa03e765c624a73295db57b5403554102e83af1f6c94d41e196e3939564736f6c634300050a00320000000000000000000000005000000000000000000000000000000000000001000000000000000000000000b03a86b3126157c039b55e21d378587ccfc04d45" + }, + "0x7000000000000000000000000000000000000000": { + "balance": "0", + "constructor": "0x608060405234801561001057600080fd5b506040516109dd3803806109dd833981810160405261016081101561003457600080fd5b81019080805164010000000081111561004c57600080fd5b8201602081018481111561005f57600080fd5b815185602082028301116401000000008211171561007c57600080fd5b505060208201516040909201805191949293916401000000008111156100a157600080fd5b820160208101848111156100b457600080fd5b81518560208202830111640100000000821117156100d157600080fd5b505092919060200180516401000000008111156100ed57600080fd5b8201602081018481111561010057600080fd5b815185602082028301116401000000008211171561011d57600080fd5b5050602082015160408301516060840151608085015160a086015160c087015160e0909701518c51969950949750929591949093908b9060009061015d57fe5b60200260200101516001600160a01b0316636e85d53d8c60018151811061018057fe5b60200260200101518d60068151811061019557fe5b60200260200101518e6002815181106101aa57fe5b60200260200101518f6003815181106101bf57fe5b60200260200101518e8e8e6040518863ffffffff1660e01b815260040180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200184151515158152602001838103835286818151815260200191508051906020019060200280838360005b8381101561028757818101518382015260200161026f565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156102c65781810151838201526020016102ae565b505050509050019950505050505050505050600060405180830381600087803b1580156102f257600080fd5b505af1158015610306573d6000803e3d6000fd5b5050505060608851604051908082528060200260200182016040528015610337578160200160208202803883390190505b50905060005b8151811015610410578c60008151811061035357fe5b60200260200101516001600160a01b031663a26301f98b838151811061037557fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156103c357600080fd5b505afa1580156103d7573d6000803e3d6000fd5b505050506040513d60208110156103ed57600080fd5b505182518390839081106103fd57fe5b602090810291909101015260010161033d565b508b60038151811061041e57fe5b60200260200101516001600160a01b031663cc4a66678d60008151811061044157fe5b60200260200101518e60068151811061045657fe5b6020026020010151848b8b8b8b8b6040518963ffffffff1660e01b815260040180896001600160a01b03166001600160a01b03168152602001886001600160a01b03166001600160a01b0316815260200180602001878152602001868152602001858152602001848152602001838152602001828103825288818151815260200191508051906020019060200280838360005b838110156105015781810151838201526020016104e9565b505050509050019950505050505050505050600060405180830381600087803b15801561052d57600080fd5b505af1158015610541573d6000803e3d6000fd5b50505050508a60018151811061055357fe5b60200260200101516001600160a01b031663485cc9558c60008151811061057657fe5b602002602001015160006040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b1580156105e157600080fd5b505af11580156105f5573d6000803e3d6000fd5b505050508a60028151811061060657fe5b60200260200101516001600160a01b03166328804dbd828d60008151811061062a57fe5b602002602001015160016040518463ffffffff1660e01b815260040180848152602001836001600160a01b03166001600160a01b03168152602001821515151581526020019350505050600060405180830381600087803b15801561068e57600080fd5b505af11580156106a2573d6000803e3d6000fd5b5050604080516001808252818301909252606093509150602080830190803883390190505090508a816000815181106106d757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508b60048151811061070457fe5b60200260200101516001600160a01b03166390482d72828e60058151811061072857fe5b60200260200101518f60008151811061073d57fe5b60200260200101516040518463ffffffff1660e01b81526004018080602001846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828103825285818151815260200191508051906020019060200280838360005b838110156107c45781810151838201526020016107ac565b50505050905001945050505050600060405180830381600087803b1580156107eb57600080fd5b505af11580156107ff573d6000803e3d6000fd5b505050508b60058151811061081057fe5b60200260200101516001600160a01b031663462d0b2e828e60008151811061083457fe5b60200260200101516040518363ffffffff1660e01b81526004018080602001836001600160a01b03166001600160a01b03168152602001828103825284818151815260200191508051906020019060200280838360005b838110156108a357818101518382015260200161088b565b505050509050019350505050600060405180830381600087803b1580156108c957600080fd5b505af11580156108dd573d6000803e3d6000fd5b505050508b6006815181106108ee57fe5b60200260200101516001600160a01b031663c4d66de88d60008151811061091157fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561096157600080fd5b505af1158015610975573d6000803e3d6000fd5b5050505060004311156109855733ff5b505050505050505050505050603e8061099f6000396000f3fe6080604052600080fdfea265627a7a72305820a55f32c63be7e06dfeb1da79cfe2235ed39ef2873ad64c118154d8cdff8e697e64736f6c634300050a00320000000000000000000000000000000000000000000000000000000000000160000000000000000000000000b03a86b3126157c039b55e21d378587ccfc04d45000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000000000000000000004c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000070000000000000000000000001000000000000000000000000000000000000001000000000000000000000000200000000000000000000000000000000000000100000000000000000000000030000000000000000000000000000000000000010000000000000000000000001100000000000000000000000000000000000001000000000000000000000000400000000000000000000000000000000000000100000000000000000000000050000000000000000000000000000000000000010000000000000000000000006100000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000014747a698ec1227e6753026c08b29b4d5d3bc48400000000000000000000000056d421c0ac39976e89fa400d34ca6579417b84ca0000000000000000000000005cd99ac2f0f8c25a1e670f6bab19d52aad69d87500000000000000000000000060f1cf46b42df059b98acf67c1dd7771b100e124000000000000000000000000655e97ba0f63a56c2b56eb3e84f7bf42b20bae14000000000000000000000000755b6259938d140626301c0b6026c1c00c9ed5d9000000000000000000000000a8010da9cb0ac018c86a06301963853cc371a18c000000000000000000000000e11c7ffea05634889f39a1d997772b73adfd685b000000000000000000000000e621f323f5cb0ca55a041aeea0f025ce338b8aee000000000000000000000000f85bb4a67db28522644cbe63595d1665b64090ef000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000047200b51fcbf7177c24c1a484c960be8bf9abf00000000000000000000000001753f99abe0433fc81e396bc1bdabec6b0f1d49d0000000000000000000000001fd4b06403e95eb0114cb3e8f6b71f7a0cc58d7300000000000000000000000041bec4dcb8dd230cb4e077c5fda61d37798b06d90000000000000000000000004b56e96ad92b4d81f533c5716988f9f3665125d20000000000000000000000005d46a20c7e9bd3556e36d39ea1a931f9fe994519000000000000000000000000cc80dff6b6386b56213a9f2701a67ebeca0bbea8000000000000000000000000dc8a45c55f83ac461bc49662324d2ad2ea811e84000000000000000000000000dd3cd543a443bd405bfbea1165753794906bd994000000000000000000000000fdd90b7d2b52a6232675f54bb2f03a5dfb2e832a" + }, + "0xbabe2bed00000000000000000000000000000002": { + "balance": "0", + "constructor": "0x60806040523480156200001157600080fd5b5060405162001b8538038062001b8583398101604081905262000034916200037b565b6200003f83620000aa565b620000756040516200005190620001fa565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b5062000146565b81516200008a90600390602085019062000208565b508051620000a090600490602084019062000208565b5050505062000442565b6000620000b6620001db565b90506001600160a01b038216620000cc57600080fd5b816001600160a01b0316816001600160a01b03161415620000ec57600080fd5b60008051602062001b45833981519152829055604080516001600160a01b038084168252841660208201527f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b6001600160a01b0381166200015a57600080fd5b6001600160a01b0381166200017c60008051602062001b658339815191525490565b6001600160a01b031614156200019157600080fd5b60008051602062001b658339815191528190556040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000620001f560008051602062001b458339815191525490565b905090565b61126680620008df83390190565b828054620002169062000405565b90600052602060002090601f0160209004810192826200023a576000855562000285565b82601f106200025557805160ff191683800117855562000285565b8280016001018555821562000285579182015b828111156200028557825182559160200191906001019062000268565b506200029392915062000297565b5090565b5b8082111562000293576000815560010162000298565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002d657600080fd5b81516001600160401b0380821115620002f357620002f3620002ae565b604051601f8301601f19908116603f011681019082821181831017156200031e576200031e620002ae565b816040528381526020925086838588010111156200033b57600080fd5b600091505b838210156200035f578582018301518183018401529082019062000340565b83821115620003715760008385830101525b9695505050505050565b6000806000606084860312156200039157600080fd5b83516001600160a01b0381168114620003a957600080fd5b60208501519093506001600160401b0380821115620003c757600080fd5b620003d587838801620002c4565b93506040860151915080821115620003ec57600080fd5b50620003fb86828701620002c4565b9150509250925092565b600181811c908216806200041a57607f821691505b602082108114156200043c57634e487b7160e01b600052602260045260246000fd5b50919050565b61048d80620004526000396000f3fe60806040526004361061003f5760003560e01c80633659cfe6146100af5780635c60da1b146100d1578063704b6c021461012a578063f851a4401461014a575b60006100697f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff811661008b57600080fd5b3660008037600080366000845af43d6000803e8080156100aa573d6000f35b3d6000fd5b3480156100bb57600080fd5b506100cf6100ca36600461041a565b61015f565b005b3480156100dd57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b34801561013657600080fd5b506100cf61014536600461041a565b6101c4565b34801561015657600080fd5b50610101610226565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101b857600080fd5b6101c181610255565b50565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461021d57600080fd5b6101c18161033d565b60006102507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905090565b73ffffffffffffffffffffffffffffffffffffffff811661027557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166102b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff1614156102d557600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000610347610226565b905073ffffffffffffffffffffffffffffffffffffffff821661036957600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156103a257600080fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038290556040805173ffffffffffffffffffffffffffffffffffffffff8084168252841660208201527f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b60006020828403121561042c57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461045057600080fd5b939250505056fea264697066735822122097d86ab3fc05dd7aa2fa954f94bcb5b52cb229c19b25b78b4c717732b858440e64736f6c6343000809003360806040523480156200001157600080fd5b506040805160208082018084526000808452845192830190945292815281519192909162000042916003916200006b565b508051620000589060049060208401906200006b565b50506005805460ff19169055506200014e565b828054620000799062000111565b90600052602060002090601f0160209004810192826200009d5760008555620000e8565b82601f10620000b857805160ff1916838001178555620000e8565b82800160010185558215620000e8579182015b82811115620000e8578251825591602001919060010190620000cb565b50620000f6929150620000fa565b5090565b5b80821115620000f65760008155600101620000fb565b600181811c908216806200012657607f821691505b602082108114156200014857634e487b7160e01b600052602260045260246000fd5b50919050565b611108806200015e6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80635c975abb11610097578063a457c2d711610066578063a457c2d7146101fb578063a9059cbb1461020e578063dd62ed3e14610221578063f0df89e41461026757600080fd5b80635c975abb146101aa57806370a08231146101b55780638456cb59146101eb57806395d89b41146101f357600080fd5b8063313ce567116100d3578063313ce5671461016b578063395093511461017a5780633f4ba83a1461018d57806340c10f191461019757600080fd5b806306fdde0314610105578063095ea7b31461012357806318160ddd1461014657806323b872dd14610158575b600080fd5b61010d61027a565b60405161011a9190610ee8565b60405180910390f35b610136610131366004610f84565b61030c565b604051901515815260200161011a565b6002545b60405190815260200161011a565b610136610166366004610fae565b610322565b6040516012815260200161011a565b610136610188366004610f84565b61040d565b610195610456565b005b6101956101a5366004610f84565b6104b9565b60055460ff16610136565b61014a6101c3366004610fea565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610195610520565b61010d610581565b610136610209366004610f84565b610590565b61013661021c366004610f84565b610668565b61014a61022f36600461100c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b610195610275366004610f84565b610675565b6060600380546102899061103f565b80601f01602080910402602001604051908101604052809291908181526020018280546102b59061103f565b80156103025780601f106102d757610100808354040283529160200191610302565b820191906000526020600020905b8154815290600101906020018083116102e557829003601f168201915b5050505050905090565b6000610319338484610716565b50600192915050565b600061032f8484846108c9565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600160209081526040808320338452909152902054828110156103f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6104028533858403610716565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091610319918590610451908690611093565b610716565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104af57600080fd5b6104b7610b88565b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461051257600080fd5b61051c8282610c69565b5050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461057957600080fd5b6104b7610d95565b6060600480546102899061103f565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016103ec565b61065e3385858403610716565b5060019392505050565b60006103193384846108c9565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106ce57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054808211156107025780610704565b815b91506107118333846108c9565b505050565b73ffffffffffffffffffffffffffffffffffffffff83166107b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016103ec565b73ffffffffffffffffffffffffffffffffffffffff821661085b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016103ec565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016103ec565b73ffffffffffffffffffffffffffffffffffffffff8216610a0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016103ec565b610a1a838383610e55565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ad0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016103ec565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610b14908490611093565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b7a91815260200190565b60405180910390a350505050565b60055460ff16610bf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016103ec565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216610ce6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103ec565b610cf260008383610e55565b8060026000828254610d049190611093565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610d3e908490611093565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60055460ff1615610e02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016103ec565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c3f3390565b60055460ff1615610711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f45524332305061757361626c653a20746f6b656e207472616e7366657220776860448201527f696c65207061757365640000000000000000000000000000000000000000000060648201526084016103ec565b600060208083528351808285015260005b81811015610f1557858101830151858201604001528201610ef9565b81811115610f27576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f7f57600080fd5b919050565b60008060408385031215610f9757600080fd5b610fa083610f5b565b946020939093013593505050565b600080600060608486031215610fc357600080fd5b610fcc84610f5b565b9250610fda60208501610f5b565b9150604084013590509250925092565b600060208284031215610ffc57600080fd5b61100582610f5b565b9392505050565b6000806040838503121561101f57600080fd5b61102883610f5b565b915061103660208401610f5b565b90509250929050565b600181811c9082168061105357607f821691505b6020821081141561108d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082198211156110cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea2646970667358221220954a8093073e898b5a05c67a8a02accb8510a2022bd5292bd33dd875db9f954664736f6c63430008090033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc000000000000000000000000face2face0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000095374616b6520474e4f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003474e4f0000000000000000000000000000000000000000000000000000000000" + }, + "0xbabe2bed00000000000000000000000000000003": { + "balance": "0", + "constructor": "0x60806040523480156200001157600080fd5b50604051620042be380380620042be8339810160408190526200003491620002fe565b6200003f8262000183565b62000086816040516200005290620002d3565b6001600160a01b039091168152602001604051809103906000f0801580156200007f573d6000803e3d6000fd5b506200021f565b60005b62000097600160206200034c565b8110156200017a57600260018260208110620000b757620000b762000366565b015460018360208110620000cf57620000cf62000366565b015460408051602081019390935282015260600160408051601f1981840301815290829052620000ff916200037c565b602060405180830381855afa1580156200011d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190620001429190620003ba565b6001620001508382620003d4565b6020811062000163576200016362000366565b0155806200017181620003ef565b91505062000089565b5050506200040d565b60006200018f620002b4565b90506001600160a01b038216620001a557600080fd5b816001600160a01b0316816001600160a01b03161415620001c557600080fd5b6000805160206200427e833981519152829055604080516001600160a01b038084168252841660208201527f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b6001600160a01b0381166200023357600080fd5b6001600160a01b038116620002556000805160206200429e8339815191525490565b6001600160a01b031614156200026a57600080fd5b6000805160206200429e8339815191528190556040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000620002ce6000805160206200427e8339815191525490565b905090565b6139d480620008aa83390190565b80516001600160a01b0381168114620002f957600080fd5b919050565b600080604083850312156200031257600080fd5b6200031d83620002e1565b91506200032d60208401620002e1565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b60008282101562000361576200036162000336565b500390565b634e487b7160e01b600052603260045260246000fd5b6000825160005b818110156200039f576020818601810151858301520162000383565b81811115620003af576000828501525b509190910192915050565b600060208284031215620003cd57600080fd5b5051919050565b60008219821115620003ea57620003ea62000336565b500190565b600060001982141562000406576200040662000336565b5060010190565b61048d806200041d6000396000f3fe60806040526004361061003f5760003560e01c80633659cfe6146100af5780635c60da1b146100d1578063704b6c021461012a578063f851a4401461014a575b60006100697f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff811661008b57600080fd5b3660008037600080366000845af43d6000803e8080156100aa573d6000f35b3d6000fd5b3480156100bb57600080fd5b506100cf6100ca36600461041a565b61015f565b005b3480156100dd57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b34801561013657600080fd5b506100cf61014536600461041a565b6101c4565b34801561015657600080fd5b50610101610226565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101b857600080fd5b6101c181610255565b50565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461021d57600080fd5b6101c18161033d565b60006102507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905090565b73ffffffffffffffffffffffffffffffffffffffff811661027557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166102b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff1614156102d557600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000610347610226565b905073ffffffffffffffffffffffffffffffffffffffff821661036957600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156103a257600080fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038290556040805173ffffffffffffffffffffffffffffffffffffffff8084168252841660208201527f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b60006020828403121561042c57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461045057600080fd5b939250505056fea26469706673582212207747c650996bfd5b0a51931c0b302249e424b5fc2d92f1d2288b11d9e3956c8364736f6c6343000809003360a06040523480156200001157600080fd5b50604051620039d4380380620039d4833981016040819052620000349162000050565b6000805460ff191690556001600160a01b031660805262000082565b6000602082840312156200006357600080fd5b81516001600160a01b03811681146200007b57600080fd5b9392505050565b6080516138fe620000d6600039600081816101f10152818161047f0152818161062e015281816107d701528181610b8001528181610c2d015281816116a50152818161193601526119c701526138fe6000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c806379d0c0bc116100b2578063bb30b8fd11610081578063c5f2892f11610066578063c5f2892f146102bf578063c82655b7146102c7578063d74d11e9146102da57600080fd5b8063bb30b8fd1461028c578063be7ab51b1461029f57600080fd5b806379d0c0bc1461024b5780638456cb591461025e578063a3066aab14610266578063a4c0ed361461027957600080fd5b80634694bd1e11610109578063621fd130116100ee578063621fd130146101d7578063640415bf146101ec57806369ffa08a1461023857600080fd5b80634694bd1e146101b95780635c975abb146101cc57600080fd5b806301ffc9a71461013b5780630cac9f311461016357806324db4c46146101785780633f4ba83a146101b1575b600080fd5b61014e610149366004612dd3565b6102ed565b60405190151581526020015b60405180910390f35b610176610171366004612eef565b6103d2565b005b6101a3610186366004612f89565b805160208183018101805160428252928201919093012091525481565b60405190815260200161015a565b610176610525565b6101766101c7366004612fe8565b610588565b60005460ff1661014e565b6101df610753565b60405161015a9190613097565b6102137f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161015a565b610176610246366004612fe8565b610765565b6101766102593660046130f6565b6108a8565b610176610ac6565b610176610274366004613170565b610b27565b61014e6102873660046131cf565b610ba7565b61017661029a36600461322b565b6110c3565b6101a36102ad366004613170565b60436020526000908152604090205481565b6101a3611108565b6101766102d536600461326d565b611337565b6101766102e8366004613170565b6118ed565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000148061038057507fffffffff0000000000000000000000000000000000000000000000000000000082167fab41c72e00000000000000000000000000000000000000000000000000000000145b806103cc57507fffffffff0000000000000000000000000000000000000000000000000000000082167fa4c0ed3600000000000000000000000000000000000000000000000000000000145b92915050565b60005460ff1615610444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd90606401602060405180830381600087803b1580156104d857600080fd5b505af11580156104ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105109190613331565b5061051e85858585856119f1565b5050505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461057e57600080fd5b610586612474565b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105e157600080fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff808416916339f47693917f000000000000000000000000000000000000000000000000000000000000000091908516906370a082319060240160206040518083038186803b15801561067357600080fd5b505afa158015610687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ab9190613353565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381600087803b15801561071657600080fd5b505af115801561072a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074e9190613353565b505050565b6060610760604154612555565b905090565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107be57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16141561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4465706f736974436f6e74726163743a206e6f7420616c6c6f77656420746f2060448201527f636c61696d206465706f73697420746f6b656e00000000000000000000000000606482015260840161043b565b6108a482826127c9565b5050565b3373fffffffffffffffffffffffffffffffffffffffe148061091657507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6109c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f546869732066756e6374696f6e2073686f756c642062652063616c6c6564206f60448201527f6e6c792062792053595354454d5f5749544844524157414c5f4558454355544f60648201527f52206f72205f61646d696e282900000000000000000000000000000000000000608482015260a40161043b565b8281146109d7576109d761336c565b60005b83811015610abe57600060208686848181106109f8576109f861339b565b9050602002016020810190610a0d91906133ca565b610a259067ffffffffffffffff16633b9aca00613423565b610a2f919061348f565b90508060436000868686818110610a4857610a4861339b565b9050602002016020810190610a5d9190613170565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610aa691906134a3565b90915550610ab791508290506134bb565b90506109da565b505050505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b1f57600080fd5b6105866127f7565b73ffffffffffffffffffffffffffffffffffffffff811660009081526043602052604090205480156108a45773ffffffffffffffffffffffffffffffffffffffff8083166000908152604360205260408120556108a4907f00000000000000000000000000000000000000000000000000000000000000001683836128b7565b6000805460ff1615610c15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161043b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4465706f736974436f6e74726163743a206e6f742061206465706f736974207460448201527f6f6b656e00000000000000000000000000000000000000000000000000000000606482015260840161043b565b610ce460b0836134f4565b602014610d73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4465706f736974436f6e74726163743a20696e636f7272656374206465706f7360448201527f69742064617461206c656e677468000000000000000000000000000000000000606482015260840161043b565b6000610d8060b08461348f565b905060008111610e12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f42617463684465706f7369743a20596f752073686f756c64206465706f73697460448201527f206174206c65617374206f6e652076616c696461746f72000000000000000000606482015260840161043b565b846001821115610f58576080821115610ead576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f42617463684465706f7369743a20596f752063616e206465706f736974206d6160448201527f78203132382076616c696461746f727320617420612074696d65000000000000606482015260840161043b565b610ebf82670de0b6b3a7640000613423565b8614610f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f42617463684465706f7369743a206261746368206465706f736974732072657160448201527f75697265203120474e4f206465706f73697420616d6f756e7400000000000000606482015260840161043b565b50670de0b6b3a76400005b6000610f676020828789613508565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293506020925050505b858110156110b4576000878288610fba8260306134a3565b92610fc793929190613508565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509394508b92508a915061100d90508560306134a3565b906110198660906134a3565b9261102693929190613508565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509394508c92508b915061106c90508660906134a3565b906110788760b06134a3565b9261108593929190613508565b61108e91613532565b905061109d838684848a6119f1565b50505060b0816110ad91906134a3565b9050610fa2565b50600198975050505050505050565b60005b8181101561074e576110f88383838181106110e3576110e361339b565b90506020020160208101906102749190613170565b611101816134bb565b90506110c6565b6041546000908190815b60208110156112955781600116600114156111d15760026021826020811061113c5761113c61339b565b01546040805160208101929092528101859052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261118a9161356e565b602060405180830381855afa1580156111a7573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111ca9190613353565b9250611276565b600283600183602081106111e7576111e761339b565b0154604080516020810193909352820152606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112339161356e565b602060405180830381855afa158015611250573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906112739190613353565b92505b61128160028361348f565b91508061128d816134bb565b915050611112565b506002826112a4604154612555565b6040516112b892919060009060200161358a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f09161356e565b602060405180830381855afa15801561130d573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906113309190613353565b9250505090565b60005460ff16156113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161043b565b8080611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f42617463684465706f7369743a20596f752073686f756c64206465706f73697460448201527f206174206c65617374206f6e652076616c696461746f72000000000000000000606482015260840161043b565b60808111156114c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f42617463684465706f7369743a20596f752063616e206465706f736974206d6160448201527f78203132382076616c696461746f727320617420612074696d65000000000000606482015260840161043b565b6114ce816030613423565b881461155c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f42617463684465706f7369743a205075626b657920636f756e7420646f6e277460448201527f206d617463680000000000000000000000000000000000000000000000000000606482015260840161043b565b611567816060613423565b84146115f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f42617463684465706f7369743a205369676e61747572657320636f756e74206460448201527f6f6e2774206d6174636800000000000000000000000000000000000000000000606482015260840161043b565b60208614611685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f42617463684465706f7369743a205769746864726177616c2043726564656e7460448201527f69616c7320636f756e7420646f6e2774206d6174636800000000000000000000606482015260840161043b565b670de0b6b3a764000073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166323b872dd33306116d68686613423565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401602060405180830381600087803b15801561174a57600080fd5b505af115801561175e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117829190613331565b5060005b828110156118e05760008b8b61179d846030613423565b906117a98560016134a3565b6117b4906030613423565b926117c193929190613508565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509394508b92508a91506118079050856060613423565b906118138660016134a3565b61181e906060613423565b9261182b93929190613508565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090506118cd828c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508692508c91508b9050888181106118c0576118c061339b565b90506020020135886119f1565b5050806118d9906134bb565b9050611786565b5050505050505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526119ee90829073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561197857600080fd5b505afa15801561198c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b09190613353565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691906128b7565b50565b6119fc816020613423565b90508451603014611a8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4465706f736974436f6e74726163743a20696e76616c6964207075626b65792060448201527f6c656e6774680000000000000000000000000000000000000000000000000000606482015260840161043b565b8351602014611b20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4465706f736974436f6e74726163743a20696e76616c6964207769746864726160448201527f77616c5f63726564656e7469616c73206c656e67746800000000000000000000606482015260840161043b565b8251606014611bb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4465706f736974436f6e74726163743a20696e76616c6964207369676e61747560448201527f7265206c656e6774680000000000000000000000000000000000000000000000606482015260840161043b565b670de0b6b3a7640000811015611c49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4465706f736974436f6e74726163743a206465706f7369742076616c7565207460448201527f6f6f206c6f770000000000000000000000000000000000000000000000000000606482015260840161043b565b611c57633b9aca00826134f4565b15611ce4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4465706f736974436f6e74726163743a206465706f7369742076616c7565206e60448201527f6f74206d756c7469706c65206f66206777656900000000000000000000000000606482015260840161043b565b6000611cf4633b9aca008361348f565b905067ffffffffffffffff811115611d8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4465706f736974436f6e74726163743a206465706f7369742076616c7565207460448201527f6f6f206869676800000000000000000000000000000000000000000000000000606482015260840161043b565b6000611d9982612555565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c587878388611dcb604154612555565b604051611ddc9594939291906135de565b60405180910390a16000600288600060801b604051602001611dff92919061364b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e379161356e565b602060405180830381855afa158015611e54573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e779190613353565b9050600086806020019051810190611e8f9190613692565b90506000600280838360200201518460016020020151604051602001611ebf929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611ef79161356e565b602060405180830381855afa158015611f14573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611f379190613353565b60408481015181516020810191909152600081830152815180820383018152606090910191829052600291611f6c919061356e565b602060405180830381855afa158015611f89573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611fac9190613353565b604080516020810193909352820152606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611ff69161356e565b602060405180830381855afa158015612013573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906120369190613353565b90506000600280858c604051602001612050929190613710565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526120889161356e565b602060405180830381855afa1580156120a5573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906120c89190613353565b6040516002906120e19089906000908890602001613736565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526121199161356e565b602060405180830381855afa158015612136573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906121599190613353565b604080516020810193909352820152606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526121a39161356e565b602060405180830381855afa1580156121c0573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906121e39190613353565b905087811461229a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605460248201527f4465706f736974436f6e74726163743a207265636f6e7374727563746564204460448201527f65706f7369744461746120646f6573206e6f74206d6174636820737570706c6960648201527f6564206465706f7369745f646174615f726f6f74000000000000000000000000608482015260a40161043b565b60016122a8602060026138a5565b6122b291906138b1565b60415410612342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c60448201527f6c00000000000000000000000000000000000000000000000000000000000000606482015260840161043b565b60016041600082825461235591906134a3565b909155505060415460005b602081101561245d5781600116600114156123995782602182602081106123895761238961339b565b01555061051e9650505050505050565b6002602182602081106123ae576123ae61339b565b01546040805160208101929092528101859052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526123fc9161356e565b602060405180830381855afa158015612419573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061243c9190613353565b925061244960028361348f565b915080612455816134bb565b915050612360565b5061246661336c565b505050505050505050505050565b60005460ff166124e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161043b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106125955761259561339b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b826001815181106125de576125de61339b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b826002815181106126275761262761339b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106126705761267061339b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b826004815181106126b9576126b961339b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b826005815181106127025761270261339b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061274b5761274b61339b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106127945761279461339b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b73ffffffffffffffffffffffffffffffffffffffff82166127ed576108a481612944565b6108a48282612989565b60005460ff1615612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161043b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861252b3390565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261074e908490612adb565b604051479073ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f1935050505015801561074e573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8416906370a082319060240160206040518083038186803b1580156129f157600080fd5b505afa158015612a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a299190613353565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015612a9d57600080fd5b505af1158015612ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad59190613331565b50505050565b6000612b3d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612be79092919063ffffffff16565b80519091501561074e5780806020019051810190612b5b9190613331565b61074e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161043b565b6060612bf68484600085612c00565b90505b9392505050565b606082471015612c92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161043b565b843b612cfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161043b565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612d23919061356e565b60006040518083038185875af1925050503d8060008114612d60576040519150601f19603f3d011682016040523d82523d6000602084013e612d65565b606091505b5091509150612d75828286612d80565b979650505050505050565b60608315612d8f575081612bf9565b825115612d9f5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043b9190613097565b600060208284031215612de557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612bf957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e5557600080fd5b813567ffffffffffffffff80821115612e7057612e70612e15565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715612eb657612eb6612e15565b81604052838152866020858801011115612ecf57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a08688031215612f0757600080fd5b853567ffffffffffffffff80821115612f1f57600080fd5b612f2b89838a01612e44565b96506020880135915080821115612f4157600080fd5b612f4d89838a01612e44565b95506040880135915080821115612f6357600080fd5b50612f7088828901612e44565b9598949750949560608101359550608001359392505050565b600060208284031215612f9b57600080fd5b813567ffffffffffffffff811115612fb257600080fd5b612fbe84828501612e44565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff811681146119ee57600080fd5b60008060408385031215612ffb57600080fd5b823561300681612fc6565b9150602083013561301681612fc6565b809150509250929050565b60005b8381101561303c578181015183820152602001613024565b83811115612ad55750506000910152565b60008151808452613065816020860160208601613021565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612bf9602083018461304d565b60008083601f8401126130bc57600080fd5b50813567ffffffffffffffff8111156130d457600080fd5b6020830191508360208260051b85010111156130ef57600080fd5b9250929050565b60008060008060006060868803121561310e57600080fd5b85359450602086013567ffffffffffffffff8082111561312d57600080fd5b61313989838a016130aa565b9096509450604088013591508082111561315257600080fd5b5061315f888289016130aa565b969995985093965092949392505050565b60006020828403121561318257600080fd5b8135612bf981612fc6565b60008083601f84011261319f57600080fd5b50813567ffffffffffffffff8111156131b757600080fd5b6020830191508360208285010111156130ef57600080fd5b600080600080606085870312156131e557600080fd5b84356131f081612fc6565b935060208501359250604085013567ffffffffffffffff81111561321357600080fd5b61321f8782880161318d565b95989497509550505050565b6000806020838503121561323e57600080fd5b823567ffffffffffffffff81111561325557600080fd5b613261858286016130aa565b90969095509350505050565b6000806000806000806000806080898b03121561328957600080fd5b883567ffffffffffffffff808211156132a157600080fd5b6132ad8c838d0161318d565b909a50985060208b01359150808211156132c657600080fd5b6132d28c838d0161318d565b909850965060408b01359150808211156132eb57600080fd5b6132f78c838d0161318d565b909650945060608b013591508082111561331057600080fd5b5061331d8b828c016130aa565b999c989b5096995094979396929594505050565b60006020828403121561334357600080fd5b81518015158114612bf957600080fd5b60006020828403121561336557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156133dc57600080fd5b813567ffffffffffffffff81168114612bf957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561345b5761345b6133f4565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261349e5761349e613460565b500490565b600082198211156134b6576134b66133f4565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134ed576134ed6133f4565b5060010190565b60008261350357613503613460565b500690565b6000808585111561351857600080fd5b8386111561352557600080fd5b5050820193919092039150565b803560208310156103cc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b60008251613580818460208701613021565b9190910192915050565b838152600083516135a2816020850160208801613021565b80830190507fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008416602082015260388101915050949350505050565b60a0815260006135f160a083018861304d565b8281036020840152613603818861304d565b90508281036040840152613617818761304d565b9050828103606084015261362b818661304d565b9050828103608084015261363f818561304d565b98975050505050505050565b6000835161365d818460208801613021565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000939093169190920190815260100192915050565b6000606082840312156136a457600080fd5b82601f8301126136b357600080fd5b6040516060810181811067ffffffffffffffff821117156136d6576136d6612e15565b6040528060608401858111156136eb57600080fd5b845b818110156137055780518352602092830192016136ed565b509195945050505050565b82815260008251613728816020850160208701613021565b919091016020019392505050565b60008451613748818460208901613021565b7fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009490941691909301908152601881019190915260380192915050565b600181815b808511156137de57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156137c4576137c46133f4565b808516156137d157918102915b93841c939080029061378a565b509250929050565b6000826137f5575060016103cc565b81613802575060006103cc565b816001811461381857600281146138225761383e565b60019150506103cc565b60ff841115613833576138336133f4565b50506001821b6103cc565b5060208310610133831016604e8410600b8410161715613861575081810a6103cc565b61386b8383613785565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561389d5761389d6133f4565b029392505050565b6000612bf983836137e6565b6000828210156138c3576138c36133f4565b50039056fea264697066735822122036fc2157b76ea8a047c135c6701792d945e1ed4ef90a59f6b46c74c84ed695e464736f6c63430008090033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc000000000000000000000000face2face0000000000000000000000000000000000000000000000000000000babe2bed00000000000000000000000000000002" + }, + "0xface2face0000000000000000000000000000000": { + "balance": "0", + "constructor": "0x608060405234801561001057600080fd5b5060405161026e38038061026e83398101604081905261002f916101d4565b6040516340c10f1960e01b81526001600160a01b03808316600483015260248201859052839183918316906340c10f1990604401600060405180830381600087803b15801561007d57600080fd5b505af1158015610091573d6000803e3d6000fd5b50506040516340c10f1960e01b81526001600160a01b03898116600483015260248201899052851692506340c10f199150604401600060405180830381600087803b1580156100df57600080fd5b505af11580156100f3573d6000803e3d6000fd5b5050604051633825b60160e11b81526001600160a01b0389811660048301528416925063704b6c029150602401600060405180830381600087803b15801561013a57600080fd5b505af115801561014e573d6000803e3d6000fd5b5050604051633825b60160e11b81526001600160a01b0389811660048301528716925063704b6c029150602401600060405180830381600087803b15801561019557600080fd5b505af11580156101a9573d6000803e3d6000fd5b50505050505050505050610221565b80516001600160a01b03811681146101cf57600080fd5b919050565b600080600080608085870312156101ea57600080fd5b6101f3856101b8565b935060208501519250610208604086016101b8565b9150610216606086016101b8565b905092959194509250565b603f8061022f6000396000f3fe6080604052600080fdfea2646970667358221220736146d047d972ba2411e1910bb9eb02bef6f4135edcdf986f9fe8612931cf5264736f6c63430008090033000000000000000000000000cc4e00a72d871d6c328bcfe9025ad93d0a26df5100000000000000000000000000000000000000000000021e19e0c9bab2400000000000000000000000000000babe2bed00000000000000000000000000000002000000000000000000000000babe2bed00000000000000000000000000000003" + } + }, + "config": { + "chainId": 10200, + "consensus": "aura", + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "eip1559FeeCollectorTransition": 0, + "eip1559FeeCollector": "0x1559000000000000000000000000000000000000", + "terminalTotalDifficulty": 0, + "terminalTotalDifficultyPassed": true, + "shanghaiTime": 1684934220, + "aura": { + "stepDuration": 5, + "blockReward": 0, + "maximumUncleCountTransition": 0, + "maximumUncleCount": 0, + "validators": { + "multi": { + "0": { + "list": [ + "0x5cd99ac2f0f8c25a1e670f6bab19d52aad69d875" + ] + } + } + }, + "blockRewardContractAddress": "0x2000000000000000000000000000000000000001", + "blockRewardContractTransition": 0, + "randomnessContractAddress": { + "0": "0x3000000000000000000000000000000000000001" + }, + "posdaoTransition": 0, + "blockGasLimitContractTransitions": { + "0": "0x4000000000000000000000000000000000000001" + }, + "registrar": "0x6000000000000000000000000000000000000000", + "withdrawalContractAddress": "0xbabe2bed00000000000000000000000000000003" + } + }, + "difficulty": "0x0", + "gasLimit": "0x989680", + "timestamp": 0, + "auRaSeal": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +} diff --git a/simulators/ethereum/engine/main.go b/simulators/ethereum/engine/main.go index fdac17a2b6..2b4616387c 100644 --- a/simulators/ethereum/engine/main.go +++ b/simulators/ethereum/engine/main.go @@ -3,6 +3,7 @@ package main import ( "fmt" "math/big" + "strconv" "strings" "time" @@ -160,6 +161,9 @@ func addTestsToSuite(sim *hivesim.Simulation, suite *hivesim.Suite, tests []test delete(newParams, "HIVE_CLIQUE_PERIOD") delete(newParams, "HIVE_MINER") newParams = newParams.Set("HIVE_POST_MERGE_GENESIS", "false") + newParams = newParams.Set("HIVE_NETWORK_ID", strconv.FormatInt(genesis.Config().ChainID.Int64(), 10)) + t := strconv.FormatUint(genesis.Difficulty().Uint64(), 10) + newParams = newParams.Set("HIVE_TERMINAL_TOTAL_DIFFICULTY", t) //} if clientTypes, err := sim.ClientTypes(); err == nil { diff --git a/simulators/ethereum/engine/suites/withdrawals/tests.go b/simulators/ethereum/engine/suites/withdrawals/tests.go index e50cafbd7b..2f4c7951d3 100644 --- a/simulators/ethereum/engine/suites/withdrawals/tests.go +++ b/simulators/ethereum/engine/suites/withdrawals/tests.go @@ -135,18 +135,16 @@ var Tests = []test.SpecInterface{ // // TODO: Fix this test. It's reverting the block, which is the expected behavior. &WithdrawalsBaseSpec{ Spec: test.Spec{ - Name: "Withdrawals Fork on Block 3", + Name: "Withdraw to a single account", About: ` - Tests the transition to the withdrawals fork after two blocks - have happened. - Block 2 is sent with invalid non-null withdrawals payload and - client is expected to respond with the appropriate error. + Make multiple withdrawals to a single account. `, }, - WithdrawalsForkHeight: 3, // Genesis, Block 1 and 2 are Pre-Withdrawals - WithdrawalsBlockCount: 1, - WithdrawalsPerBlock: 16, - TimeIncrements: 5, + WithdrawalsForkHeight: 1, + WithdrawalsBlockCount: 1, + WithdrawalsPerBlock: 64, + WithdrawableAccountCount: 1, + TimeIncrements: 5, }, &WithdrawalsBaseSpec{ @@ -235,7 +233,7 @@ var Tests = []test.SpecInterface{ TestCorrupedHashPayloads: true, }, - // Block value tests + //Block value tests //&BlockValueSpec{ // WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ // Spec: test.Spec{ @@ -310,68 +308,68 @@ var Tests = []test.SpecInterface{ SyncSteps: 1, }, - //&WithdrawalsSyncSpec{ - // WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ - // Spec: test.Spec{ - // Name: "Sync after 2 blocks - Withdrawals on Block 2 - Multiple Withdrawal Accounts - No Transactions", - // About: ` - // - Spawn a first client - // - Go through withdrawals fork on Block 2 - // - Withdraw to 16 accounts each block for 2 blocks - // - Spawn a secondary client and send FCUV2(head) - // - Wait for sync, which include syncing a pre-Withdrawals block, and verify withdrawn account's balance - // `, - // }, - // WithdrawalsForkHeight: 2, - // WithdrawalsBlockCount: 2, - // WithdrawalsPerBlock: 16, - // WithdrawableAccountCount: 16, - // TransactionsPerBlock: common.Big0, - // }, - // SyncSteps: 1, - //}, + &WithdrawalsSyncSpec{ + WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ + Spec: test.Spec{ + Name: "Sync after 2 blocks - Withdrawals on Block 2 - Multiple Withdrawal Accounts - No Transactions", + About: ` + - Spawn a first client + - Go through withdrawals fork on Block 2 + - Withdraw to 16 accounts each block for 2 blocks + - Spawn a secondary client and send FCUV2(head) + - Wait for sync, which include syncing a pre-Withdrawals block, and verify withdrawn account's balance + `, + }, + WithdrawalsForkHeight: 2, + WithdrawalsBlockCount: 2, + WithdrawalsPerBlock: 16, + WithdrawableAccountCount: 16, + TransactionsPerBlock: common.Big0, + }, + SyncSteps: 1, + }, - //&WithdrawalsSyncSpec{ - // WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ - // Spec: test.Spec{ - // Name: "Sync after 2 blocks - Withdrawals on Block 2 - Multiple Withdrawal Accounts", - // About: ` - // - Spawn a first client - // - Go through withdrawals fork on Block 2 - // - Withdraw to 16 accounts each block for 2 blocks - // - Spawn a secondary client and send FCUV2(head) - // - Wait for sync, which include syncing a pre-Withdrawals block, and verify withdrawn account's balance - // `, - // }, - // WithdrawalsForkHeight: 2, - // WithdrawalsBlockCount: 2, - // WithdrawalsPerBlock: 16, - // WithdrawableAccountCount: 16, - // }, - // SyncSteps: 1, - //}, + &WithdrawalsSyncSpec{ + WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ + Spec: test.Spec{ + Name: "Sync after 2 blocks - Withdrawals on Block 2 - Multiple Withdrawal Accounts", + About: ` + - Spawn a first client + - Go through withdrawals fork on Block 2 + - Withdraw to 16 accounts each block for 2 blocks + - Spawn a secondary client and send FCUV2(head) + - Wait for sync, which include syncing a pre-Withdrawals block, and verify withdrawn account's balance + `, + }, + WithdrawalsForkHeight: 2, + WithdrawalsBlockCount: 2, + WithdrawalsPerBlock: 16, + WithdrawableAccountCount: 16, + }, + SyncSteps: 1, + }, - // // TODO: This test is failing, need to investigate. - // &WithdrawalsSyncSpec{ - // WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ - // Spec: test.Spec{ - // Name: "Sync after 128 blocks - Withdrawals on Block 2 - Multiple Withdrawal Accounts", - // About: ` - // - Spawn a first client - // - Go through withdrawals fork on Block 2 - // - Withdraw to many accounts 16 times each block for 128 blocks - // - Spawn a secondary client and send FCUV2(head) - // - Wait for sync, which include syncing a pre-Withdrawals block, and verify withdrawn account's balance - // `, - // TimeoutSeconds: 300, - // }, - // WithdrawalsForkHeight: 2, - // WithdrawalsBlockCount: 128, - // WithdrawalsPerBlock: 16, - // WithdrawableAccountCount: 1024, - // }, - // SyncSteps: 1, - // }, + // TODO: This test is failing, need to investigate. + &WithdrawalsSyncSpec{ + WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ + Spec: test.Spec{ + Name: "Sync after 128 blocks - Withdrawals on Block 2 - Multiple Withdrawal Accounts", + About: ` + - Spawn a first client + - Go through withdrawals fork on Block 2 + - Withdraw to many accounts 16 times each block for 128 blocks + - Spawn a secondary client and send FCUV2(head) + - Wait for sync, which include syncing a pre-Withdrawals block, and verify withdrawn account's balance + `, + TimeoutSeconds: 300, + }, + WithdrawalsForkHeight: 2, + WithdrawalsBlockCount: 128, + WithdrawalsPerBlock: 16, + WithdrawableAccountCount: 1024, + }, + SyncSteps: 1, + }, //Re-Org tests &WithdrawalsReorgSpec{ @@ -432,145 +430,145 @@ var Tests = []test.SpecInterface{ }, // TODO: - // &WithdrawalsReorgSpec{ - // WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ - // Spec: test.Spec{ - // Name: "Withdrawals Fork on Block 8 - 10 Block Re-Org NewPayload", - // About: ` - // Tests a 10 block re-org using NewPayload - // Re-org does not change withdrawals fork height, but changes - // the payload at the height of the fork - // `, - // SlotsToSafe: big.NewInt(32), - // SlotsToFinalized: big.NewInt(64), - // TimeoutSeconds: 300, - // }, - // WithdrawalsForkHeight: 8, // Genesis is Pre-Withdrawals - // WithdrawalsBlockCount: 8, - // WithdrawalsPerBlock: 128, - // }, - // ReOrgBlockCount: 10, - // ReOrgViaSync: false, - // }, + &WithdrawalsReorgSpec{ + WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ + Spec: test.Spec{ + Name: "Withdrawals Fork on Block 8 - 10 Block Re-Org NewPayload", + About: ` + Tests a 10 block re-org using NewPayload + Re-org does not change withdrawals fork height, but changes + the payload at the height of the fork + `, + SlotsToSafe: big.NewInt(32), + SlotsToFinalized: big.NewInt(64), + TimeoutSeconds: 300, + }, + WithdrawalsForkHeight: 8, // Genesis is Pre-Withdrawals + WithdrawalsBlockCount: 8, + WithdrawalsPerBlock: 128, + }, + ReOrgBlockCount: 10, + ReOrgViaSync: false, + }, // TODO: - // &WithdrawalsReorgSpec{ - // WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ - // Spec: test.Spec{ - // Name: "Withdrawals Fork on Block 8 - 10 Block Re-Org Sync", - // About: ` - // Tests a 10 block re-org using sync - // Re-org does not change withdrawals fork height, but changes - // the payload at the height of the fork - // `, - // SlotsToSafe: big.NewInt(32), - // SlotsToFinalized: big.NewInt(64), - // TimeoutSeconds: 300, - // }, - // WithdrawalsForkHeight: 8, // Genesis is Pre-Withdrawals - // WithdrawalsBlockCount: 8, - // WithdrawalsPerBlock: 128, - // }, - // ReOrgBlockCount: 10, - // ReOrgViaSync: true, - // }, + &WithdrawalsReorgSpec{ + WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ + Spec: test.Spec{ + Name: "Withdrawals Fork on Block 8 - 10 Block Re-Org Sync", + About: ` + Tests a 10 block re-org using sync + Re-org does not change withdrawals fork height, but changes + the payload at the height of the fork + `, + SlotsToSafe: big.NewInt(32), + SlotsToFinalized: big.NewInt(64), + TimeoutSeconds: 300, + }, + WithdrawalsForkHeight: 8, // Genesis is Pre-Withdrawals + WithdrawalsBlockCount: 8, + WithdrawalsPerBlock: 128, + }, + ReOrgBlockCount: 10, + ReOrgViaSync: true, + }, // TODO: - // &WithdrawalsReorgSpec{ - // WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ - // Spec: test.Spec{ - // Name: "Withdrawals Fork on Canonical Block 8 / Side Block 7 - 10 Block Re-Org", - // About: ` - // Tests a 10 block re-org using NewPayload - // Sidechain reaches withdrawals fork at a lower block height - // than the canonical chain - // `, - // SlotsToSafe: big.NewInt(32), - // SlotsToFinalized: big.NewInt(64), - // TimeoutSeconds: 300, - // }, - // WithdrawalsForkHeight: 8, // Genesis is Pre-Withdrawals - // WithdrawalsBlockCount: 8, - // WithdrawalsPerBlock: 128, - // }, - // ReOrgBlockCount: 10, - // ReOrgViaSync: false, - // SidechainTimeIncrements: 2, - // }, + &WithdrawalsReorgSpec{ + WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ + Spec: test.Spec{ + Name: "Withdrawals Fork on Canonical Block 8 / Side Block 7 - 10 Block Re-Org", + About: ` + Tests a 10 block re-org using NewPayload + Sidechain reaches withdrawals fork at a lower block height + than the canonical chain + `, + SlotsToSafe: big.NewInt(32), + SlotsToFinalized: big.NewInt(64), + TimeoutSeconds: 300, + }, + WithdrawalsForkHeight: 8, // Genesis is Pre-Withdrawals + WithdrawalsBlockCount: 8, + WithdrawalsPerBlock: 128, + }, + ReOrgBlockCount: 10, + ReOrgViaSync: false, + SidechainTimeIncrements: 2, + }, // TODO: - // &WithdrawalsReorgSpec{ - // WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ - // Spec: test.Spec{ - // Name: "Withdrawals Fork on Canonical Block 8 / Side Block 7 - 10 Block Re-Org Sync", - // About: ` - // Tests a 10 block re-org using sync - // Sidechain reaches withdrawals fork at a lower block height - // than the canonical chain - // `, - // SlotsToSafe: big.NewInt(32), - // SlotsToFinalized: big.NewInt(64), - // TimeoutSeconds: 300, - // }, - // WithdrawalsForkHeight: 8, // Genesis is Pre-Withdrawals - // WithdrawalsBlockCount: 8, - // WithdrawalsPerBlock: 128, - // }, - // ReOrgBlockCount: 10, - // ReOrgViaSync: true, - // SidechainTimeIncrements: 2, - // }, + &WithdrawalsReorgSpec{ + WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ + Spec: test.Spec{ + Name: "Withdrawals Fork on Canonical Block 8 / Side Block 7 - 10 Block Re-Org Sync", + About: ` + Tests a 10 block re-org using sync + Sidechain reaches withdrawals fork at a lower block height + than the canonical chain + `, + SlotsToSafe: big.NewInt(32), + SlotsToFinalized: big.NewInt(64), + TimeoutSeconds: 300, + }, + WithdrawalsForkHeight: 8, // Genesis is Pre-Withdrawals + WithdrawalsBlockCount: 8, + WithdrawalsPerBlock: 128, + }, + ReOrgBlockCount: 10, + ReOrgViaSync: true, + SidechainTimeIncrements: 2, + }, // TODO: - // &WithdrawalsReorgSpec{ - // WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ - // Spec: test.Spec{ - // Name: "Withdrawals Fork on Canonical Block 8 / Side Block 9 - 10 Block Re-Org", - // About: ` - // Tests a 10 block re-org using NewPayload - // Sidechain reaches withdrawals fork at a higher block height - // than the canonical chain - // `, - // SlotsToSafe: big.NewInt(32), - // SlotsToFinalized: big.NewInt(64), - // TimeoutSeconds: 300, - // }, - // WithdrawalsForkHeight: 8, // Genesis is Pre-Withdrawals - // WithdrawalsBlockCount: 8, - // WithdrawalsPerBlock: 128, - // TimeIncrements: 2, - // }, - // ReOrgBlockCount: 10, - // ReOrgViaSync: false, - // SidechainTimeIncrements: 1, - // }, + &WithdrawalsReorgSpec{ + WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ + Spec: test.Spec{ + Name: "Withdrawals Fork on Canonical Block 8 / Side Block 9 - 10 Block Re-Org", + About: ` + Tests a 10 block re-org using NewPayload + Sidechain reaches withdrawals fork at a higher block height + than the canonical chain + `, + SlotsToSafe: big.NewInt(32), + SlotsToFinalized: big.NewInt(64), + TimeoutSeconds: 300, + }, + WithdrawalsForkHeight: 8, // Genesis is Pre-Withdrawals + WithdrawalsBlockCount: 8, + WithdrawalsPerBlock: 128, + TimeIncrements: 2, + }, + ReOrgBlockCount: 10, + ReOrgViaSync: false, + SidechainTimeIncrements: 1, + }, // TODO: - // &WithdrawalsReorgSpec{ - // WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ - // Spec: test.Spec{ - // Name: "Withdrawals Fork on Canonical Block 8 / Side Block 9 - 10 Block Re-Org Sync", - // About: ` - // Tests a 10 block re-org using sync - // Sidechain reaches withdrawals fork at a higher block height - // than the canonical chain - // `, - // SlotsToSafe: big.NewInt(32), - // SlotsToFinalized: big.NewInt(64), - // TimeoutSeconds: 300, - // }, - // WithdrawalsForkHeight: 8, // Genesis is Pre-Withdrawals - // WithdrawalsBlockCount: 8, - // WithdrawalsPerBlock: 128, - // TimeIncrements: 2, - // }, - // ReOrgBlockCount: 10, - // ReOrgViaSync: true, - // SidechainTimeIncrements: 1, - // }, - - //// TODO: REORG SYNC WHERE SYNCED BLOCKS HAVE WITHDRAWALS BEFORE TIME - // + &WithdrawalsReorgSpec{ + WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ + Spec: test.Spec{ + Name: "Withdrawals Fork on Canonical Block 8 / Side Block 9 - 10 Block Re-Org Sync", + About: ` + Tests a 10 block re-org using sync + Sidechain reaches withdrawals fork at a higher block height + than the canonical chain + `, + SlotsToSafe: big.NewInt(32), + SlotsToFinalized: big.NewInt(64), + TimeoutSeconds: 300, + }, + WithdrawalsForkHeight: 8, // Genesis is Pre-Withdrawals + WithdrawalsBlockCount: 8, + WithdrawalsPerBlock: 128, + TimeIncrements: 2, + }, + ReOrgBlockCount: 10, + ReOrgViaSync: true, + SidechainTimeIncrements: 1, + }, + + // TODO: REORG SYNC WHERE SYNCED BLOCKS HAVE WITHDRAWALS BEFORE TIME + //// EVM Tests (EIP-3651, EIP-3855, EIP-3860) //&MaxInitcodeSizeSpec{ // WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ @@ -583,8 +581,8 @@ var Tests = []test.SpecInterface{ // OverflowMaxInitcodeTxCountBeforeFork: 0, // OverflowMaxInitcodeTxCountAfterFork: 1, //}, - - //// Execution layer withdrawals spec + // + // Execution layer withdrawals spec &WithdrawalsExecutionLayerSpec{ WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ Spec: test.Spec{ @@ -645,42 +643,42 @@ var Tests = []test.SpecInterface{ }, ClaimBlocksCount: 2, }, - //&WithdrawalsExecutionLayerSpec{ - // WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ - // Spec: test.Spec{ - // Name: "Withdrawals Fork on Block 4 - 4 blocks withdrawals - 5 mass-claims - 64 withdrawals per block", - // About: ` - // - Shapella on block 4 - // - 4 blocks with withdrawals - // - Claim accumulated withdrawals - // - Produce 4 additional pairs (A, B) of blocks: - // A: block with withdrawals - // B: block with claim Tx - // - Compares balances and events values with withdrawals from CL - // `, - // }, - // WithdrawalsForkHeight: 4, - // WithdrawalsBlockCount: 4, - // WithdrawalsPerBlock: 64, - // TimeIncrements: 5, - // }, - // ClaimBlocksCount: 5, - //}, + &WithdrawalsExecutionLayerSpec{ + WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ + Spec: test.Spec{ + Name: "Withdrawals Fork on Block 4 - 4 blocks withdrawals - 5 mass-claims - 64 withdrawals per block", + About: ` + - Shapella on block 4 + - 4 blocks with withdrawals + - Claim accumulated withdrawals + - Produce 4 additional pairs (A, B) of blocks: + A: block with withdrawals + B: block with claim Tx + - Compares balances and events values with withdrawals from CL + `, + }, + WithdrawalsForkHeight: 4, + WithdrawalsBlockCount: 4, + WithdrawalsPerBlock: 64, + TimeIncrements: 5, + }, + ClaimBlocksCount: 5, + }, - // &WithdrawalsExecutionLayerSpec{ - // WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ - // Spec: test.Spec{ - // Name: "Withdrawals Fork on Block 5", - // About: ` - // `, - // }, - // WithdrawalsForkHeight: 5, - // WithdrawalsBlockCount: 1, - // WithdrawalsPerBlock: 32, - // TimeIncrements: 5, - // }, - // ClaimBlocksCount: 2, - // }, + &WithdrawalsExecutionLayerSpec{ + WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ + Spec: test.Spec{ + Name: "Withdrawals Fork on Block 5", + About: ` + `, + }, + WithdrawalsForkHeight: 5, + WithdrawalsBlockCount: 1, + WithdrawalsPerBlock: 32, + TimeIncrements: 5, + }, + ClaimBlocksCount: 2, + }, &WithdrawalsExecutionLayerSpec{ WithdrawalsBaseSpec: &WithdrawalsBaseSpec{ Spec: test.Spec{ @@ -1019,7 +1017,7 @@ func (ws *WithdrawalsBaseSpec) sendPayloadTransactions(t *test.Env) { } } -func (ws *WithdrawalsBaseSpec) waitForShaghai(t *test.Env) { +func (ws *WithdrawalsBaseSpec) waitForShanghai(t *test.Env) { if time.Now().Unix() < int64(*t.Genesis.Config().ShanghaiTime) { tUnix := time.Unix(t.CLMock.ShanghaiTimestamp.Int64(), 0) durationUntilFuture := time.Until(tUnix) @@ -1104,7 +1102,7 @@ func (ws *WithdrawalsBaseSpec) Execute(t *test.Env) { }, }) -ws.waitForShaghai(t) +ws.waitForShanghai(t) var ( startAccount = ws.GetWithdrawalsStartAccount() @@ -1135,35 +1133,34 @@ for i := 0; i < int(ws.WithdrawalsBlockCount); i++ { if !ws.SkipBaseVerifications { // Verify the list of withdrawals returned on the payload built - // completely matches the list provided in the // engine_forkchoiceUpdatedV2 method call - if sentList, ok := ws.WithdrawalsHistory[t.CLMock.CurrentPayloadNumber]; !ok { - t.Fatalf("FAIL (%s): Withdrawals sent list was not saved", t.TestName) - } else { - if len(sentList) != len(t.CLMock.LatestPayloadBuilt.Withdrawals) { - t.Fatalf( - "FAIL (%s): Incorrect list of withdrawals on built payload: want=%d, got=%d", - t.TestName, - len(sentList), - len(t.CLMock.LatestPayloadBuilt.Withdrawals), - ) - } - for i := 0; i < len(sentList); i++ { - if err := test.CompareWithdrawal(sentList[i], t.CLMock.LatestPayloadBuilt.Withdrawals[i]); err != nil { - t.Fatalf("FAIL (%s): Incorrect withdrawal on index %d: %v", t.TestName, i, err) + if sentList, ok := ws.WithdrawalsHistory[t.CLMock.CurrentPayloadNumber]; !ok { + t.Fatalf("FAIL (%s): Withdrawals sent list was not saved", t.TestName) + } else { + if len(sentList) != len(t.CLMock.LatestPayloadBuilt.Withdrawals) { + t.Fatalf( + "FAIL (%s): Incorrect list of withdrawals on built payload: want=%d, got=%d", + t.TestName, + len(sentList), + len(t.CLMock.LatestPayloadBuilt.Withdrawals), + ) + } + for i := 0; i < len(sentList); i++ { + if err := test.CompareWithdrawal(sentList[i], t.CLMock.LatestPayloadBuilt.Withdrawals[i]); err != nil { + t.Fatalf("FAIL (%s): Incorrect withdrawal on index %d: %v", t.TestName, i, err) + } } } } - } - }, - OnForkchoiceBroadcast: func() { - if !ws.SkipBaseVerifications { - for _, addr := range ws.WithdrawalsHistory.GetAddressesWithdrawnOnBlock(t.CLMock.LatestExecutedPayload.Number) { - // Test balance at `latest`, which should have the withdrawal applied. - withdrawableAmount, err := getWithdrawableAmount(client, addr, big.NewInt(int64(t.CLMock.LatestExecutedPayload.Number))) - if err != nil { - t.Fatalf("FAIL (%s): Error trying to get balance of token: %v, address: %v", t.TestName, err, addr.Hex()) - } + }, + OnForkchoiceBroadcast: func() { + if !ws.SkipBaseVerifications { + for _, addr := range ws.WithdrawalsHistory.GetAddressesWithdrawnOnBlock(t.CLMock.LatestExecutedPayload.Number) { + // Test balance at `latest`, which should have the withdrawal applied. + withdrawableAmount, err := getWithdrawableAmount(client, addr, big.NewInt(int64(t.CLMock.LatestExecutedPayload.Number))) + if err != nil { + t.Fatalf("FAIL (%s): Error trying to get balance of token: %v, address: %v", t.TestName, err, addr.Hex()) + } expectBalanceMGNO := ws.WithdrawalsHistory.GetExpectedAccumulatedBalance(addr, t.CLMock.LatestExecutedPayload.Number) expectBalance := libgno.UnwrapToGNO(expectBalanceMGNO) @@ -1810,7 +1807,7 @@ func (ws *WithdrawalsExecutionLayerSpec) Execute(t *test.Env) { }, }) - ws.waitForShaghai(t) + ws.waitForShanghai(t) var ( startAccount = ws.GetWithdrawalsStartAccount() diff --git a/simulators/ethereum/engine/test/spec.go b/simulators/ethereum/engine/test/spec.go index 1edecc5b72..1cdf5aadd9 100644 --- a/simulators/ethereum/engine/test/spec.go +++ b/simulators/ethereum/engine/test/spec.go @@ -108,15 +108,27 @@ func (s Spec) GetForkConfig() ForkConfig { return s.ForkConfig } +func GenesisFactory(clientName string) helper.Genesis { + switch clientName { + case "erigon_": + return &helper.ErigonGenesis{} + case "nethermind_": + return &helper.NethermindChainSpec{} + default: + panic("unsupported client provided") + } +} + func (s Spec) GetGenesis(base string) helper.Genesis { if len(base) != 0 { base += "_" } + gen := GenesisFactory(base) genesisPath := "./init/" + base + "genesis.json" if s.GenesisFile != "" { genesisPath = fmt.Sprintf("./init/%s", s.GenesisFile) } - genesis := helper.LoadGenesis(genesisPath) + genesis := helper.LoadGenesis(genesisPath, gen) return genesis } func (s Spec) GetGenesisTest(base string) string {